opengl开发环境搭建
opengl开发前置必须:C++基础,VS开发环境
opengl开发环境
在C++中使用OpenGL需要配置多个库。
●C++开发环境;
●OpenGL / GLSL;
●窗口管理;
●扩展库;
●数学库;
●纹理管理。
窗口管理
OpenGL实际上并不是把图像直接绘制到计算机屏幕上,而是渲染到一个帧缓冲区,然后需要由这台机器来负责把帧缓冲区的内容绘制到屏幕上的一个窗口中。
GLFW是最流行的选择之一,它内置了对Windows、macOS、Linux和其他操作系统[GF17]的支持。它可以在其官网下载,并且必须在要使用它的机器上编译。
扩展库
OpenGL围绕一组基本功能和扩展机制进行组织。随着技术的发展,扩展机制可以用来支持新的功能。现代版本的OpenGL,比如我们在本书中使用的4以上版本,需要识别GPU上可用的扩展。OpenGL核心中有一些内置的命令用来支持这些,但是为了使用每个现代命令,需要执行很多相当复杂的代码行。
所以使用一个扩展库来处理这些细节已经成了标准做法,这样能让程序员可以直接使用现代OpenGL命令。比如Glee、GLLoader和GLEW,以及更加新的GL3W和GLAD。
常用的是GLEW,意思是OpenGL扩展牧马人(OpenGL Extension Wrangler)。它支持各种操作系统,包括Windows、Macintosh和Linux[GE17]。GLEW不是一个完美的选择。例如,它需要一个额外的DLL。最近,很多开发者选择GL3W或者GLAD。它们的优势是可以自动更新,但是要求安装Python。因为这些原因,在本书中我们选择使用GLEW。它可以在官网下载。
数学库
3D图形编程大量使用向量和矩阵代数。常常和OpenGL一起使用的两个这样的库是Eigen和vmath。后者在流行的OpenGL SuperBible[SW15]中被使用。
最流行的数学库:
是OpenGL Mathematics,一般称作GLM。提供与图形概念相关的类和基本数学函数,例如矢量、矩阵和四元数。它还包含各种工具类,用于创建和使用常见的3D图形结构,例如透视和视角矩阵。
纹理管理
我们将使用图像文件来向我们图形场景中的对象添加“纹理”。这意味着我们会需要频繁加载这些图像文件到我们的C++/OpenGL代码中。从零开始写一个纹理图像加载器是可能的。但是,考虑到各种各样的图像文件格式,使用一个纹理加载库通常是更好的。
比如FreeImage、DevIL、OpenGL Image (GLI)和Glraw。简单OpenGL图像加载器(Simple OpenGL Image Loader,SOIL)可能是最常用的OpenGL图像加载库,尽管它有点过时了。
本书中使用的纹理图像加载库是SOIL2——SOIL的一个更新的分叉版本。像我们之前选择的库一样,SOIL2兼容各种平台。
可选库
有一些更复杂的现成的OBJ加载器可供选择,比如Assimp和tinyobjloader。
安装
为了让安装变得更简单,这里使用最新的C++的包管理器。C++终于有包管理器了,结束了手动编译时代 ,当然如果你不用那就只能下载源码,然后手动编译。而且还要自己在项目中引入包。
安装vcpkg:
跨平台c++包管理器。官网
git clone https://github.com/Microsoft/vcpkg.git
.\vcpkg\bootstrap-vcpkg.bat
vcpkg integrate install
# 如果出现未找到vcpkg,那么是因为vcpkg.exe没有配置到环境变量中,所以你只能在安装目录中运行这个命令
使用vcpkg安装GLFW:
窗口管理库,用于创建可以显示图像的窗口。
在命令行窗口中运行:
vcpkg install glfw3:x64-windows
// windows普通C++项目不需要如下配置
// 如果是cmake项目,项目使用库时需要在CMakefile中添加如下语句引入到项目中。
find_package(glfw3 CONFIG REQUIRED)
target_link_libraries(main PRIVATE glfw)
使用vcpkg安装GLEW
GLEW有什么用?你可以把它看作是windows上的OpenGL的基本库,他取代了原来的gl.h wgl.h,让你可以方便的调用最新的OpenGL功能,包括OpenGL众多的Extension。
vcpkg install glew:x64-windows
find_package(GLEW REQUIRED)
target_link_libraries(main PRIVATE GLEW::GLEW)
使用vcpkg安装GLM
opengl 数学运算库
vcpkg install glm:x64-windows
find_package(glm CONFIG REQUIRED)
target_link_libraries(main PRIVATE glm::glm)
使用vcpkg安装SOIL2:
图像加载库
vcpkg install soil2:x64-windows
find_package(soil2 CONFIG REQUIRED)
target_link_libraries(main PRIVATE soil2)
安装opengl:
opengl在windows下并不需要安装,如果系统支持,windows就已经提供。
opengl32.lib(应该已作为标准Windows SDK的一部分提供)
需要在使用时引入:
创建一个空项目,打开“项目”->“属性”,在连接器中引入opengl.lib
运行第一个opengl项目
创建一个空项目,添加一个源文件。
#include<gl/glew.h> // 所有的函数库
#include<GLFW/glfw3.h> // 窗口库
int main() {
glfwInit(); // 初始化
GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", nullptr, nullptr); // 创建窗口
while (!glfwWindowShouldClose(window)) // 检查是否关闭
{
glfwPollEvents(); // 处理事件,比如可以让窗口被拖动
glfwSwapBuffers(window); // 将窗口缓存区的数据进行交换以达到刷新的目的
}
glfwTerminate(); // 销毁并回收资源
return 0;
}
如果没有问题将会出现如下窗口: