前言
目前(2020年4月28日10:49:43)我使用的IDE和版本如下:
IDE: Microsoft Visual Studio Professional 2017
OpenGL版本: 3.3
需要的c++库如下:
GLFW: 版本3.3.2,下载地址:https://www.glfw.org/download.html
GLAD: 下载地址:https://glad.dav1d.de/
GLM: 版本0.9.8,下载地址:https://glm.g-truc.net/0.9.8/index.html
GLFW
如果你是新手,你是不是在想,为什么我要GLFW这个库呢?OpenGL不就是绘制图形的么?错!OpenGL不会去绘制图形,而是提供绘制图形的数据,你可以把OpenGL想象成一个黑盒子,你把一堆原始(顶点,纹理等等)放进这个黑盒子,然后这个黑盒子就会处理这些数据,然后生成可以可以绘制在屏幕上的数据,至于要在哪里绘制,使用者要提供给OpenGL,GLFW的作用就是这个。
虽然官网提供了编译好的库,但是最好下载源码,自己去编译,因为后期可能会修改源码,重新编译,怎么在Windows平台编译这些库呢?要用的CMake
使用CMake
CMake可以根据CMake生成针对不同IDE的工程文件,我们一般下载的库源码,都支持CMake。CMake下载地址https://cmake.org/,下载安装即可。打开页面如下:
![](https://img.haomeiwen.com/i15040312/0d2c8634fa4aacc2.png)
我们把界面中
where is the source code
定位到库源码的根目录。另外你要指定where to build the binaries
生成的工程文件目录。然后可以配置生成的工程内容,点击Configure后就配置好了,然后点击Generate,CMake就会根据选择的IDE生成相关的工程文件。![](https://img.haomeiwen.com/i15040312/5a00e1e61467900e.png)
生成工程文件后,打开GLFW.sln,生成解决方案即可。最后把INSTALL工程单独生成一次,就会把lib和include拷贝出来,把这两个文件夹拷贝到我们的工程中就可以使用了。
GLAD
既然窗口有了,是不是就能立即使用OpenGL绘制了,当然不是!OpenGL只是一个标准/规范(接口),具体的实现是由驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。取得地址的方法因平台而异,在Windows上会是类似这样:
// 定义函数原型
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// 找到正确的函数并赋值给函数指针
GL_GENBUFFERS glGenBuffers = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// 现在函数可以被正常调用了
GLuint buffer;
glGenBuffers(1, &buffer);
你可以看到代码非常复杂,而且很繁琐,我们需要对每个可能使用的函数都要重复这个过程。幸运的是,有些库能简化此过程,其中GLAD是目前最新,也是最流行的库。
GLAD是一个开源的库,它能解决我们上面提到的那个繁琐的问题。GLAD的配置与大多数的开源库有些许的不同,GLAD使用了一个在线服务。在这里我们能够告诉GLAD需要定义的OpenGL版本,并且根据这个版本加载所有相关的OpenGL函数。
打开GLAD的在线服务,将语言(Language)设置为C/C++,在API选项中,选择3.3以上的OpenGL(gl)版本(我们的教程中将使用3.3版本,但更新的版本也能正常工作)。之后将模式(Profile)设置为Core,并且保证生成加载器(Generate a loader)的选项是选中的。现在可以先(暂时)忽略拓展(Extensions)中的内容。都选择完之后,点击生成(Generate)按钮来生成库文件。
GLAD现在应该提供给你了一个zip压缩文件,包含两个头文件目录,和一个glad.c文件。将两个头文件目录(glad和KHR)复制到你的Include文件夹中(或者增加一个额外的项目指向这些目录),并添加glad.c文件到你的工程中。
(以上摘自https://learnopengl-cn.github.io/01%20Getting%20started/02%20Creating%20a%20window/)
GLM
GLM是OpenGL Mathematics的缩写,可以看出它是针对OpenGL的3d数学库,提供向量和矩阵的定义和运算。它是一个只有头文件的库,也就是说我们只需包含对应的头文件就行了,不用链接和编译。把头文件的根目录复制到你的工程中,然后你就可以使用这个库了。
网友评论