OpenGL的环境配置是最让初学者头疼的事情了,主要是一开始链接什么glfw、glad,不知道有什么用,什么链接库、包含目录很头大,有一步做错就可能一大堆报错。
本文对LearnOpenGL CN教程网站中出现的库文件配置进行了一次汇总,使用的是Microsoft Visual Studio 2019 IDE,帮助初学者解决入门配置问题。
目录
1.3 配置GLFW(Graphics Library Framework(图形库框架))
1.4 GLAD(OpenGL Loading Library)
1.5 GLEW(OpenGL Extension Wrangler Library)
1. 基础环境配置
基础配置包括glfw、glad、glew、glm,有这些配置,做出最基础的光照渲染模型没有问题。
1.1 库文件下载
全部的外部文件都在这里可以找到:(https://github.com/JoeyDeVries/LearnOpenGL)当然也可以在各自官网中找到,但是网站有时候打不开。。。
创建新项目
选择C++控制台即可
这里根据你的电脑选择,这里选择64位模式
1.2 放文件到项目
把includes,lib拖进来即可,dlls其实可以不要。
需要注意的是:lib是静态库,dll是动态链接库。lib是编译时需要,dll是运行时(发布)需要的。
lib是之前的开发者将一部分源文件预先编译成库文件当要使用其中的函数时,只需要链接lib文件就可以了,而不用再理会最初的源文件。我们要使用的话需要链接到我们的项目。
1.3 GLFW(Graphics Library Framework(图形库框架))
GLFW其实就是允许用户创建窗口、定义窗口参数以及处理用户输入。我们需要配置包含文件目录和链接静态库。
配置包含文件:
项目右键属性 -> VC++目录 -> 包含目录
把includes文件引入过来,后面包含头文件时候可以直接根据子文件目录引入头文件了。
$Solution是当前项目路径。
这样写头文件就不会报错了,因为IDE会在设置的包含目录下面找你需要的头文件,写的时候改成自己的目录即可。
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <stb_image.h>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>
链接lib库文件:
项目右键属性 -> 连接器 -> 输入 -> 附加依赖项
这里的lib文件需要在之前的lib目录中,不然IDE可能找不到。
不建议把全部的glfw.lib文件都附加上来,会容易报错(不清楚什么原因)
1.4 配置GLAD(OpenGL Loading Library)
GLAD是用来管理OpenGL的函数指针的。
因为OpenGL只是一个标准/规范,具体的实现是驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。
配置GLAD注意需要把GLAD的头文件和c文件添加到项目中。
不然会出现下面的错误,就是找不到头文件了。
1.5 GLEW(OpenGL Extension Wrangler Library)
GLEW也是用来管理OpenGL的函数指针的。可以说GLAD是GLEW的升级版。
配置方法与GLAD同理。
1.6 GLM(OpenGL Mathematics)
专门为OpenGL量身定做的数学库,内置了矩阵向量的各种类型和运算函数。光照计算会用的很频繁。
是只有头文件的库,不用链接,只要放在之前的includes文件目录里面。
1.7 stb_image.h
用来导入纹理贴图。是Sean Barrett的一个非常流行的单头文件图像加载库,它能够加载大部分流行的文件格式,并且能够很简单得整合到你的工程之中。
只要引入头文件即可。
2. 第一个三角形
有了上面的配置,就可以绘制我们的第一个三角形了,这里只介绍简单的原理,代码在最后可以找到哈。
创建窗口
使用GLFW生成图形窗口,在窗口存在期间,对每一帧进行循环绘制。
VAO和VBO
VBO是顶点缓冲对象,是CPU和GPU传递信息的桥梁,数据自动送入GPU。
VAO是顶点数组对象,不同类的物体的VAO不同,向GPU描述VBO中的数据如何读取,比如顶点坐标、法线方向、纹理坐标等待。
着色器
着色器就是在GPU中运行的代码,告诉GPU对顶点如何处理,经过一系列处理生成为屏幕中的像素,使用GLSL编写。可以在主文件中用字符串表示,也可在其他文件中读取。
全部代码可以在这里找到:Code Viewer. Source code: src/1.getting_started/2.1.hello_triangle/hello_triangle.cpp