第1章 入门

当今,图形编程是基于着色器的,也就是说,有些程序是基于C++或Java等标准程序语言编写的,并运行在中央处理器上(CPU);另一些是用专用的着色器语言编写的,直接运行在图形处理单元(GPU)上。

1.1 语言和库

  • C++ 开发环境
  • OpenGL/GLSL
  • 窗口管理库
  • 扩展库
  • 数学库
  • 纹理图像加载库

1.1.1 C++

本文推荐使用Microsoft GVisual Studio作为C++开发环境

1.1.2 OpenGL/GLSL

本书假定作者至少有一个支持4.3版本OpenGL的显卡。如果你不确定你的GPU支持哪个版本的OpenGL,网上有免费的应用程序,其中一个是GLView来查找答案。

1.1.3 窗口管理库

OpenGL实际上并不是把图像直接绘制到计算机屏幕上,而是将之渲染到一个帧缓冲区,然后由计算机将帧缓冲区中的内容绘制到屏幕上的一个窗口中。有不少库都支持这一部分工作。一个选择是使用操作系统提供的窗口管理功能,比如Microsoft Windows API。但这不实用,因为需要很多底层的编码工作。GLUT库曾是一个流行的库,但现在已经被弃用了。它的一个现代化变体是freeglut库。其他相关的选项还有CPW库、GLOW库、GLUI库等。
GLFW是最流行的选择之一,也是本书中选择使用的。它内置了对Windows、macOS、Linux和其他操作系统的支持。

1.1.4 扩展库

扩展库有Glee、GLLoader和GLEW,以及新版的GL3W和GLAD。常用的是GLEW。这个名称代表OpenGL extension wrangler,即OpenGL扩展库。GLEW支持各种操作系统,包括Windows、macOS和Linux [GE20],但它并不是完美的选择。例如,它需要一个额外的动态链接库。最近,很多开发者选择GL3W或者GLAD。它们的优势是可以自动更新,但是需要Python环境。本书使用GLEW。它可以在其官网下载。附录中给出了安装和配置GLEW的完整说明。

1.1.5 数学库

3D图形编程会大量使用向量和矩阵代数。常常和OpenGL一起使用的两个这样的库是Eigen和vmath。后者在流行的《OpenGL超级宝典(第7版)》中使用。

本书使用OpenGL Mathematics数学库,一般称作GLM。它是一个只有头文件的C++库,兼容Windows、macOS和Linux [GM20]。GLM命令能很方便地遵循和GLSL相同的命名惯例,使得来回阅读特定应用程序的C++和GLSL代码时更容易。GLM可以在其官网下载。

GLM可提供与图形概念相关的类和基本数学函数,例如矢量、矩阵和四元数。它还包含各种工具类,用于创建和使用常见的3D图形结构,例如透视和视角矩阵。

1.1.6 纹理图像加载库

本书中使用的纹理图像加载库是SOIL2——SOIL的一个更新的分支版本。

1.1.7 可选库

在本书中,我们将展示如何从零开始实现一个简单的OBJ模型加载器。然而,正如你将看到的,它没有处理OBJ标准中很多可用的选项。有一些更复杂的、现成的OBJ模型加载器可供选择,比如Assimp和tinyobjloader。本书的例子只会使用书中介绍和实现的简单模型加载器。

你可能感兴趣的:(c++)