开发前提
之前在LearnOpenGL上学习是使用Visual Studio2022开发的,现在需要整理一套开发工具类和基础框架,所以打算换用Clion+Cmake的方式,以下所有编译链接都是基于Cmake, 环境是CLion + MinGW
基础工具库
首先在Clion中创建一个基础的C++项目OpenGL-Tools
,在其根目录下新建文件夹:
include
用来存放三方库的头文件libs
用来存放三方库的动态、静态库文件src
用来存放三方库源文件
1. GLFW
GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文、定义窗口参数以及处理用户输入,对我们来说这就够了。
这里建议直接下载预编译文件,包含了多种编译环境,我们使用的是MinGW。
链接:
- 将glfw下的include文件内容(GLFW文件夹)拷贝到项目include中
- 将
lib-mingw-w64
下的glfw3.dll
拷贝到项目libs目录
在CmakeLists中新增:
INCLUDE_DIRECTORIES(include) |
如果在运行可执行文件时遇到报错缺少dll,可以将对于dll拷贝到系统目录,或者拷贝到程序生成目录,参考:https://blog.csdn.net/FlushHip/article/details/114677794
2. GLAD
OpenGL的API大部分在运行时动态获取,通过函数指针调用,类似:
// 定义函数原型 |
这样子就很麻烦,好在有GLAD这个工具库帮我整理了函数API
一般通过在线下载,我们通过如下配置后,再点击生产,就会出现一个代码下载页,下载glad.zip压缩文件就可。
gl版本选择最新的,Profile选择Core模式
解压后将其include和src复制到项目对应根目录
CmakeLists中也要加上glad.c文件
add_executable(OpenGL_Tools |
3. GLM
OpenGL没有自带任何的矩阵和向量知识,所以我们必须定义自己的数学类和函数。在教程中我们更希望抽象所有的数学细节,使用已经做好了的数学库。幸运的是,有个易于使用,专门为OpenGL量身定做的数学库,那就是GLM。
GLM是OpenGL Mathematics的缩写,它是一个只有头文件的库,也就是说我们只需包含对应的头文件就行了,不用链接和编译。GLM可以在它们的网站上下载。把头文件的根目录复制到你的includes文件夹,然后你就可以使用这个库了。
下载完之后将glm放到include文件夹就行
GLM的大部分功能都在以下头文件:
4. Assimp
在OpenGL中加载复杂的模型,肯定不是靠手撸数据,一般是通过3D建模软件创建,这些模型有不同的格式,比如:STL/OBJ等等
我们需要一个三方库解析这个模型文件,然后创建OpenGL渲染所需要的对象数据。
一个非常流行的模型导入库是Assimp,它是Open Asset Import Library(开放的资产导入库)的缩写。Assimp能够导入很多种不同的模型文件格式(并也能够导出部分的格式),它会将所有的模型数据加载至Assimp的通用数据结构中。当Assimp加载完模型之后,我们就能够从Assimp的数据结构中提取我们所需的所有数据了。由于Assimp的数据结构保持不变,不论导入的是什么种类的文件格式,它都能够将我们从这些不同的文件格式中抽象出来,用同一种方式访问我们需要的数据。
Assimp开源下载地址:https://github.com/assimp/assimp/releases
Assimp需要自己使用Cmake编译,参考:https://blog.csdn.net/lady_killer9/article/details/89429092
编译完成后将:
- Assimp源文件的include目录下的文件,拷贝到项目include中
- 编译生产的
assimp-vc143-mtd.dll
拷贝到项目libs中
5. Qt环境
Qt原生是支持OpenGL的,并且进行了封装,是不需要GLFW/GLAD这些库的,如果不熟悉Qt可以使用上面的库进行学习
因为为了方便管理功能,我觉得还是需要一些ui进行功能整理,所以接下来我们介绍Qt开发OpenGL的情况。
关于Clion配置Qt开发环境,可以参考我之前的文章:
Clion配置Qt+Cmake开发环境
5.1 Qt OpenGL示例
在QtCreator中查找Qt官方示例:
Qt对OpenGL的支持还比较丰富,无论是在界面中嵌套还是单独开启OpenGL窗口都是可行的。
这里不详细写了,很多博客都有讲过,注意的是要在CmakeLists中引入OpenGL
find_package(Qt6 COMPONENTS |