在Windows上配置轻量级的OpenGL开发环境
配置开发环境是最好的开始。
前言
得益于语言文字的多模糊性,对于 OpenGL ,我们的第一感觉很容易就认为那是一个图形类库,一个API,一堆代码,但是事实并非如此。
OpenGL 是一类规范,并非实打实的代码,它严苛的规范了每一个函数应该如何执行,以及它们的返回值、输出值。而它的内部实现,则是由各个 OpenGL 库开发者完成的,因此当今市面上有很多 OpenGL 库可供开发者选择。
值得说的一点是,OpenGL 的大多数实现都是由显卡厂商编写的,但各个厂商对 OpenGL 的不同实现带来了的性能差异基本可以无视,所以玩游戏卡不卡主要还是得靠硬件。
现在 OpenGL的最新版本为 OpenGL4.5,但是作为初学者来说,我们并不需要学习那么新的版本,而 OpengGL3.3 是一个不错的开始,所以请记住这一点,后文中的所有代码都是符合 OpenGL3.3 规范的。
请确认你的系统支持OpenGL3.3或更高版本,如果不支持,这边建议换个显卡。
关于更多详细信息,可以访问 LearnOpenGL 进行学习。
GLFW
GLFW 是一个专门针对 OpenGL 的 C 语言库,但我们的实际情况主要是用 C++ 调用此C库,二者兼容,所以使用起来没有问题。
GLFW 提供了一些渲染物体所需的最低限度的接口。它允许用户创建 OpenGL上下文、定义窗口参数以及处理用户输入,对我们来说这就够了。
首先访问 GLFW官网 下载源码包(Source package)到本地,之后再将其解压。
此处,为了便于之后的代码文件查找和管理,我建议预先建立一个 文件夹 用于存放接下来要存在在本地的文件和代码,例如我建立了 D:/DEV/ 用于存放之后的学习开发所需要的资源。
获得源码之后,我们必须将其编译成适合我们开发环境的工程文件,为了完成这一点,我们需要下载安装 CMake ,它很适合完成这项工作。
当 CMake 安装完成后,在它的GUI界面中我们能看到这之画面。
Where is the source code 填写你下载的源代码的根目录(例如我的是 D:/DEV/glfw-3.3.7)。
Where to build the binaries 填写你的目标目录(例如我选择在源代码目录新建一个build目录作为我的目标目录,则我的目标目录是D:/DEV/glfw-3.3./build)
之后,点击 Tools 选项中的 Configure 按钮,让CMake 来读取 设置和源代码。
接下来我们要完成工程文件选择设置,具体情况具体选择,这里我使用的是 Visual Studio 2022,所以我选择的是Visual Studio 17 2022。其他选项默认即可。
然后点击 Finish 就可以让CMake读取项目文件的配置了!
当CMake读取完成后你将可以看到配置的具体内容。
最后点击 Generate(生成) 完成工作。然后你能在 build 文件夹中找到 GLFW.sln 工程文件了。
使用 Visual Studio 2022 打开 GLFW.sln。由于CMake已经为我们完成了所有的配置工作,所以我们这里直接点击 生成解决方案 。
待生成完成后,我们就能在 build/src/Debug 文件夹内找到编译出的库文件 glfw3.lib 。
在 bulid 目录中还有 build/examples 和 build/tests 两个目录,这两个目录的 debug 文件夹内有一些官方提供的演示样例可供我们学习。
至此,我们完成了对 GLFW 的获取以及编译。
为了方便在后续的工程中链接我们的库文件,我可以在 DEV 目录下分别新建一个 include 文件夹 和 lib 文件夹来放置我们下载的库的头文件和运行库。
这时我们将 glfw3.lib 复制粘贴到 DEV/lib 目录中,之后再复制 glfw 根目录下的 include 文件夹内的一切粘贴到 DEV/include 中。
GLAD
单单有 GLFW 还是不够的。因为 OpenGL 只是一个规范,具体的实现是由驱动开放商针对特定显卡实现的,由于市面上拥有众多 OpenGL 驱动版本,所以 OpenGL 的大多数函数地址都无法在编译时被确定下来,而需要在运行时查询, 所以开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。由于函数地址的获取方式因平台而异,并且有时会相对复杂,所以我们需要一个工具来帮我们解决这一问题 。
1 |
|
GLAD 是一个开源的库,也是目前符合我们需求且最新最流行的库,它能帮助我们简化获取OpenGL函数地址的过程,所以我们需要它。
GLAD 与其他很多库不同的是,它使用了一个在线服务 ,在这里我们要告诉 GLAD 我们需要定义的OpenGL的版本,并根据这个版本加载所有相关的OpenGL函数。
在这里,我们选择 Language(语言) 为 C/C++ ,Specification(规格) 为 OpenGL , API 中选择选择 gl 的版本为 Version3.3 或以上,这里我们选择的是 Version3.3 , Profile(模式)选择为 Core ,然后在底部的 Options 勾选上 Generate a loader (生成加载器)。至于其他其他的 Extensions (扩展)选项,我们暂时忽略就好。
之后点击 GENERATE(生成),我们将打开一个界面。
在这里我们点击 glad.zip ,就能将库文件下载到本地。在这个压缩包内有两个头文件目录,include 和 src ,其中 src 中只有一个 glad.c 文件。此时我们将压缩包内的 inlcud 文件夹内的两个文件夹 glad 和 KHR 解压到 DEV/include 中,再将 glad.c 解压到 DEV/include(或者 DEV/include/src) 中。
请记住这个 glad.c ,此时放入 DEV/include (或者 DEV/include/src)只是为了方便查找,之后我们将要将它添加到我们的工程中。
基本情况如下图所示:
至此,我们完成了对 GLFW 和 GLAD 两个库基本配置,下一步我们将在工程中链接它们。
第一个工程
你懂的,在 Visual Studio 2022 中新建一个 Empty Project ,为这个项目取个你喜欢的名字(建议取为 LearnOpenGL ),选个你喜欢的目录(建议选在 DEV/ ),我们就可以愉快的开始下一步了!
注意,我们是在 64位 模式开展的工程,而新项目默认是 32位 的,所以我们要注意更改模式,即要将 Debug 模式更改为 x64。
>
为了正常使用 GLFW ,我们需要将 GLFW库 链接到我们的工程中,即我们要通过 链接器 设置指定我们要使用 glfw3.lib。
由于第三方库在 链接器 默认识别的目录之外,它在工作时并不知道第三方库在哪,也不知道寻找哪个文件夹,所以我们需要将第三方库所在的文件夹的位置添加进工程设置中。
为了完成这一点,我们需要打开先前创建的第一个工程,右键项目,打开项目 属性 。
在项目属性窗口中的 配置属性 中,我们选中 VC++目录 ,编辑 包含目录,将我们前面创建的 D:/DEV/include 添加进去。同理,我们再编辑 库目录 ,将 D:/DEV/lib 添加进去。
在 包含目录 中所能添加的 include文件夹的路径是可以无限多的, 库目录 同理。只要我们在 包含目录 中添加了相应的 inlcude文件夹,我们便能在该项目的代码中使用这些第三方库,链接器也知道去哪里找到我们指定包含的第三方库。
但是到此还是不够的,最后我们还需要告诉链接器我们要链接的那个库的名字,于是我们要在 链接器 的选项卡中选中 输入 这一选项,编辑 附加依赖项目 ,添加 glfw3.lib 这一字段,这样在编译的时候,链接器就知道把它链接进来了。
但是除了 glfw3.lib 以外, 我们还需要额外链接一个库,在 Windows 上这个库为 opengl32.lib 。
opengl32.lib 默认包含在 Microsoft SDK 里,这意味着我们在安装 Visual Studio 时就已经默认获得了这个库。如果你没有,请检查自己的 Visual Studio 安装程序 中是否勾选到 Microsoft SDK 。而且无论是 32位版本 还是 64位版本 ,这个库文件的名字都是 opengl32.lib 。
完成这一步之后,我们便能在直接包含这些头文件,IDE也会自动识别这些头文件。
1 |
|
现在,让我们新建一个 test.cpp 源文件,输入如下代码(注意,glad 要在 GLFW 之前进行包含,因为 glad 已经包含了正确的OpenGL文件):
1 |
|
生成调试应该可以直接运行。如果有错误,请仔细检查自己是否打错了文件名或者遗漏了什么步骤,如果还有问题,这边建议去问问神奇的海螺。