本篇介绍一下windows平台下,Visual Studio作为IDE下的OpenGL的环境配置问题,本文主要分为两个部分,分别介绍FreeGlut和GLFW这两个OpenGL环境的配置。

FreeGlut环境配置

下载freeglut源码

在freeglut官网(网址:http://freeglut.sourceforge.net/)下载最新版的freeglut的源代码。
1662563291117

编译freeglut

下载cmake

由于我们下载的是源代码,并不是编译好的二进制文件,所以需要我们自己进行编译。
首先我们下载Cmake,在cmake官网(https://cmake.org/download/)根据自己的平台下载最新版本的Cmake。这里有已经编译好的二进制文件,我们直接下载二进制文件即可。
1662563491630
这里下载msi安装文件或者zip的压缩文件均可。
打开下载后的cmake-gui,为如图所示的样子:
1662563614397

编译freeglut

souce code位置填写我们下载下来的freeglut源码解压后的文件夹位置,build the binaries填写我们要将编译好的二进制文件保存的位置(自己创建),然后点击下面的configure按钮。
1662563756551
接着选择自己的MSVC编译器,然后点击finish
1662563726319
在完成后点击下面的Generate
1662563988330

用vs编译出lib依赖文件

打开我们上边存放编译出二进制文件的文件夹(上边的freeglut文件夹),然后用vs打开其中后缀为sln的文件(freeglut.sln)
1662564256110
紧接着我们在Debug模式和Release模式下分别生成解决方案。

配置freeglut

配置include文件

将下载的freeglut源码文件夹里的include文件夹下的GL文件夹复制到vs的安装目录下的vc文件夹下的include文件夹,我的是MSVC文件夹位置是(D:\IDE\vsIDE\VC\Tools\MSVC\14.33.31629\include)

配置lib和dll文件

打开二进制生成文件夹的目录,将bin\Release\freeglut.dll和bin\Debug\freeglutd.dll移动到拷贝至C:\Windows\system32与C:\Windows\SysWOW64目录下。

将二进制文件生成目录下lib\Release\freeglut.lib、freeglut_static.lib和lib\Debug\freeglutd.lib、freeglut_staticd.lib复制到MSVC的lib文件夹中,我的文件夹位置是(D:\IDE\vsIDE\VC\Tools\MSVC\14.33.31629\lib\x64)

测试

新建console项目,创建c++文件,复制如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
#include<Windows.h>
#include<GL/freeglut.h>
int main(int argc, char** argv)
{
glutInit(&argc, argv);

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(300, 300);
glutInitWindowPosition(100, 100);
glutCreateWindow("testg1");
const char* version = (const char*)glGetString(GL_VERSION);
printf_s("OpenGL版本:%s\n", version);
glutMainLoop();
return 0;
}

运行后出现如下结果即表示配置成功

1
2
OpenGL版本:4.6.13596 Compatibility Profile Context 20.10.28.10 27.20.11028.10001
freeglut (D:\code\cg\glut\x64\Debug\glut.exe): ERROR: No display callback registered for window 1

GLFW配置

下载GLFW

进入官网(https://www.glfw.org/download.html)下载GLFW,由于官网已经给我们提供好了预编译的二进制文件所以我们直接下载即可,当然也可以下载源码自行进行编译。
1662598012081

配置GLFW

  • 将下载的GLFW文件解压,将其中的include文件夹中的GLFW文件夹复制到MSVC的include文件夹中,(我的路径为:D:\IDE\vsIDE\VC\Tools\MSVC\14.33.31629\include)
  • GLFW文件夹下的lib文件夹(这里有多个以lib开头的文件夹,选择自己对应的vs版本)中的四个文件(三个lib文件,一个dll文件)复制到MSVC的lib下的x64文件夹中。

vs项目配置

打开vs新建一个Console项目,点击调试菜单,在点击调试属性(在最下面,项目名+调试属性),然后在弹出的菜单中点击链接器→输入,在右侧的附加依赖项中点击编辑,添加如下配置:

1
opengl32.lib;glfw3.lib

接下来我们在输入如下代码来测试是否配置成功:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <GLFW/glfw3.h>

int main(void)
{
GLFWwindow* window;

/* Initialize the library */
if (!glfwInit())
return -1;

/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}

/* Make the window's context current */
glfwMakeContextCurrent(window);

/* Loop until the user closes the window */
while (!glfwWindowShouldClose(window))
{
/* Render here */
glClear(GL_COLOR_BUFFER_BIT);

glBegin(GL_TRIANGLES);
glVertex2d(0.5f, 0.5f);
glVertex2d(-0.5f, -0.5f);
glVertex2d(0.5f, -0.5f);

glEnd();

/* Swap front and back buffers */
glfwSwapBuffers(window);

/* Poll for and process events */
glfwPollEvents();
}

glfwTerminate();
return 0;
}

运行后结果如图所示:
1662599123343

写在最后

在本文中,无论是FreeGlut还是GLFW,我们编译或下载的二进制文件都是64位的,所以在我们写程序进行代码的编译时,也需要去编译64位的文件,不能编译出32位的文件。
此外,发现通过这种方法进行配置完成之后,在升级MSVC编译器之后,我们复制的include和lib文件并不会被迁移到新的编译器中。而是会留在原来的编译器的文件夹中,这时就需要我们从新编译配置,或者将该文件夹中的内容复制到新的编译器文件夹中(这种没有试过,我是重新编译的,感觉小版本升级这样做不会有大问题,但大版本就不一定了)。
参考博客:
https://github.com/Garbage-boop/Blog/issues/2
https://blog.csdn.net/wpxu08/article/details/123760688?spm=1001.2014.3001.5501