在Windows下使用微软的Visual Studio来开发应用的程序员很普遍。而在Visual Studio下配置Freeglut,多数都是通过在网上直接下载已经为特定版本的Visual Studio编译好的二进制文件来进行。然而Visual Studio的版本已有很多,因此这些直接下载的文件不一定适合我们自己使用的Visual Studio。Freeglut作为一个跨越平台的OpenGL开发工具,已经充分地考虑到各种平台下的配置安装需求,但它并没有直接提供可拿来就用的二进制形式,相反,只是提供了源代码,程序员依据各自的平台进行相应的编译后,就可得到适合自己的版本了。但此过程相对比较繁琐,从而造成众多程序员不知从何下手。
本文详细介绍了如何为免费的Visual Studio Community 2013编译并配置freeglut,最后开发并运行一个最简单的OpenGL应用。
到这里下载vs_ommunity.exe。最好用IE来打开上述地址,别的浏览器可能可以访问网页,但点不开下载地址。这是一个大小仅为1.18M的在线安装程序。也可以访问此页面来选择下载大小为6.89G的DVD9 ISO映像文件。这两种形式的文件,我都试过了,ISO映像文件可以装在32位的Win7上面,但在64位的Win7上,好像装不了,如果遇到这个问题,可选择在线安装程序。
下载并安装…… 这可是一个漫长的过程,尤其是在线安装。我上班前开始在线安装,下班后,哈,自动安装完毕了。
如果需要,也可以安装简体中文语言包。
到Freeglut官网上下载Freeglut,并将其解压到一个文件夹下面,如C:\freeglut。其目录下有两个重要文件夹,一是include,包含了C的头文件,另一是src,存有我们将要编译的源代码。
到cmake.org上下载一个可直接在Windows上安装的CMake,并双击此文件以安装。
安装好后,运行CMake,依照下图进行设置。
Where is the source code用以指定我们所解压的Freeglut的目录,此目录下有一个src的子目录。Where to build the binaries用于指定Freeglut编译后的存放结果的目录。这里,我在一个temp的目录下建了一个freeglut_32的子目录,这是因为我想在我的64位操作系统编译一个32位的Freeglut。原因下面再作进一步的解释 。
点击Configure按钮。将弹出一个如下图所示的窗口。
在Specify the generator for this project的下拉框中选Visual Studio 12 2013。我们在上面所下载的Visual Studio Community 2013,其版本号为12,发布时间应为2013。下拉框中还有一个比较接近的Visual Studio 12 2013 Win64的选项,可编译为64位的Freeglut。如前所述,我这里想要一个32位而不是64位的,故不选此选项。
点击Finish按钮。CMake将依据选择进行第一遍的编译。然后,如下图所示,暂时停止编译,以让我们作进一步选择。
其中FREEGLUT_GLES是为嵌入系统而编译,不是我们拟开发的桌面应用所需,故不选。其中均选。
然后,再次点击Configure,红色背景消失,表示可进行下一步的编译了。再点击Generate按钮,CMake瞬时显示Generating done,表示编译完成。此时可关闭CMake应用。
此时,在C:\UserData\Sarkuya\temp\freeglut_32下面,将生成许多文件,其中有一个是freeglut.sln文件,这是Visual Studio的Solution文件。双击此文件,Visual Studio运行并加载此方案。此方案下共有27个项目。在Visual Studio中按F7键,编译整个方案。
编译方案后,不仅产生了我们所需的文件,还带有一些可以直接运行的OpenGL应用。
我们可以在Visual Studio中选中特定的项目,如smooth_opengl3项目,按右键,选Set as StartUp Project,将其设为启动项目后,按F5键,运行该项目,就可出现一个迷人的多彩三角形。
这个三角形同时也告诉我们,Freeglut已经编译完毕,整装待发了。关闭smooth_opengl3应用,同时也Visual Studio。看完别人演的电影,我们也要开始自编自导了。
新建一个名为freeglut-3.0.0-msvc-compiled的文件夹,此文件夹将成为发行包的根目录。下面我们手工制作这个发行包。
我们在上面下载并解压的C:\UserData\Sarkuya\Tools\Programming\FreeGlut\freeglut-3.0.0文件夹下,将子文件夹include复制到freeglut-3.0.0-msvc-compiled的文件夹中。
在freeglut-3.0.0-msvc-compiled文件夹下新建一个lib子文件夹,
将C:\UserData\Sarkuya\temp\freeglut_32\lib\Debug文件夹下的所有三个文件: freeglut_staticd.lib, freeglutd.exp及freeglutd.lib,全部复制到新建的lib子文件夹中。
在freeglut-3.0.0-msvc-compiled文件夹下新建一个bin子文件夹,在C:\UserData\Sarkuya\temp\freeglut_32\bin\Debug文件夹,找到freeglutd.dll文件,将其复制到新建的bin子文件夹中。
此时,freeglut-3.0.0-msvc-compiled的文件夹的结构如下:
freeglut-3.0.0-msvc-compiled --> bin --> freeglutd.dll --> include --> GL --> freeglut.h --> freeglut_ext.h --> freeglut_std.h --> glut.h --> lib --> freeglut_staticd.lib --> freeglutd.exp --> freeglutd.lib
我们的32位发行包制作完毕。如果有需要,可将其打包为一个压缩文件,并放在网络上供他人下载 [访问密码: 9a07] 使用。
Visual Studio的C/C++应用的头文件目录是C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include。将发行包GL目录下的四个头文件复制到其下面的GL子目录中(如果VC的include目录下还没有GL子目录,则需手工创建)。
Visual Studio的C/C++应用的库文件目录是C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib。将发行包lib目录下的三个文件复制到其下面。
将发行包bin目录下的freeglutd.dll文件复制到C:\Windows\SysWOW64目录中。如果您的操作系统是32位的,则需复制到C:\Windows\System32目录中。
64位的操作系统在链接时将自动在C:\Windows\SysWOW64目录中查找freeglutd.dll,而32位的操作系统则自动在C:\Windows\System32目录中查找。因此,尽管我的操作系统是64位的,但由于我要开发的OpenGL应用仅为32位(这即是本文制作32位Freeglut发行包的原因),也应将这个32位的freeglutd.dll复制到C:\Windows\SysWOW64目录中。
现在,我们要开发一个简单的OpenGL应用,以验证我们的32位Freeglut发行包是否能发挥作用。
启动Visual Studio,新建一个Win32 Console Application的Visual C++项目,在main.cpp文件输入以下内容:
#include <GL/freeglut.h>
void display() {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f( 0.5, 0.5);
glVertex2f( 0.5, -0.5);
glEnd();
glFlush();
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutCreateWindow("Freeglut Hello World");
glutDisplayFunc(display);
glutMainLoop();
}
在Visual Studio中按下F5键,程序运行后,出现下图:
(很惭愧,我的OpenGL功力仅能让此四边形出现,仅此而已!但如果此话打击了您进一步学习OpenGL的自信心,看看本博客中我的头像。这是我约在三年多前使用OpenGL制作的一个正十二面体,将其摆正后渲染得出的效果。)
别不相信,我们根本不需要在Visual Studio中进行更多的设置就能让此程序运行起来。如,无需设置include目录,因为我们已将相应的头文件复制到Visual Studio的默认包含目录中;无需设置库依赖关系,因为Freeglut已在其freeglut_std.h中自动为我们挂上了OpenGL应用所需的glu32.lib, opengl32.lib, gdi32.lib, winmm.lib, user32.lib这五个库了;也无需将freeglutd.dll复制到应用目录中,因为我们已将其复制到系统的默认路径中。
是的,令人热血澎湃的OpenGL应用原本就应该如此简单!