第1章 准备开始 1
1.1 安装工具 1
1.2 创建第一个程序 3
1.3 初始化OpenGL 5
1.4 创建Renderer类 10
1.5 使用静态导入 12
1.6 小结 12
第—部分 —个简单的空气曲棍球游戏 14
第2章 定义顶点和着色器 14
2.1 为什么选择空气曲棍球 14
2.2 不要从头开始 15
2.3 定义空气曲棍球桌子的结构 16
2.4 使数据可以被OpenGL存取 18
2.5 引入OpenGL管道 20
2.6 OpenGL颜色模型 25
2.7 小结 26
第3章 编译着色器及在屏幕上绘图 27
3.1 加载着色器 27
3.2 编译着色器 29
3.3 把着色器一起链接进OpenGL的程序 33
3.4 做最后的拼接 35
3.5 在屏幕上绘制 39
3.6 小结 43
3.7 练习 43
第4章 增加颜色和着色 44
4.1 平滑着色 45
4.2 引入三角形扇 45
4.3 增加一个新的颜色属性 46
4.4 使用新的颜色属性渲染 52
4.5 小结 55
4.6 练习 55
第5章 调整屏幕的宽高比 56
5.1 宽高比的问题 57
5.2 使用虚拟坐标空间 58
5.3 线性代数基础 59
5.4 定义正交投影 62
5.5 加入正交投影 64
5.6 小结 67
5.7 练习 67
第6章 进入第三维 68
6.1 三维的艺术 68
6.2 从着色器到屏幕的坐标变换 69
6.3 添加w分量创建三维图 71
6.4 使用透视投影 72
6.5 定义透视投影 73
6.6 在代码中创建投影矩阵 75
6.7 开始使用投影矩阵 76
6.8 增加旋转 79
6.9 小结 81
6.10 练习 82
第7章 用纹理增加细节 83
7.1 理解纹理 84
7.2 把纹理加载进OpenGL中 85
7.3 创建新的着色器集合 90
7.4 为顶点数据创建新的类结构 91
7.5 为着色器程序添加类 95
7.6 绘制纹理 99
7.7 小结 101
7.8 练习 101
第8章 构建简单物体 102
8.1 合并三角形带和三角形扇 102
8.2 添加几何图形的类 104
8.3 添加物体构建器 105
8.4 更新物体 112
8.5 更新着色器 113
8.6 集成所有的变化 114
8.7 小结 119
8.8 练习 119
第9章 增加触控反馈:与空气曲棍球游戏交互 120
9.1 为Activity增加触控支持 120
9.2 增加相交测试 122
9.3 通过拖动移动物体 130
9.4 增加碰撞检测 132
9.5 小结 136
9.6 练习 137
第二部分 构建三维世界 140
第10章 用粒子增添趣味 140
10.1 为一个简单的粒子系统创建一组着色器 141
10.2 添加粒子系统 144
10.3 绘制粒子系统 148
10.4 扩散粒子 150
10.5 添加重力 152
10.6 用累加混合技术混合粒子 153
10.7 自定义点的外形 153
10.8 把每个点绘制为一个精灵 154
10.9 小结 156
10.10 练习 156
第11章 增加天空盒 157
11.1 创建天空盒 157
11.2 把立方体贴图加载到OpenGL中 159
11.3 创建立方体 161
11.4 增加天空盒着色器程序 163
11.5 在场景中加入天空盒 165
11.6 围绕场景移动相机 167
11.7 小结 169
11.8 练习 169
第12章 增加地形 170
12.1 创建高度图 170
12.2 创建顶点和索引缓冲区对象 171
12.3 加载高度图 173
12.4 绘制高度图 176
12.5 遮罩被隐藏的物体 180
12.6 小结 183
12.7 练习 183
第13章 点亮世界 184
13.1 仿真光照的效果 184
13.2 用朗伯体反射实现方向光 186
13.3 添加点光 192
13.4 小结 199
13.5 练习 199
第14章 创建动态壁纸 200
14.1 实现动态壁纸的Service组件 200
14.2 权衡系统的其余部分 207
14.3 小结 209
14.4 练习 209
第15章 采取下一步行动 211
15.1 展望其他平台 211
15.2 了解更高级的技术 213
15.3 与世界分享你的艺术视野 216
附录A 投影背后的矩阵数学 217
附录B 调试 223
参考文献 228