学习计算机图形学的朋友们基础到的第一个图形库因该就是Opengl,毕竟Opengl相对DirectX和Valuken要简单不少。但是Opengl这个库当中的函数到底应该如何调用,成了很多朋友们学习路上的拦路虎,再次笔者就交大家如何配置第三方库来调用Opengl当中的函数。
1、下载
Visual Studio
官方网站https://visualstudio.microsoft.com/zh-hans/
其他的两个版本是需要付费的,这里下载社区版也是够用了。Visual Studio 的安装基本上就是傻瓜式的安装,这里就不多讲述了。在安装的过程当中记得要
这两个记得勾选,其他的看自己情况进行勾选。
下载GLFW
下载完以后是一个压缩包
下载GLAD
按照下图进行选择
按照上面选好了后点积GENERATE按钮
点击压缩包,就可以进行下载
2、创建项目进行配置
创建C++空项目
创建一个空的C++项目Graphics(这里不多过多的演示)
配置GLFW
右键解决方案添加新的空C++项目GLFW
右键点击GLFW项目,选择在文件资源管理器当中打开文件
将下载的GLFW压缩包当中deps,include,src,文件夹复制到上面的文件路劲当中
点击 Visual Studio 当中的GLFW项目,再点击显示所有文件
右键点击这三个文件夹,选择包括在项目当中
将这三个文件夹都进行这样的操作
再右键GLFW项目,选择属性
配置属性当中选择常规,配置类型选择静态库
C/C++ 常规项当中,附加包含目录当中,添加路径$(SolutionDir)GLFW\include
这里我们可以试着去生成一下静态库。右键GLFW项目,点击生成。
结果是,失败了?(可能很多朋友们在这里就放弃了,去另寻他法了,不过我们今天就在这里解决这个问题)
我们看一下具体的原因是This function or variable may be unsafe. Consider using _ftime64_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
编译器检查到了GLFW当中有的函数不太安全,不过有告诉我们可以使用_CRT_SECURE_NO_WARNINGS宏将这种不安全的错误关闭掉。那么我们继续配置GLFW项目,点击GLFW项目,选择配置,再选择C/C++ 预处理器,在预处理定义中添加刚才的宏
重新生成GLFW静态库
结果~~,还是报错了。(好事多磨,大家保持耐心一些,我们继续解决问题)
我们点击第一个错误,定位到错误的位置。
因为下面宏的原因,这个数组的初始化无效了,那么我们要做的就是定义这个宏,同样的我们继续配置GLFW项目,点击GLFW项目,选择配置,再选择C/C++ 预处理器,在预处理定义中添加刚才的宏
再生成GLFW静态库
成功啦!!!胜利就在眼前了
配置GLAD
新建一个C++空项目GLAD,和新建GLFW是同样的,这里就不做过多的演示了
将GLAD压缩包当中的inclue,src文件夹放在GLAD项目当中并包含在,和GLFW项目的操作也是同样的,笔者也就不做过多的演示了。
右键点击GLAD项目,选择属性,常规,配置类型选择静态库
C/C++ 常规 附加包含目录添加路径$(SolutionDir)GLAD\include
我们尝试生成GLAD静态库
一次就成功了
这两个库算是已经完成了配置,我们还要看一下到底要怎么使用
3、使用GLFW+GLAD在窗口上画一个三角形
在Graphics项目中添加一个Demo.cpp文件,将下面测试代码复制到该文件当中
#include<glad/glad.h>
#include<GLFW/glfw3.h>
#include<iostream>
int main() {
glfwInit();
GLFWwindow* window = glfwCreateWindow(640, 480, "Triangles", NULL, NULL);
glfwMakeContextCurrent(window);
glfwInit();
//需要初始化GLAD
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
float positions[6] = {
-0.5f, -0.5,
0.0f, 0.5f,
0.5f, -0.5f
};
GLuint buffer = 0;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(positions), positions, GL_STATIC_DRAW);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float), NULL);
glEnableVertexAttribArray(0);
while (!glfwWindowShouldClose(window)) {
glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES, 0, 3);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
}
右键点击Graphics项目,在C/C++ 常规 附加包含目录当中,添加路径$(SolutionDir)GLAD\include
$(SolutionDir)GLFW\include
在连接器 输入 附加依赖项当中添加opengl32.lib
右键点击Graphics项目,添加引用,选择GLAD,GLFW项目
右键点击Graphics项目,设置为启动项目
然后启动这个项目,看一下结果
运行结果,我们在一个窗口上的到了一个白色的三角形。
到此,大家就可以在计算机图形学汪洋当中遨游了
注意
这两个头文件,不能交换位置,一旦交换位置编译就会报错。
因为glfw3.h文件当中定义了__gl2_h_这个宏,在glad.h当中检查到了这个宏先前定义过,就会报错。