【Modern OpenGL】环境搭建

说明:跟着learnopengl的内容学习,不是纯翻译,只是自己整理记录。
强烈推荐原文,无论是内容还是排版。 原文链接
本文地址: http://blog.csdn.net/aganlengzi/article/details/50354180

环境配置

为了创建一个很酷炫的图形,我们首要做的是创建一个OpenGL上下文和一个绘制窗口。但是,OpenGL本身并不负责这部分的工作,别忘了它只是一个专注于图形开发的规格说明或者是一个由显卡开发商实现的程序库。这就意味着我们需要自己创建一个窗口、定义一个上下文而且还要处理输入。

幸运的是,有一些库已经提供了我们需要完成的上述功能,而且其中恰好有一些库是针对OpenGL的。这些库接管了所有与特定操作系统相关的工作,为我们提供了一个纯粹的绘制窗口和OpenGL上下文。通过使用这些库,我们可以专心于图形编程而几乎不用考虑其他。这样的库有:GLUTSDLSFMLGLFW。在这个教程中,作者使用的是GLFW

就本人了解到的内容来看,国内使用GLFW的还是比较少的,至少不像GLUT那么多。那么这个教程的作者为什么要选择这个库呢?通过调研我发现了如下的解释:
首先glut太老,已经“死掉了”——最后一个版本好像还是90年代的。其次,现在出现的freeglut虽然完全兼容glut,但是好像bug太多,稳定性不太好。好像还可以使用Qt做类似的功能,但是太庞大,所以选择GLFW可能是一个非常好的选择。GLFW是开源的,另一个比肩的开源项目是SDL。

但是,仅有GLFW是不够的。GLFW提供了OpenGL和操作系统之间的桥梁,但是并没有提供OpenGL规格和真正底层实现的桥梁,换句话说,如何让我们使用的OpenGL的函数调用链接到真正的函数体。要知道,像前面所说,这些规格的具体实现是取决于具体的显卡设备厂商的。所以必然存在不同版本的OpenGL实现库。那么,如何让我们调用的OpenGL函数在运行时找到我们平台上具体的(函数库的)函数体呢?这就要求开发者来检索他们可能用到的函数体并将它们保存到函数指针方便后面的使用。这种检索是也是依赖具体操作系统的,在windows中大概是下面这个样子:

// Define the function's prototype
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// Find the function and assign it to a function pointer
GL_GENBUFFERS glGenBuffers  = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// Function can now be called as normal
GLuint buffer;
glGenBuffers(1, &buffer);

正如你看到的,这些代码看上去是复杂的,而且我们可能需要对每一个可能用到的函数都进行这样的操作,这是一项重复性很高但是并没有什么意义的工作。

还是幸运的是,像GLFW一样,我们也能够找到帮助我们完成上述过程的函数库。这里要用到的是GLEW,它是应用最广也是最新的提供此功能的函数库。

GLFW&GLEW

GLFW是一个用C语言开发的,自由,开源,专门为OpenGL绘制提供必要环境的函数库。它提供接口帮助我们创建一个OpenGL上下文,定义绘制窗口的参数并且处理用户的输入,这些正是我们需要的。它很容易和现有的项目进行整合。它支持Windows,Mac OS X,和 类UNIX系统。GLFW使用 zlib/libpng协议。

GLEW是 OpenGL Extension Wrangler的简称,它提供了我们前面讲到的重复性的函数索引的功能。

原教程利用两次来配置GLFW并且让它运行起来。确保它能够在我们搭建的环境中帮我们创建一个OpenGL上下文并且创建一个可以用于绘制的窗口。之所以用两次的量,是因为原教程采用了从源码编译到配置的整个过程的所有步骤逐一讲解的方式讲述,我直接采用的是用官网上已经预编译好的库的方式进行的配置。下面说我的方法,如果想要从源码编译、配置,请参照原文。

对于GLEW,原教程采用的是直接使用编译好的配置文件的方式来进行配置。我在下面也会说明之。

配置GLFW

我们可以从GLFW的官网上下载到我们必须的配置文件,我的IDE为Visual Studio 2012。需要注意的是,我们最好使用GLFW的32位版本(因为64位版本可能产生奇怪的错误)。我下载的得到的是glfw-3.1.2.bin.WIN32.zip,解压后得到我们配置GLFW实际需要的文件夹为:\lib-vc2012 和\include。我把解压后的整个文件夹放到了Visual Studio安装目录的VC下了。方便找,也不易丢。当然这个位置按照个人喜好放置,为了下文使用,这里定义一个宏名GLFW_LOCATION来代表这个路径吧。
所谓配置,实际上就是让我们的工程找到这些头文件,保证编译检查时候不会错;找到这些库文件,保证链接的时候不会链接不到。这样理解起来就简单了。
我们首先创建一个win32控制台空工程,然后告诉VS2012我们这个工程需要依赖一些额外的头文件和库,链接的时候要依赖glfw的库。怎么告诉呢?Visual Studio 2012中为我们提供了简单的配置方法:
右击工程名–>属性–>VC++ 目录–>包含目录 中添加 GLFW_LOCATION\include
右击工程名–>属性–>VC++ 目录–>库目录 中添加 GLFW_LOCATION\lib-vc2012
右击工程名–>属性–>链接器–>输入–>附加依赖项 中添加 glfw3.lib(直接输入)
以上就完成了这个工程关于GLFW的配置。

当然这种配置方法只是针对某个工程的,如果新建了工程,还是要完成以上的三步才能够正常使用GLFW。另外也有将头文件、库文件复制到相应的Visual Studio 头文件和库文件目录下。我本人不太喜欢这种方式。

配置GLEW

GLEW也是一个库,所以我们也需要把它链到我们的工程中。它同样可以从它的官网上下载下来,可以选择源码编译或者直接使用预编译好的二进制文件。同样,在使用中的时候最好使用32位的。

原教程选择使用了GLEW的静态版本,即glew32s.lib(注意有个s后缀)。注意GLEW3默认编译未静态方式。我下载的文件是glew-1.13.0-win32.zip,里面包含了我们需要的\lib、\include、\bin文件夹。假设glew-1.13.0-win32.zip解压路径为GLEW_LOCATION,GLEW的配置方式与GLFW类似:
右击工程名–>属性–>VC++ 目录–>包含目录 中添加 GLEW_LOCATION\include
右击工程名–>属性–>VC++ 目录–>库目录 中添加 GLEW_LOCATION\glew-1.13.0\lib\Release\Win32
右击工程名–>属性–>链接器–>输入–>附加依赖项 中添加 glew32s.lib和opengl32.lib(直接输入)
以上就完成了这个工程关于GLEW的配置。

以上我们完成了在Visual Studio 2012开发和运行OpenGL所需的两各函数库的配置。下面我们需要检验一下上面的配置是否成功,这是开展后续学习的基础。

你可能感兴趣的:(OpenGL)