第1章 入门 1
1.1语言和库 1
1.1.1 C++ 2
1.1.2 OpenGL/GLSL 2
1.1.3窗口管理 2
1.1.4扩展库 3
1.1.5数学库 3
1.1.6纹理管理 3
1.1.7可选库 4
1.2安装和配置 4
参考资料 4
第2章 OpenGL图像管线 5
2.1 OpenGL管线 5
2.1.1 C++/OpenGL应用程序 6
2.1.2顶点着色器和片段着色器 9
2.1.3曲面细分着色器 12
2.1.4几何着色器 13
2.1.5光栅化 14
2.1.6片段着色器 15
2.1.7像素操作 16
2.2检测OpenGL和GLSL错误 17
2.3从文件读取GLSL源代码 19
2.4从顶点构建对象 20
2.5场景动画 21
2.6 C++代码文件结构 23
补充说明 24
习题 24
参考资料 25
第3章 数学基础 26
3.1 3D坐标系统 26
3.2点 26
3.3矩阵 27
3.4变换矩阵 29
3.4.1平移矩阵 29
3.4.2缩放矩阵 29
3.4.3旋转矩阵 30
3.5向量 31
3.5.1点积的应用 32
3.5.2叉积的应用 33
3.6局部和世界空间 33
3.7视觉空间和合成相机 34
3.8投影矩阵 36
3.8.1透视投影矩阵 36
3.8.2正射投影矩阵 37
3.9 LookAt矩阵 38
3.10用来构建矩阵变换的GLSL函数 39
补充说明 40
习题 40
参考资料 41
第4章 管理3D图形数据 42
4.1缓冲区和顶点属性 42
4.2统一变量 44
4.3顶点属性插值 45
4.4模型-视图和透视矩阵 46
4.5我们的第一个3D程序——一个3D立方体 47
4.6渲染一个对象的多个副本 53
4.7在同一个场景中渲染多个不同模型 57
4.8矩阵堆栈 59
4.9应对“Z冲突”伪影 64
4.10图元的其他选项 65
4.11性能优先的编程方法 66
4.11.1尽量减少动态内存空间分配 66
4.11.2预先计算透视矩阵 67
4.11.3背面剔除 68
补充说明 69
习题 70
参考资料 70
第5章 纹理贴图 71
5.1加载纹理图像文件 71
5.2纹理坐标 72
5.3创建纹理对象 74
5.4构建纹理坐标 74
5.5将纹理坐标载入缓冲区 75
5.6在着色器中使用纹理:采样器变量和纹理单元 76
5.7纹理贴图:示例程序 77
5.8多级渐远纹理贴图 79
5.9各向异性过滤 83
5.10环绕和平铺 84
5.11透视变形 85
5.12材质——更多OpenGL细节 86
补充说明 86
习题 87
参考资料 87
第6章 3D模型 88
6.1程序构建模型——构建一个球体 88
6.2 OpenGL索引——构建一个环面 94
6.2.1环面 94
6.2.2 OpenGL中的索引 95
6.3加载外部构建的模型 99
补充说明 106
习题 107
参考资料 107
第7章 光照 108
7.1光照模型 108
7.2光源 109
7.3材质 111
7.4 ADS光照计算 112
7.5实现ADS光照 114
7.5.1 Gouraud着色(双线性光强插值法) 115
7.5.2 Phong着色 120
7.6结合光照与纹理 124
补充说明 126
历史记录 126
习题 126
参考资料 127
第8章 阴影 128
8.1阴影的重要性 128
8.2投影阴影 129
8.3阴影体 129
8.4阴影贴图 130
8.4.1阴影贴图(第1轮)——从光源位置“绘制”物体 131
8.4.2阴影贴图(中间步骤)——将Z缓冲区复制到纹理 132
8.4.3阴影贴图(第2轮)——渲染带阴影的场景 132
8.5阴影贴图示例 135
8.6阴影贴图的伪影 139
8.7柔和阴影 142
8.7.1现实世界中的柔和阴影 142
8.7.2生成柔和阴影——百分比邻近滤波(PCF) 143
8.7.3柔和阴影/PCF程序 146
补充说明 148
习题 148
参考资料 149
第9章 天空和背景 150
9.1天空盒 150
9.2天空穹顶 152
9.3实现天空盒 153
9.3.1从头开始构建天空盒 153
9.3.2使用OpenGL立方体贴图 156
9.4环境贴图 158
补充说明 161
习题 162
参考资料 163
第10章 增强表面细节 164
10.1凹凸贴图 164
10.2法线贴图 166
10.3高度贴图 172
补充说明 174
习题 175
参考资料 175
第11章 参数曲面 176
11.1二次贝塞尔曲线 176
11.2三次贝塞尔曲线 177
11.3二次贝塞尔曲面 180
11.4三次贝塞尔曲面 181
补充说明 183
习题 183
参考资料 183
第12章 曲面细分 184
12.1 OpenGL中的曲面细分 184
12.2贝塞尔曲面细分 188
12.3地形、高度图的细分 193
12.4控制细节级别(LOD) 198
补充说明 200
习题 201
参考资料 201
第13章 几何着色器 202
13.1 OpenGL中的逐个图元处理 202
13.2修改图元 203
13.3删除图元 206
13.4添加图元 207
13.5更改图元类型 209
补充说明 211
习题 211
参考资料 211
第14章 其他技术 212
14.1雾 212
14.2复合、混合、透明度 213
14.3用户定义剪裁平面 218
14.4 3D纹理 219
14.5噪声 223
14.6噪声应用——大理石 227
14.7噪声应用——木材 230
14.8噪声应用——云 233
14.9噪声应用——特殊效果 236
补充说明 238
习题 238
参考资料 239
附录A PC(Windows)上的安装与设置 240
A.1安装库和开发环境 240
A.1.1安装开发环境 240
A.1.2安装OpenGL/GLSL 240
A.1.3准备GLF W 240
A.1.4准备GLEW 241
A.1.5准备GLM 241
A.1.6准备SOIL2 241
A.1.7准备共享的“lib”和“include”文件夹 241
A.2在MS Visual Studio中开发和部署OpenGL项目 242
参考资料 243
附录B Macintosh (macOS)平台上的安装与设置 244
B.1安装库和开发环境 244
B.1.1准备并安装依赖库 244
B.1.2准备开发环境 245
B.2修改Mac的C++ / OpenGL /GLSL应用程序代码 246
B.2.1修改C++代码 247
B.2.2修改GLSL代码 247
B.2.3补充说明 248
参考资料 248
附录C 使用Nsight图形调试器 249
C.1关于NVI DIANsight 249
C.2设置Nsight 249
C.3在Nsight中运行C++/OpenGL应用程序 250
参考资料 252