具体描述
作者简介
Romain Marucchi-Foino是当今流行的移动游戏引擎SIO2(http://sio2interactive.com)的原作者和创建者。Romain以前是一名游戏引擎开发人员,自从iPhone诞生以来,Romain就一直致力于使用OpenGL ES为移动设备创建先进的游戏引擎。目前,他是sio2interactive.com的一名高级3D程序员(SIO2引擎的正式开发人员),该引擎通过App Store和Android Market驱动了数以千计的游戏和3D应用程序。凭借在移动游戏行业积累的丰富经验,他为许多网上社区、出版物以及博客作出重大贡献。
目录信息
第1章 入门 1
1.1 软件需求 1
1.1.1 针对iOS开发人员 1
1.1.2 针对Android开发人员 2
1.2 下载本书的SDK 3
1.3 导入项目 4
1.3.1 针对iOS开发人员 5
1.3.2 针对Android开发人员 5
1.4 模板 6
1.5 小结 7
第2章 设置图形投影 9
2.1 三种基本的投影类型 9
2.2 正射2D投影 11
2.2.1 程序和项目初始化 12
2.2.2 顶点和片段着色器 14
2.2.3 链接着色器程序 16
2.2.4 绘图代码 18
2.3 正交投影 23
2.4 透视投影 26
2.5 小结 27
第3章 处理复杂几何图形 29
3.1 Wavefront文件格式 29
3.1.1 cube.obj 30
3.1.2 cube.mtl 31
3.2 准备OBJ浏览器代码 31
3.3 加载OBJ 32
3.4 构建着色器 35
3.4.1 顶点着色器 35
3.4.2 片段着色器 36
3.4.3 顶点缓冲区对象 36
3.4.4 存储顶点数据 36
3.4.5 构建顶点数据数组(VBO) 38
3.4.6 构建元素数组VBO 39
3.5 构建VAO 40
3.6 渲染Momo 42
3.7 处理Touche事件 44
3.8 逐顶点光照 45
3.8.1 顶点着色器的光照计算 46
3.8.2 修改片段着色器 47
3.8.3 更多uniform变量 48
3.9 对Momo进行美化 49
3.9.1 加载纹理 49
3.9.2 调整顶点数据 50
3.9.3 向顶点着色器添加UV
支持 52
3.9.4 向片段着色器添加纹理支持 52
3.9.5 绑定纹理 53
3.10 小结 54
第4章 构建场景 55
4.1 处理多个对象 55
4.2 代码结构 56
4.3 加载和绘制场景 57
4.4 着色器代码 61
4.5 不同的对象类型 62
4.6 绘制顺序 62
4.7 修复场景 63
4.7.1 Uber Shader 63
4.7.2 使用Uber Shader 64
4.7.3 渲染循环对象分类 67
4.7.4 双面 69
4.8 逐像素光照 71
4.8.1 使顶点着色器更加丰富 71
4.8.2 获取使用了更多Uber的片段着色器 72
4.8.3 封装实现代码 74
4.9 小结 77
第5章 优化 79
5.1 基本应用程序 79
5.2 从三角形到三角形带 80
5.3 构建三角形带 81
5.4 纹理优化 82
5.5 添加16位纹理转换 83
5.6 PVR纹理压缩 84
5.7 仿造细节 85
5.7.1 凸凹贴图的实现 85
5.7.2 精度限定符优化 86
5.7.3 法线贴图光照计算 88
5.7.4 添加反射 90
5.8 几何图形和着色器LOD 91
5.9 纹理地图集 91
5.10 在软件中管理状态 92
5.11 自动着色器优化 93
5.12 小结 94
第6章 实时物理 95
6.1 物理对象类型 95
6.2 物理形状 96
6.3 使用Bullet 97
6.4 Hello Physics 97
6.5 碰撞回调、触发器和接触点 102
6.5.1 Contact-Added回调 103
6.5.2 Near回调 105
6.5.3 接触点 106
6.6 2D物理 107
6.6.1 更多形状! 108
6.6.2 构建物理对象 111
6.6.3 摄像头跟踪 112
6.6.4 用户交互 114
6.6.5 游戏逻辑 114
6.7 3D物理 118
6.7.1 Bullet文件格式 118
6.7.2 3D弹珠游戏 119
6.8 小结 125
第7章 摄像头 127
7.1 一触即发 128
7.2 摄像头视锥 130
7.2.1 视锥构建方式 131
7.2.2 视锥剪切的实现 132
7.2.3 更多剪切函数 133
7.3 摄像头飞行模式 134
7.4 带有碰撞检测的第一人称
摄像头 139
7.5 3D摄像头跟踪 141
7.6 带有碰撞的第三人称摄像头 143
7.7 小结 148
第8章 路径发现 149
8.1 Recast和Detour 149
8.2 导航 150
8.3 创建导航网格 151
8.4 3D物理拾取 153
8.5 玩家的自动驱动 157
8.6 使路径点可见 159
8.7 游戏“如果能就抓住我!” 161
8.8 了解你的敌人 164
8.9 游戏状态逻辑 165
8.10 小结 168
第9章 音频及其他极佳的游戏编程资料 171
9.1 OpenAL 172
9.2 OGG Vorbis 173
9.3 Hello World OpenAL样式 173
9.4 初始化OpenAL 174
9.5 播放静态内存声音 174
9.6 定位声源 176
9.7 钢琴游戏 177
9.7.1 加载静态的流式声音 178
9.7.2 颜色提取 182
9.7.3 钢琴游戏逻辑 185
9.7.4 最后的调整 188
9.8 滚球游戏 190
9.8.1 GFX着色器 191
9.8.2 链接定位声源 192
9.8.3 加速计驱动摄像头 196
9.8.4 廉价的FX 199
9.8.5 游戏逻辑和调整 200
9.9 小结 206
第10章 高级光照 207
10.1 灯的类型 207
10.2 使用光源 208
10.2.1 定向灯着色器 211
10.2.2 使用Struct作为Uniform 214
10.3 点灯 217
10.3.1 点光源着色器代码 218
10.3.2 光的衰减 221
10.3.3 带有衰减代码的点光源 222
10.3.4 衰减Uniform变量 223
10.3.5 球体点光源 224
10.3.6 调整点光源代码 225
10.3.7 聚光灯 227
10.3.8 聚光灯着色器代码 229
10.4 多个光源 231
10.5 使着色器程序动态化 234
10.6 小结 235
第11章 高级FX 237
11.1 渲染到纹理 238
11.2 后处理效果 238
11.2.1 第一渲染通道 241
11.2.2 第二渲染通道 242
11.2.3 全屏通道和模糊着色器 243
11.3 投影纹理 246
11.4 投影着色器 249
11.5 投影实时阴影 250
11.6 使用深度纹理投射阴影 254
11.7 关于帧缓冲对象的其他内容 255
11.8 粒子 255
11.9 小结 257
第12章 骨骼动画 259
12.1 传统的动画系统与最新的动画系统 259
12.2 MD5文件格式 261
12.3 加载MD5网格 261
12.4 对网格进行动画处理 264
12.4.1 LERP 266
12.4.2 SLERP 266
12.5 混合动画 267
12.6 相加混合 269
12.7 小结 271
· · · · · · (收起)
读后感
用户评价
作为一名对图形编程领域有一定探索经历的读者,我发现这本书的叙事风格非常稳健且充满自信。它没有使用那种夸张的、鼓吹“快速精通”的语气,而是采取了一种沉稳、严谨的学术探讨姿态。在涉及一些容易产生误解的底层概念时,比如深度缓冲区的写入顺序、裁剪空间的转换,作者会引用OpenGL ES规范中的描述进行佐证,这种对细节的严谨性令人印象深刻。我特别留意了关于纹理压缩和几何体实例化(Instancing)的章节。这些都是移动端性能优化的关键点,通常在入门级书籍中会被轻描淡写。但在这里,作者不仅解释了它们的工作原理,还提供了跨平台API调用的具体代码路径,并且清晰地指出了不同硬件/驱动版本可能存在的兼容性陷阱。这表明作者的知识体系是基于大量的实际调试和问题解决经验之上构建的,而不是纯粹的理论推导,这为我们这些在实际项目中与Bug搏斗的工程师提供了极大的便利。
这本书的编排结构无疑是为实战型学习者量身定制的。我喜欢那种“理论阐述—代码实例—效果展示”的循环模式。很多图形学书籍在理论部分堆砌大量篇幅,让人在真正动手之前就已经感到疲惫,这本书则不然。它倾向于快速进入“动手做”的阶段,通过构建一个完整的、可运行的小项目来串联起各个知识点。比如,在讲解光照模型时,作者先是用几页纸清晰地勾勒出环境光、漫反射和镜面反射的基本公式,紧接着就立刻引导读者在项目中实现一个具备这三种效果的实时渲染器。这种即学即用的方式,极大地巩固了学习效果。每当遇到一个复杂的渲染效果(比如卡通着色或者简单的雾效),书里提供的源码都是干净、模块化良好的,这使得我不仅学会了“如何实现这个效果”,更重要的是理解了“如何构建一个可维护的图形引擎结构”。对于希望将这些技术整合到商业应用中的开发者来说,这种工程化的思维引导比单纯的技术堆砌更有价值。
初次阅读这本书时,我最大的感受是其详实的代码示例和平台差异化的处理。坦率地说,许多技术书籍在跨平台讲解时,往往会含糊其辞,或者只侧重于一个平台。然而,这本书的标题就明确指出了iOS和Android的双重目标,作者在内容中也确实兑现了这一承诺。每一个关键的API调用、每一个着色器语言的微妙差异,都被细致地用并排或对比的方式呈现出来。例如,在处理上下文创建和生命周期管理时,Android的`GLSurfaceView`和iOS的`EAGLContext`的初始化步骤被清晰地分离阐述,这极大地减少了我自行查阅官方文档来解决平台特定问题的次数。更值得称道的是,书中对于GLSL(OpenGL Shading Language)的讲解深入浅出,对于向量和矩阵运算的几何意义解释得非常到位,使得那些原本看起来枯燥乏味的数学公式,瞬间变得直观可感。它没有把这些复杂的数学概念当作黑盒,而是像剥洋葱一样,一层层展示其在GPU上是如何被解释和执行的,这对提升读者的“图形化思维”非常有帮助。
这本书的封面设计着实抓人眼球,那种充满科技感的蓝色调和闪烁的光标,立刻让我这个资深的移动端开发者燃起了重拾图形编程热情的冲动。我是在寻找一本能够系统梳理OpenGL ES 2.0核心概念,并且能够快速上手实战的书籍时发现它的。市面上关于移动图形编程的资料浩如烟海,但很多要么过于理论化,要么只停留在零散的代码片段展示,缺乏一个清晰的、自洽的知识体系。翻开目录,看到“Shader编程基础”、“缓冲区管理”、“矩阵变换与投影”这些经典章节的排列,心里就踏实了不少。作者显然对初学者和有一定基础的开发者群体有着深刻的理解,内容的组织逻辑严密,从最底层的状态机配置讲起,逐步过渡到复杂的渲染管线控制。我特别欣赏其中关于性能优化的章节,它没有停留在空泛的建议上,而是直接给出了针对iOS和Android平台下常见瓶颈的实操案例,比如如何有效地批处理绘制调用(Draw Call)以及纹理上传的最佳实践。这本书给我的感觉是,它不仅仅是一本技术手册,更像是一位经验丰富的老兵在手把手地教你如何在这片充满挑战的移动图形战场上站稳脚跟。
阅读体验上,这本书的排版和图示质量也值得称赞。在图形编程中,如果缺乏清晰的视觉辅助,许多三维概念是很难被大脑有效处理的。这本书的插图并非简单的流程图,而是大量高质量的渲染示意图,它们精确地描绘了光线在物体表面反射的路径,或者顶点数据是如何被管线一步步处理的。尤其是在解释矩阵乘法如何影响世界坐标到屏幕坐标的整个过程时,那些三维坐标轴的动态变换图示,让原本抽象的变换过程变得一目了然。字体和代码块的区分度很高,使得长时间阅读时眼睛不易疲劳。更贴心的一点是,书中对于一些过时的或已被废弃的API调用,都做了清晰的标记和现代替代方案的说明,这对于维护老项目或确保代码的前瞻性至关重要。总而言之,这是一本兼顾了理论深度、实战广度以及优秀阅读体验的专业书籍,是移动图形开发者工具箱中不可或缺的一员。