注重体验与质量的电子书资源下载网站
分类于: 云计算&大数据 互联网
简介
游戏引擎架构(第2版) 豆 0.0分
资源最后更新于 2020-08-19 16:09:59
作者:【美】Jason Gregory
译者:叶劲峰
出版社:电子工业出版社
出版日期:2019-01
ISBN:9787121375293
文件格式: pdf
标签: 游戏开发 游戏引擎 游戏编程 游戏设计 游戏 计算机图形学 game 程序设计
简介· · · · · ·
《游戏引擎架构(第2版)》涵盖游戏引擎软件开发的理论及实践知识,并在第1版的基础上对多个主题进行了更新。本书中讨论的概念及技巧被实际应用于现实中的游戏工作室(如艺电及顽皮狗)。虽然书中采用的例子通常依托于一些专门的技术,但是讨论范围远超某个引擎或API。另外,书中提供的参考文献及引用也非常有价值,可让读者继续深入游戏开发的任何特定方向。
《游戏引擎架构(第2版)》为大学程度的游戏编程课程而编写,但也适合软件工程师、游戏开发业余爱好者,以及游戏产业的从业人员阅读。通过阅读本书,资历较浅的游戏工程师可以巩固他们所学的游戏技术及引擎架构的知识,专注某一领域的程序员也能从本书全面的介绍中获益。
目录
第2 版序言• • • • • • • • • • • • • • • • xxxiii
第1 版序言• • • • • • • • • • • • • • • • xxxv
第2 版前言• • • • • • • • • • • • • • • • xxxvii
第1 版前言• • • • • • • • • • • • • • • • xxxviii
致谢 • • • • • • • • • • • • • • • • • xl
第I 部分 基 础
第1 章 导论• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 3
1.1 典型游戏团队的结构 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 4
1.1.1 工程师 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 5
1.1.2 艺术家 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 5
1.1.3 游戏设计师 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 6
1.1.4 制作人 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 7
1.1.5 其他工作人员• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 7
1.1.6 发行商及工作室• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 7
1.2 游戏是什么 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 8
1.2.1 电子游戏作为软实时模拟• • • • • • • • • • • • • • • • • • • • • • • • • • • • • 8
1.3 游戏引擎是什么• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 10
1.4 不同游戏类型的引擎差异• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 11
1.4.1 第一人称射击游戏• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 12
1.4.2 平台及其他第三人称游戏• • • • • • • • • • • • • • • • • • • • • • • • • • • • • 13
1.4.3 格斗游戏 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 15
1.4.4 竞速游戏 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 17
1.4.5 实时策略游戏• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 18
1.4.6 大型多人在线游戏• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 20
1.4.7 玩家创作内容†• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 21
1.4.8 其他游戏类型• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 23
1.5 游戏引擎概览 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 24
1.5.1 雷神之锤引擎家族• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 24
1.5.2 虚幻引擎 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 25
1.5.3 Source 引擎• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 26
1.5.4 DICE 的寒霜引擎† • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 26
1.5.5 CryEngine† • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 26
1.5.6 索尼的PhyreEngine† • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 27
1.5.7 微软的XNA Game Studio• • • • • • • • • • • • • • • • • • • • • • • • • • • • 27
1.5.8 Unity† • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 27
1.5.9 供非程序员使用的二维游戏引擎† • • • • • • • • • • • • • • • • • • • • • • • • • 28
1.5.10 其他商业引擎 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 29
1.5.11 专有内部引擎 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 29
1.5.12 开源引擎• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 29
1.6 运行时引擎架构• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 30
1.6.1 目标硬件 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 32
1.6.2 设备驱动程序• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 32
1.6.3 操作系统 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 32
1.6.4 第三方软件开发包和中间件• • • • • • • • • • • • • • • • • • • • • • • • • • • • 33
1.6.5 平台独立层 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 36
1.6.6 核心系统 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 36
1.6.7 资源管理器 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 37
1.6.8 渲染引擎 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 37
1.6.9 剖析和调试工具• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 41
1.6.10 碰撞和物理• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 42
1.6.11 动画• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 43
1.6.12 人体学接口设备 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 44
1.6.13 音频• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 45
1.6.14 在线多人/网络游戏• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 46
1.6.15 游戏性基础系统 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 47
1.6.16 个别游戏专用子系统 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 50
1.7 工具及资产管道• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 50
1.7.1 数字内容创作工具• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 50
1.7.2 资产调节管道• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 52
1.7.3 世界编辑器 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 54
1.7.4 资源数据库† • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 55
1.7.5 一些构建工具的方法• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 55
第2 章 专业工具• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 58
2.1 版本控制• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 58
2.1.1 为何使用版本控制• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 58
2.1.2 常见的版本控制系统• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 59
2.1.3 Subversion 和TortoiseSVN 概览• • • • • • • • • • • • • • • • • • • • • • • • • 60
2.1.4 在Google 上设置代码版本库• • • • • • • • • • • • • • • • • • • • • • • • • • • 61
2.1.5 安装TortoiseSVN• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 61
2.1.6 文件版本、更新和提交• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 63
2.1.7 多人签出、分支及合并• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 64
2.1.8 删除 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 66
2.2 微软Visual Studio• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 66
2.2.1 源文件、头文件及翻译单元• • • • • • • • • • • • • • • • • • • • • • • • • • • • 67
2.2.2 程序库、可执行文件及动态链接库• • • • • • • • • • • • • • • • • • • • • • • • • 67
2.2.3 项目及解决方案• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 68
2.2.4 生成配置 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 69
2.2.5 调试代码 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 75
2.3 剖析工具• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 81
2.3.1 剖析器列表 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 83
2.4 内存泄漏和损坏检测 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 83
2.5 其他工具• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 84
第3 章 游戏软件工程基础 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 85
3.1 重温C++ 及最佳实践 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 85
3.1.1 扼要重温面向对象编程• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 85
3.1.2 编码标准: 为什么及需要多少• • • • • • • • • • • • • • • • • • • • • • • • • • • 91
3.1.3 C++11† • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 92
3.2 C/C++ 的数据、代码及内存• • • • • • • • • • • • • • • • • • • • • • • • • • • • 99
3.2.1 数值表达形式• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 99
3.2.2 声明、定义及链接规范• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 109
3.2.3 C/C++ 内存布局• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 115
3.2.4 成员变量 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 119
3.2.5 对象的内存布局• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 121
3.2.6 kilobyte 及kibibyte • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 129
3.3 捕捉及处理错误• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 129
3.3.1 错误类型 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 129
3.3.2 错误处理 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 130
3.3.3 实现错误检测及处理• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 132
3.4 流水线、缓存及优化• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 136
3.4.1 并行范式转移• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 136
3.4.2 内存缓存 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 137
3.4.3 指令流水线及超纯量CPU • • • • • • • • • • • • • • • • • • • • • • • • • • • • 142
第4 章 游戏所需的三维数学• • • • • • • • • • • • • • • • • • • • • • • • • • • • • 146
4.1 在二维中解决三维问题 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 146
4.2 点和矢量• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 146
4.2.1 点和笛卡儿坐标• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 147
4.2.2 左手坐标系与右手坐标系的比较 • • • • • • • • • • • • • • • • • • • • • • • • • 148
4.2.3 矢量 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 149
4.2.4 矢量运算 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 150
4.2.5 点和矢量的线性插值• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 160
4.3 矩阵 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 160
4.3.1 矩阵乘法 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 161
4.3.2 以矩阵表示点和矢量• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 162
4.3.3 单位矩阵 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 163
4.3.4 逆矩阵 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 163
4.3.5 转置矩阵 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 163
4.3.6 齐次坐标 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 164
4.3.7 基础变换矩阵• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 165
4.3.8 4 × 3 矩阵 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 168
4.3.9 坐标空间 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 168
4.3.10 基的变更• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 171
4.3.11 变换法矢量• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 175
4.3.12 在内存中存储矩阵 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 175
4.4 四元数• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 177
4.4.1 把单位四元数视为三维旋转• • • • • • • • • • • • • • • • • • • • • • • • • • • • 178
4.4.2 四元数运算 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 178
4.4.3 以四元数旋转矢量• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 180
4.4.4 等价的四元数和矩阵• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 181
4.4.5 旋转性的线性插值• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 183
4.5 比较各种旋转表达方式 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 185
4.5.1 欧拉角 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 185
4.5.2 3 × 3 矩阵 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 186
4.5.3 轴角 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 186
4.5.4 四元数 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 187
4.5.5 SQT 变换• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 187
4.5.6 对偶四元数 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 188
4.5.7 旋转和自由度• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 188
4.6 其他数学对象 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 189
4.6.1 直线、光线及线段 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 189
4.6.2 球体 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 190
4.6.3 平面 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 190
4.6.4 轴对齐包围盒• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 192
4.6.5 定向包围盒 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 193
4.6.6 平截头体 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 193
4.6.7 凸多面体区域• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 194
4.7 硬件加速的SIMD 运算• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 194
4.7.1 SSE 寄存器• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 195
4.7.2 __m128 数据类型• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 196
4.7.3 用SSE 内部函数编码 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 197
4.7.4 用SSE 实现矢量与矩阵的相乘• • • • • • • • • • • • • • • • • • • • • • • • • • 199
4.8 产生随机数 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 203
4.8.1 线性同余产生器• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 204
4.8.2 梅森旋转 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 204
4.8.3 所有伪随机数产生器之母及Xorshift • • • • • • • • • • • • • • • • • • • • • • • 205
第II 部分 底层引擎系统
第5 章 游戏支持系统 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 209
5.1 子系统的启动和终止 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 209
5.1.1 C++ 的静态初始化次序(是不可用的) • • • • • • • • • • • • • • • • • • • • • • 209
5.1.2 行之有效的简单方法• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 212
5.1.3 一些实际引擎的例子• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 214
5.2 内存管理• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 218
5.2.1 优化动态内存分配• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 218
5.2.2 内存碎片 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 227
5.3 容器 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 231
5.3.1 容器操作 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 232
5.3.2 迭代器 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 233
5.3.3 算法复杂度 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 234
5.3.4 建立自定义的容器类• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 236
5.4 字符串• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 248
5.4.1 字符串的使用问题• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 248
5.4.2 字符串类 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 249
5.4.3 唯一标识符 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 249
5.4.4 本地化 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 253
5.5 引擎配置• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 263
5.5.1 读/写选项• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 263
5.5.2 个别用户选项• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 264
5.5.3 真实引擎中的配置管理• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 265
第6 章 资源及文件系统• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 270
6.1 文件系统• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 270
6.1.1 文件名和路径• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 271
6.1.2 基本文件I/O • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 274
6.1.3 异步文件I/O • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 277
6.2 资源管理器 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 281
6.2.1 离线资源管理及工具链• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 281
6.2.2 运行时资源管理• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 289
第7 章 游戏循环及实时模拟• • • • • • • • • • • • • • • • • • • • • • • • • • • • • 305
7.1 渲染循环• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 305
7.2 游戏循环• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 306
7.2.1 简单例子:《乓》• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 306
7.3 游戏循环的架构风格 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 308
7.3.1 视窗消息泵 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 308
7.3.2 回调驱动框架• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 309
7.3.3 基于事件的更新• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 311
7.4 抽象时间线 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 311
7.4.1 真实时间 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 311
7.4.2 游戏时间 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 311
7.4.3 局部及全局时间线• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 312
7.5 测量及处理时间• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 313
7.5.1 帧率及时间增量• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 313
7.5.2 从帧率到速率• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 314
7.5.3 使用高分辨率计时器测量实时时间 • • • • • • • • • • • • • • • • • • • • • • • • 317
7.5.4 时间单位和时钟变量• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 318
7.5.5 应对断点 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 321
7.5.6 一个简单的时钟类• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 322
7.6 多处理器的游戏循环 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 325
7.6.1 多处理器游戏机的架构• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 326
7.6.2 SIMD• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 331
7.6.3 分叉及汇合 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 331
7.6.4 每个子系统运行于独立线程• • • • • • • • • • • • • • • • • • • • • • • • • • • • 333
7.6.5 作业模型 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 334
7.6.6 异步程序设计• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 334
7.7 网络多人游戏循环• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 337
7.7.1 主从式模型 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 337
7.7.2 点对点模型 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 339
7.7.3 案例分析:《雷神之锤II》• • • • • • • • • • • • • • • • • • • • • • • • • • • • • 339
第8 章 人体学接口设备• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 342
8.1 各种人体学接口设备 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 342
8.2 人体学接口设备的接口技术• • • • • • • • • • • • • • • • • • • • • • • • • • • • • 344
8.2.1 轮询 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 344
8.2.2 中断 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 344
8.2.3 无线设备 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 345
8.3 输入类型• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 345
8.3.1 数字式按钮 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 345
8.3.2 模拟式轴及按钮• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 347
8.3.3 相对性轴 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 348
8.3.4 加速计 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 348
8.3.5 以Wii 遥控器或DualShock 做三维定向 • • • • • • • • • • • • • • • • • • • • • 349
8.3.6 摄像机 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 350
8.4 输出类型• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 352
8.4.1 震动反馈 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 352
8.4.2 力反馈 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 353
8.4.3 音频 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 353
8.4.4 其他输入/输出 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 353
8.5 游戏引擎的人体学接口设备系统 • • • • • • • • • • • • • • • • • • • • • • • • • • 353
8.5.1 典型需求 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 354
8.5.2 死区 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 354
8.5.3 模拟信号过滤• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 355
8.5.4 输入事件检测• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 357
8.5.5 为多位玩家管理多个HID • • • • • • • • • • • • • • • • • • • • • • • • • • • • 364
8.5.6 跨平台的HID 系统 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 364
8.5.7 输入的重新映射• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 366
8.5.8 上下文相关控制• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 367
8.5.9 禁用输入 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 368
8.6 人体学接口设备使用实践• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 368
第9 章 调试及开发工具• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 370
9.1 日志及跟踪 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 370
9.1.1 使用OutputDebugString() 做格式化输出• • • • • • • • • • • • • • • • • • • • • 371
9.1.2 冗长级别 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 372
9.1.3 频道 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 373
9.1.4 把输出同时抄写至日志文件• • • • • • • • • • • • • • • • • • • • • • • • • • • • 374
9.1.5 崩溃报告 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 374
9.2 调试用的绘图功能• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 375
9.2.1 调试绘图API • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 378
9.3 游戏内置菜单 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 382
9.4 游戏内置主控台• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 385
9.5 调试用摄像机和游戏暂停• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 386
9.6 作弊 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 386
9.7 屏幕截图及录像• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 387
9.8 游戏内置性能剖析• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 387
9.8.1 层阶式剖析 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 389
9.8.2 导出至Excel • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 394
9.9 游戏内置的内存统计和泄漏检测 • • • • • • • • • • • • • • • • • • • • • • • • • • 394
第III 部分 图形、运动与声音
第10 章 渲染引擎 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 401
10.1 采用深度缓冲的三角形光栅化基础 • • • • • • • • • • • • • • • • • • • • • • • • 401
10.1.1 场景描述• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 403
10.1.2 描述表面的视觉性质 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 410
10.1.3 光照基础• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 423
10.1.4 虚拟摄像机• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 432
10.2 渲染管道• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 442
10.2.1 渲染管道概览 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 443
10.2.2 工具阶段• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 444
10.2.3 资产调节阶段 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 446
10.2.4 GPU 简史• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 447
10.2.5 GPU 管道• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 448
10.2.6 可编程着色器 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 452
10.2.7 抗锯齿† • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 456
10.2.8 应用程序阶段 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 459
10.3 高级光照及全局光照• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 468
10.3.1 基于图像的光照 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 468
10.3.2 高动态范围光照 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 472
10.3.3 全局光照• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 473
10.3.4 延迟渲染• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 479
10.3.5 基于物理着色† • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 480
10.4 视觉效果和覆盖层• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 481
10.4.1 粒子效果• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 481
10.4.2 贴花• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 482
10.4.3 环境效果• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 483
10.4.4 覆盖层• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 486
10.4.5 伽马校正• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 487
10.4.6 全屏后期处理效果 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 488
10.5 延伸阅读• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 489
第11 章 动画系统 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 490
11.1 角色动画的类型 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 490
11.1.1 赛璐璐动画• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 490
11.1.2 刚性层阶式动画 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 491
11.1.3 每顶点动画及变形目标 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 492
11.1.4 蒙皮动画• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 493
11.1.5 把动画方法视为数据压缩技术• • • • • • • • • • • • • • • • • • • • • • • • • • 494
11.2 骨骼• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 495
11.2.1 骨骼层阶结构 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 496
11.2.2 在内存中表示骨骼 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 497
11.3 姿势• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 498
11.3.1 绑定姿势• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 498
11.3.2 局部姿势• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 499
11.3.3 全局姿势• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 501
11.4 动画片段• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 502
11.4.1 局部时间线• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 503
11.4.2 全局时间线• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 506
11.4.3 比较局部和全局时钟 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 508
11.4.4 简单的动画数据格式 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 511
11.4.5 连续的通道函数 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 512
11.4.6 元通道• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 513
11.5 蒙皮及生成矩阵调色板• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 514
11.5.1 每顶点的蒙皮信息 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 515
11.5.2 蒙皮涉及的数学知识 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 515
11.6 动画混合• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 519
11.6.1 线性插值混合 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 519
11.6.2 线性插值混合的应用 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 521
11.6.3 复杂的线性插值混合 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 526
11.6.4 骨骼分部混合 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 529
11.6.5 加法混合• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 531
11.6.6 加法混合的应用 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 533
11.7 后期处理• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 536
11.7.1 程序式动画• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 536
11.7.2 逆运动学• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 537
11.7.3 布娃娃• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 538
11.8 压缩技术• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 538
11.8.1 通道省略• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 539
11.8.2 量化• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 539
11.8.3 采样频率及键省略 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 543
11.8.4 基于曲线的压缩 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 543
11.8.5 选择性载入及串流 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 544
11.9 动画系统架构• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 544
11.10 动画管道 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 545
11.10.1 数据结构 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 546
11.10.2 扁平的加权平均混合表示法 • • • • • • • • • • • • • • • • • • • • • • • • • • 549
11.10.3 混合树 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 552
11.10.4 淡入/淡出架构 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 555
11.10.5 动画管道的优化• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 557
11.11 动作状态机 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 559
11.11.1 动画状态 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 559
11.11.2 过渡 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 565
11.11.3 状态层 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 568
11.11.4 控制参数 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 570
11.11.5 约束 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 571
11.12 动画控制器 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 579
第12 章 碰撞及刚体动力学• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 580
12.1 你想在游戏中加入物理吗 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 580
12.1.1 物理系统可以做的事情 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 581
12.1.2 物理好玩吗• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 582
12.1.3 物理对游戏的影响 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 583
12.2 碰撞/物理中间件• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 585
12.2.1 I-Collide、SWIFT、V-Collide 及RAPID • • • • • • • • • • • • • • • • • • • • 585
12.2.2 ODE • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 585
12.2.3 Bullet • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 586
12.2.4 TrueAxis • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 586
12.2.5 PhysX• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 586
12.2.6 Havok • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 587
12.2.7 PAL• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 587
12.2.8 DMM • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 587
12.3 碰撞检测系统• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 588
12.3.1 可碰撞的实体 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 588
12.3.2 碰撞/物理世界• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 589
12.3.3 关于形状的概念 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 590
12.3.4 碰撞原型• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 592
12.3.5 碰撞测试及解析几何 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 596
12.3.6 性能优化• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 604
12.3.7 碰撞查询• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 606
12.3.8 碰撞过滤• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 610
12.4 刚体动力学• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 611
12.4.1 基础• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 613
12.4.2 线性动力学• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 614
12.4.3 运动方程求解 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 616
12.4.4 数值积分• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 618
12.4.5 二维旋转动力学 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 622
12.4.6 三维旋转动力学 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 625
12.4.7 碰撞响应• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 629
12.4.8 约束• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 636
12.4.9 控制刚体的运动 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 640
12.4.10 碰撞/物理步 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 641
12.5 将物理引擎整合至游戏• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 643
12.5.1 连接游戏对象和刚体 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 643
12.5.2 更新模拟• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 646
12.5.3 游戏中碰撞及物理的应用例子• • • • • • • • • • • • • • • • • • • • • • • • • • 649
12.6 展望: 高级物理功能 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 656
第13 章 音频† • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 658
13.1 声音的物理• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 658
13.1.1 声波的属性• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 659
13.1.2 感知响度及分贝 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 660
13.1.3 声波的传播• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 663
13.1.4 位置的感知• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 668
13.2 声音中的数学知识• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 668
13.2.1 信号• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 669
13.2.2 处理信号• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 670
13.2.3 线性时不变系统 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 671
13.2.4 LTI 系统的脉冲响应 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 672
13.2.5 频域与傅里叶变换 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 677
13.3 声音技术• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 685
13.3.1 模拟音频技术 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 685
13.3.2 数字音频技术 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 690
13.4 三维音频渲染• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 696
13.4.1 三维声音渲染概览 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 697
13.4.2 为音频世界建模 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 698
13.4.3 基于距离的衰减 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 698
13.4.4 偏移• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 700
13.4.5 传播、混响及声学• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 705
13.4.6 多普勒频移• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 712
13.5 音频引擎架构• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 712
13.5.1 音频处理管道 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 714
13.5.2 概念及术语• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 714
13.5.3 音总线• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 715
13.5.4 主控混音器• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 718
13.5.5 主控输出总线 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 719
13.5.6 实现总线• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 720
13.5.7 资产管理• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 722
13.5.8 对游戏混音• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 724
13.5.9 音频引擎调查 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 727
13.6 游戏专用的音频功能• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 730
13.6.1 支持切割屏• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 731
13.6.2 角色对话• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 732
13.6.3 音乐• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 744
第IV 部分 游 戏 性
第14 章 游戏性系统简介• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 747
14.1 剖析游戏世界• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 748
14.1.1 世界元素• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 748
14.1.2 世界组块• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 750
14.1.3 高级游戏流程 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 751
14.2 实现动态元素: 游戏对象• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 752
14.2.1 游戏对象模型 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 753
14.2.2 工具方的设计和运行时的设计• • • • • • • • • • • • • • • • • • • • • • • • • • 754
14.3 数据驱动游戏引擎• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 754
14.4 游戏世界编辑器 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 755
14.4.1 游戏世界编辑器的典型功能• • • • • • • • • • • • • • • • • • • • • • • • • • • 758
4.4.2 集成的资产管理工具 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 763
第15 章 运行时游戏性基础系统• • • • • • • • • • • • • • • • • • • • • • • • • • • 766
15.1 游戏性基础系统的组件• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 766
15.2 各种运行时对象模型架构 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 768
15.2.1 以对象为中心的各种架构 • • • • • • • • • • • • • • • • • • • • • • • • • • • • 769
15.2.2 以属性为中心的各种架构 • • • • • • • • • • • • • • • • • • • • • • • • • • • • 781
15.3 世界组块的数据格式• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 785
15.3.1 二进制对象映像 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 786
15.3.2 序列化游戏对象描述 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 786
15.3.3 生成器及类型架构 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 788
15.4 游戏世界的加载和串流• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 792
15.4.1 简单的关卡加载 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 792
15.4.2 向无缝加载进发: 阻隔室 • • • • • • • • • • • • • • • • • • • • • • • • • • • • 792
5.4.3 游戏世界的串流 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 794
15.4.4 对象生成的内存管理 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 796
15.4.5 游戏存档• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 798
15.5 对象引用与世界查询• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 799
15.5.1 指针• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 799
15.5.2 智能指针• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 800
15.5.3 句柄• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 802
15.5.4 游戏对象查询 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 804
15.6 实时更新游戏对象• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 806
15.6.1 一个简单(但不可行) 的方式• • • • • • • • • • • • • • • • • • • • • • • • • • • 807
15.6.2 性能限制及批次式更新 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 809
15.6.3 对象及子系统的相互依赖 • • • • • • • • • • • • • • • • • • • • • • • • • • • • 811
15.6.4 为并行设计• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 819
15.7 事件与消息泵• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 821
15.7.1 静态类型的函数绑定带来的问题• • • • • • • • • • • • • • • • • • • • • • • • • 821
15.7.2 把事件封装成对象 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 822
15.7.3 事件类型• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 823
15.7.4 事件参数• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 824
15.7.5 事件处理器• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 826
15.7.6 取出事件参数 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 827
15.7.7 职责链• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 827
15.7.8 登记对事件的关注 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 829
15.7.9 要排队还是不要排队 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 830
15.7.10 即时传递事件带来的问题• • • • • • • • • • • • • • • • • • • • • • • • • • • • 835
15.7.11 数据驱动事件/消息传递系统• • • • • • • • • • • • • • • • • • • • • • • • • • 836
15.8 脚本• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 839
15.8.1 运行时与数据定义的对比 • • • • • • • • • • • • • • • • • • • • • • • • • • • • 839
15.8.2 编程语言特性 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 839
15.8.3 一些常见的游戏脚本语言 • • • • • • • • • • • • • • • • • • • • • • • • • • • • 841
15.8.4 脚本所需的架构 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 846
15.8.5 运行时游戏脚本语言的功能• • • • • • • • • • • • • • • • • • • • • • • • • • • 847
15.9 高层次的游戏流程• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 858
第V 部分 总 结
第16 章 还有更多内容吗• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 863
16.1 一些未谈及的引擎系统• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 863
16.1.1 影片播放器• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 863
16.1.2 多人网络• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 864
16.2 游戏性系统• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 864
16.2.1 玩家机制• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 864
16.2.2 摄像机• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 864
16.2.3 人工智能• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 865
16.2.4 其他游戏性系统 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 866
参考文献 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 867
中文索引 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 871
英文索引 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 900
第1 版序言• • • • • • • • • • • • • • • • xxxv
第2 版前言• • • • • • • • • • • • • • • • xxxvii
第1 版前言• • • • • • • • • • • • • • • • xxxviii
致谢 • • • • • • • • • • • • • • • • • xl
第I 部分 基 础
第1 章 导论• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 3
1.1 典型游戏团队的结构 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 4
1.1.1 工程师 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 5
1.1.2 艺术家 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 5
1.1.3 游戏设计师 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 6
1.1.4 制作人 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 7
1.1.5 其他工作人员• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 7
1.1.6 发行商及工作室• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 7
1.2 游戏是什么 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 8
1.2.1 电子游戏作为软实时模拟• • • • • • • • • • • • • • • • • • • • • • • • • • • • • 8
1.3 游戏引擎是什么• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 10
1.4 不同游戏类型的引擎差异• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 11
1.4.1 第一人称射击游戏• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 12
1.4.2 平台及其他第三人称游戏• • • • • • • • • • • • • • • • • • • • • • • • • • • • • 13
1.4.3 格斗游戏 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 15
1.4.4 竞速游戏 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 17
1.4.5 实时策略游戏• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 18
1.4.6 大型多人在线游戏• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 20
1.4.7 玩家创作内容†• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 21
1.4.8 其他游戏类型• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 23
1.5 游戏引擎概览 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 24
1.5.1 雷神之锤引擎家族• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 24
1.5.2 虚幻引擎 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 25
1.5.3 Source 引擎• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 26
1.5.4 DICE 的寒霜引擎† • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 26
1.5.5 CryEngine† • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 26
1.5.6 索尼的PhyreEngine† • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 27
1.5.7 微软的XNA Game Studio• • • • • • • • • • • • • • • • • • • • • • • • • • • • 27
1.5.8 Unity† • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 27
1.5.9 供非程序员使用的二维游戏引擎† • • • • • • • • • • • • • • • • • • • • • • • • • 28
1.5.10 其他商业引擎 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 29
1.5.11 专有内部引擎 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 29
1.5.12 开源引擎• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 29
1.6 运行时引擎架构• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 30
1.6.1 目标硬件 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 32
1.6.2 设备驱动程序• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 32
1.6.3 操作系统 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 32
1.6.4 第三方软件开发包和中间件• • • • • • • • • • • • • • • • • • • • • • • • • • • • 33
1.6.5 平台独立层 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 36
1.6.6 核心系统 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 36
1.6.7 资源管理器 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 37
1.6.8 渲染引擎 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 37
1.6.9 剖析和调试工具• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 41
1.6.10 碰撞和物理• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 42
1.6.11 动画• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 43
1.6.12 人体学接口设备 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 44
1.6.13 音频• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 45
1.6.14 在线多人/网络游戏• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 46
1.6.15 游戏性基础系统 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 47
1.6.16 个别游戏专用子系统 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 50
1.7 工具及资产管道• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 50
1.7.1 数字内容创作工具• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 50
1.7.2 资产调节管道• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 52
1.7.3 世界编辑器 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 54
1.7.4 资源数据库† • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 55
1.7.5 一些构建工具的方法• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 55
第2 章 专业工具• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 58
2.1 版本控制• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 58
2.1.1 为何使用版本控制• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 58
2.1.2 常见的版本控制系统• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 59
2.1.3 Subversion 和TortoiseSVN 概览• • • • • • • • • • • • • • • • • • • • • • • • • 60
2.1.4 在Google 上设置代码版本库• • • • • • • • • • • • • • • • • • • • • • • • • • • 61
2.1.5 安装TortoiseSVN• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 61
2.1.6 文件版本、更新和提交• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 63
2.1.7 多人签出、分支及合并• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 64
2.1.8 删除 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 66
2.2 微软Visual Studio• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 66
2.2.1 源文件、头文件及翻译单元• • • • • • • • • • • • • • • • • • • • • • • • • • • • 67
2.2.2 程序库、可执行文件及动态链接库• • • • • • • • • • • • • • • • • • • • • • • • • 67
2.2.3 项目及解决方案• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 68
2.2.4 生成配置 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 69
2.2.5 调试代码 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 75
2.3 剖析工具• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 81
2.3.1 剖析器列表 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 83
2.4 内存泄漏和损坏检测 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 83
2.5 其他工具• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 84
第3 章 游戏软件工程基础 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 85
3.1 重温C++ 及最佳实践 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 85
3.1.1 扼要重温面向对象编程• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 85
3.1.2 编码标准: 为什么及需要多少• • • • • • • • • • • • • • • • • • • • • • • • • • • 91
3.1.3 C++11† • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 92
3.2 C/C++ 的数据、代码及内存• • • • • • • • • • • • • • • • • • • • • • • • • • • • 99
3.2.1 数值表达形式• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 99
3.2.2 声明、定义及链接规范• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 109
3.2.3 C/C++ 内存布局• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 115
3.2.4 成员变量 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 119
3.2.5 对象的内存布局• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 121
3.2.6 kilobyte 及kibibyte • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 129
3.3 捕捉及处理错误• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 129
3.3.1 错误类型 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 129
3.3.2 错误处理 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 130
3.3.3 实现错误检测及处理• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 132
3.4 流水线、缓存及优化• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 136
3.4.1 并行范式转移• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 136
3.4.2 内存缓存 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 137
3.4.3 指令流水线及超纯量CPU • • • • • • • • • • • • • • • • • • • • • • • • • • • • 142
第4 章 游戏所需的三维数学• • • • • • • • • • • • • • • • • • • • • • • • • • • • • 146
4.1 在二维中解决三维问题 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 146
4.2 点和矢量• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 146
4.2.1 点和笛卡儿坐标• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 147
4.2.2 左手坐标系与右手坐标系的比较 • • • • • • • • • • • • • • • • • • • • • • • • • 148
4.2.3 矢量 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 149
4.2.4 矢量运算 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 150
4.2.5 点和矢量的线性插值• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 160
4.3 矩阵 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 160
4.3.1 矩阵乘法 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 161
4.3.2 以矩阵表示点和矢量• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 162
4.3.3 单位矩阵 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 163
4.3.4 逆矩阵 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 163
4.3.5 转置矩阵 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 163
4.3.6 齐次坐标 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 164
4.3.7 基础变换矩阵• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 165
4.3.8 4 × 3 矩阵 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 168
4.3.9 坐标空间 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 168
4.3.10 基的变更• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 171
4.3.11 变换法矢量• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 175
4.3.12 在内存中存储矩阵 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 175
4.4 四元数• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 177
4.4.1 把单位四元数视为三维旋转• • • • • • • • • • • • • • • • • • • • • • • • • • • • 178
4.4.2 四元数运算 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 178
4.4.3 以四元数旋转矢量• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 180
4.4.4 等价的四元数和矩阵• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 181
4.4.5 旋转性的线性插值• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 183
4.5 比较各种旋转表达方式 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 185
4.5.1 欧拉角 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 185
4.5.2 3 × 3 矩阵 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 186
4.5.3 轴角 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 186
4.5.4 四元数 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 187
4.5.5 SQT 变换• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 187
4.5.6 对偶四元数 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 188
4.5.7 旋转和自由度• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 188
4.6 其他数学对象 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 189
4.6.1 直线、光线及线段 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 189
4.6.2 球体 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 190
4.6.3 平面 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 190
4.6.4 轴对齐包围盒• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 192
4.6.5 定向包围盒 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 193
4.6.6 平截头体 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 193
4.6.7 凸多面体区域• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 194
4.7 硬件加速的SIMD 运算• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 194
4.7.1 SSE 寄存器• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 195
4.7.2 __m128 数据类型• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 196
4.7.3 用SSE 内部函数编码 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 197
4.7.4 用SSE 实现矢量与矩阵的相乘• • • • • • • • • • • • • • • • • • • • • • • • • • 199
4.8 产生随机数 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 203
4.8.1 线性同余产生器• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 204
4.8.2 梅森旋转 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 204
4.8.3 所有伪随机数产生器之母及Xorshift • • • • • • • • • • • • • • • • • • • • • • • 205
第II 部分 底层引擎系统
第5 章 游戏支持系统 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 209
5.1 子系统的启动和终止 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 209
5.1.1 C++ 的静态初始化次序(是不可用的) • • • • • • • • • • • • • • • • • • • • • • 209
5.1.2 行之有效的简单方法• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 212
5.1.3 一些实际引擎的例子• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 214
5.2 内存管理• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 218
5.2.1 优化动态内存分配• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 218
5.2.2 内存碎片 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 227
5.3 容器 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 231
5.3.1 容器操作 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 232
5.3.2 迭代器 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 233
5.3.3 算法复杂度 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 234
5.3.4 建立自定义的容器类• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 236
5.4 字符串• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 248
5.4.1 字符串的使用问题• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 248
5.4.2 字符串类 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 249
5.4.3 唯一标识符 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 249
5.4.4 本地化 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 253
5.5 引擎配置• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 263
5.5.1 读/写选项• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 263
5.5.2 个别用户选项• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 264
5.5.3 真实引擎中的配置管理• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 265
第6 章 资源及文件系统• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 270
6.1 文件系统• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 270
6.1.1 文件名和路径• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 271
6.1.2 基本文件I/O • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 274
6.1.3 异步文件I/O • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 277
6.2 资源管理器 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 281
6.2.1 离线资源管理及工具链• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 281
6.2.2 运行时资源管理• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 289
第7 章 游戏循环及实时模拟• • • • • • • • • • • • • • • • • • • • • • • • • • • • • 305
7.1 渲染循环• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 305
7.2 游戏循环• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 306
7.2.1 简单例子:《乓》• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 306
7.3 游戏循环的架构风格 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 308
7.3.1 视窗消息泵 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 308
7.3.2 回调驱动框架• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 309
7.3.3 基于事件的更新• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 311
7.4 抽象时间线 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 311
7.4.1 真实时间 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 311
7.4.2 游戏时间 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 311
7.4.3 局部及全局时间线• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 312
7.5 测量及处理时间• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 313
7.5.1 帧率及时间增量• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 313
7.5.2 从帧率到速率• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 314
7.5.3 使用高分辨率计时器测量实时时间 • • • • • • • • • • • • • • • • • • • • • • • • 317
7.5.4 时间单位和时钟变量• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 318
7.5.5 应对断点 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 321
7.5.6 一个简单的时钟类• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 322
7.6 多处理器的游戏循环 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 325
7.6.1 多处理器游戏机的架构• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 326
7.6.2 SIMD• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 331
7.6.3 分叉及汇合 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 331
7.6.4 每个子系统运行于独立线程• • • • • • • • • • • • • • • • • • • • • • • • • • • • 333
7.6.5 作业模型 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 334
7.6.6 异步程序设计• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 334
7.7 网络多人游戏循环• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 337
7.7.1 主从式模型 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 337
7.7.2 点对点模型 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 339
7.7.3 案例分析:《雷神之锤II》• • • • • • • • • • • • • • • • • • • • • • • • • • • • • 339
第8 章 人体学接口设备• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 342
8.1 各种人体学接口设备 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 342
8.2 人体学接口设备的接口技术• • • • • • • • • • • • • • • • • • • • • • • • • • • • • 344
8.2.1 轮询 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 344
8.2.2 中断 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 344
8.2.3 无线设备 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 345
8.3 输入类型• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 345
8.3.1 数字式按钮 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 345
8.3.2 模拟式轴及按钮• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 347
8.3.3 相对性轴 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 348
8.3.4 加速计 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 348
8.3.5 以Wii 遥控器或DualShock 做三维定向 • • • • • • • • • • • • • • • • • • • • • 349
8.3.6 摄像机 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 350
8.4 输出类型• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 352
8.4.1 震动反馈 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 352
8.4.2 力反馈 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 353
8.4.3 音频 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 353
8.4.4 其他输入/输出 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 353
8.5 游戏引擎的人体学接口设备系统 • • • • • • • • • • • • • • • • • • • • • • • • • • 353
8.5.1 典型需求 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 354
8.5.2 死区 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 354
8.5.3 模拟信号过滤• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 355
8.5.4 输入事件检测• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 357
8.5.5 为多位玩家管理多个HID • • • • • • • • • • • • • • • • • • • • • • • • • • • • 364
8.5.6 跨平台的HID 系统 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 364
8.5.7 输入的重新映射• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 366
8.5.8 上下文相关控制• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 367
8.5.9 禁用输入 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 368
8.6 人体学接口设备使用实践• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 368
第9 章 调试及开发工具• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 370
9.1 日志及跟踪 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 370
9.1.1 使用OutputDebugString() 做格式化输出• • • • • • • • • • • • • • • • • • • • • 371
9.1.2 冗长级别 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 372
9.1.3 频道 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 373
9.1.4 把输出同时抄写至日志文件• • • • • • • • • • • • • • • • • • • • • • • • • • • • 374
9.1.5 崩溃报告 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 374
9.2 调试用的绘图功能• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 375
9.2.1 调试绘图API • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 378
9.3 游戏内置菜单 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 382
9.4 游戏内置主控台• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 385
9.5 调试用摄像机和游戏暂停• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 386
9.6 作弊 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 386
9.7 屏幕截图及录像• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 387
9.8 游戏内置性能剖析• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 387
9.8.1 层阶式剖析 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 389
9.8.2 导出至Excel • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 394
9.9 游戏内置的内存统计和泄漏检测 • • • • • • • • • • • • • • • • • • • • • • • • • • 394
第III 部分 图形、运动与声音
第10 章 渲染引擎 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 401
10.1 采用深度缓冲的三角形光栅化基础 • • • • • • • • • • • • • • • • • • • • • • • • 401
10.1.1 场景描述• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 403
10.1.2 描述表面的视觉性质 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 410
10.1.3 光照基础• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 423
10.1.4 虚拟摄像机• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 432
10.2 渲染管道• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 442
10.2.1 渲染管道概览 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 443
10.2.2 工具阶段• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 444
10.2.3 资产调节阶段 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 446
10.2.4 GPU 简史• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 447
10.2.5 GPU 管道• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 448
10.2.6 可编程着色器 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 452
10.2.7 抗锯齿† • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 456
10.2.8 应用程序阶段 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 459
10.3 高级光照及全局光照• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 468
10.3.1 基于图像的光照 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 468
10.3.2 高动态范围光照 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 472
10.3.3 全局光照• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 473
10.3.4 延迟渲染• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 479
10.3.5 基于物理着色† • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 480
10.4 视觉效果和覆盖层• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 481
10.4.1 粒子效果• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 481
10.4.2 贴花• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 482
10.4.3 环境效果• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 483
10.4.4 覆盖层• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 486
10.4.5 伽马校正• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 487
10.4.6 全屏后期处理效果 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 488
10.5 延伸阅读• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 489
第11 章 动画系统 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 490
11.1 角色动画的类型 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 490
11.1.1 赛璐璐动画• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 490
11.1.2 刚性层阶式动画 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 491
11.1.3 每顶点动画及变形目标 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 492
11.1.4 蒙皮动画• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 493
11.1.5 把动画方法视为数据压缩技术• • • • • • • • • • • • • • • • • • • • • • • • • • 494
11.2 骨骼• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 495
11.2.1 骨骼层阶结构 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 496
11.2.2 在内存中表示骨骼 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 497
11.3 姿势• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 498
11.3.1 绑定姿势• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 498
11.3.2 局部姿势• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 499
11.3.3 全局姿势• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 501
11.4 动画片段• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 502
11.4.1 局部时间线• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 503
11.4.2 全局时间线• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 506
11.4.3 比较局部和全局时钟 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 508
11.4.4 简单的动画数据格式 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 511
11.4.5 连续的通道函数 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 512
11.4.6 元通道• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 513
11.5 蒙皮及生成矩阵调色板• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 514
11.5.1 每顶点的蒙皮信息 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 515
11.5.2 蒙皮涉及的数学知识 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 515
11.6 动画混合• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 519
11.6.1 线性插值混合 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 519
11.6.2 线性插值混合的应用 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 521
11.6.3 复杂的线性插值混合 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 526
11.6.4 骨骼分部混合 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 529
11.6.5 加法混合• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 531
11.6.6 加法混合的应用 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 533
11.7 后期处理• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 536
11.7.1 程序式动画• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 536
11.7.2 逆运动学• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 537
11.7.3 布娃娃• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 538
11.8 压缩技术• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 538
11.8.1 通道省略• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 539
11.8.2 量化• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 539
11.8.3 采样频率及键省略 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 543
11.8.4 基于曲线的压缩 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 543
11.8.5 选择性载入及串流 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 544
11.9 动画系统架构• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 544
11.10 动画管道 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 545
11.10.1 数据结构 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 546
11.10.2 扁平的加权平均混合表示法 • • • • • • • • • • • • • • • • • • • • • • • • • • 549
11.10.3 混合树 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 552
11.10.4 淡入/淡出架构 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 555
11.10.5 动画管道的优化• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 557
11.11 动作状态机 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 559
11.11.1 动画状态 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 559
11.11.2 过渡 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 565
11.11.3 状态层 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 568
11.11.4 控制参数 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 570
11.11.5 约束 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 571
11.12 动画控制器 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 579
第12 章 碰撞及刚体动力学• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 580
12.1 你想在游戏中加入物理吗 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 580
12.1.1 物理系统可以做的事情 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 581
12.1.2 物理好玩吗• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 582
12.1.3 物理对游戏的影响 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 583
12.2 碰撞/物理中间件• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 585
12.2.1 I-Collide、SWIFT、V-Collide 及RAPID • • • • • • • • • • • • • • • • • • • • 585
12.2.2 ODE • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 585
12.2.3 Bullet • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 586
12.2.4 TrueAxis • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 586
12.2.5 PhysX• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 586
12.2.6 Havok • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 587
12.2.7 PAL• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 587
12.2.8 DMM • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 587
12.3 碰撞检测系统• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 588
12.3.1 可碰撞的实体 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 588
12.3.2 碰撞/物理世界• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 589
12.3.3 关于形状的概念 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 590
12.3.4 碰撞原型• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 592
12.3.5 碰撞测试及解析几何 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 596
12.3.6 性能优化• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 604
12.3.7 碰撞查询• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 606
12.3.8 碰撞过滤• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 610
12.4 刚体动力学• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 611
12.4.1 基础• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 613
12.4.2 线性动力学• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 614
12.4.3 运动方程求解 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 616
12.4.4 数值积分• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 618
12.4.5 二维旋转动力学 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 622
12.4.6 三维旋转动力学 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 625
12.4.7 碰撞响应• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 629
12.4.8 约束• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 636
12.4.9 控制刚体的运动 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 640
12.4.10 碰撞/物理步 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 641
12.5 将物理引擎整合至游戏• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 643
12.5.1 连接游戏对象和刚体 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 643
12.5.2 更新模拟• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 646
12.5.3 游戏中碰撞及物理的应用例子• • • • • • • • • • • • • • • • • • • • • • • • • • 649
12.6 展望: 高级物理功能 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 656
第13 章 音频† • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 658
13.1 声音的物理• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 658
13.1.1 声波的属性• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 659
13.1.2 感知响度及分贝 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 660
13.1.3 声波的传播• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 663
13.1.4 位置的感知• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 668
13.2 声音中的数学知识• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 668
13.2.1 信号• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 669
13.2.2 处理信号• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 670
13.2.3 线性时不变系统 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 671
13.2.4 LTI 系统的脉冲响应 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 672
13.2.5 频域与傅里叶变换 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 677
13.3 声音技术• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 685
13.3.1 模拟音频技术 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 685
13.3.2 数字音频技术 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 690
13.4 三维音频渲染• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 696
13.4.1 三维声音渲染概览 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 697
13.4.2 为音频世界建模 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 698
13.4.3 基于距离的衰减 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 698
13.4.4 偏移• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 700
13.4.5 传播、混响及声学• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 705
13.4.6 多普勒频移• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 712
13.5 音频引擎架构• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 712
13.5.1 音频处理管道 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 714
13.5.2 概念及术语• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 714
13.5.3 音总线• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 715
13.5.4 主控混音器• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 718
13.5.5 主控输出总线 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 719
13.5.6 实现总线• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 720
13.5.7 资产管理• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 722
13.5.8 对游戏混音• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 724
13.5.9 音频引擎调查 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 727
13.6 游戏专用的音频功能• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 730
13.6.1 支持切割屏• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 731
13.6.2 角色对话• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 732
13.6.3 音乐• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 744
第IV 部分 游 戏 性
第14 章 游戏性系统简介• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 747
14.1 剖析游戏世界• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 748
14.1.1 世界元素• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 748
14.1.2 世界组块• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 750
14.1.3 高级游戏流程 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 751
14.2 实现动态元素: 游戏对象• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 752
14.2.1 游戏对象模型 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 753
14.2.2 工具方的设计和运行时的设计• • • • • • • • • • • • • • • • • • • • • • • • • • 754
14.3 数据驱动游戏引擎• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 754
14.4 游戏世界编辑器 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 755
14.4.1 游戏世界编辑器的典型功能• • • • • • • • • • • • • • • • • • • • • • • • • • • 758
4.4.2 集成的资产管理工具 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 763
第15 章 运行时游戏性基础系统• • • • • • • • • • • • • • • • • • • • • • • • • • • 766
15.1 游戏性基础系统的组件• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 766
15.2 各种运行时对象模型架构 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 768
15.2.1 以对象为中心的各种架构 • • • • • • • • • • • • • • • • • • • • • • • • • • • • 769
15.2.2 以属性为中心的各种架构 • • • • • • • • • • • • • • • • • • • • • • • • • • • • 781
15.3 世界组块的数据格式• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 785
15.3.1 二进制对象映像 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 786
15.3.2 序列化游戏对象描述 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 786
15.3.3 生成器及类型架构 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 788
15.4 游戏世界的加载和串流• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 792
15.4.1 简单的关卡加载 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 792
15.4.2 向无缝加载进发: 阻隔室 • • • • • • • • • • • • • • • • • • • • • • • • • • • • 792
5.4.3 游戏世界的串流 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 794
15.4.4 对象生成的内存管理 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 796
15.4.5 游戏存档• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 798
15.5 对象引用与世界查询• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 799
15.5.1 指针• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 799
15.5.2 智能指针• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 800
15.5.3 句柄• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 802
15.5.4 游戏对象查询 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 804
15.6 实时更新游戏对象• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 806
15.6.1 一个简单(但不可行) 的方式• • • • • • • • • • • • • • • • • • • • • • • • • • • 807
15.6.2 性能限制及批次式更新 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 809
15.6.3 对象及子系统的相互依赖 • • • • • • • • • • • • • • • • • • • • • • • • • • • • 811
15.6.4 为并行设计• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 819
15.7 事件与消息泵• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 821
15.7.1 静态类型的函数绑定带来的问题• • • • • • • • • • • • • • • • • • • • • • • • • 821
15.7.2 把事件封装成对象 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 822
15.7.3 事件类型• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 823
15.7.4 事件参数• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 824
15.7.5 事件处理器• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 826
15.7.6 取出事件参数 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 827
15.7.7 职责链• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 827
15.7.8 登记对事件的关注 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 829
15.7.9 要排队还是不要排队 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 830
15.7.10 即时传递事件带来的问题• • • • • • • • • • • • • • • • • • • • • • • • • • • • 835
15.7.11 数据驱动事件/消息传递系统• • • • • • • • • • • • • • • • • • • • • • • • • • 836
15.8 脚本• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 839
15.8.1 运行时与数据定义的对比 • • • • • • • • • • • • • • • • • • • • • • • • • • • • 839
15.8.2 编程语言特性 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 839
15.8.3 一些常见的游戏脚本语言 • • • • • • • • • • • • • • • • • • • • • • • • • • • • 841
15.8.4 脚本所需的架构 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 846
15.8.5 运行时游戏脚本语言的功能• • • • • • • • • • • • • • • • • • • • • • • • • • • 847
15.9 高层次的游戏流程• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 858
第V 部分 总 结
第16 章 还有更多内容吗• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 863
16.1 一些未谈及的引擎系统• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 863
16.1.1 影片播放器• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 863
16.1.2 多人网络• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 864
16.2 游戏性系统• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 864
16.2.1 玩家机制• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 864
16.2.2 摄像机• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 864
16.2.3 人工智能• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 865
16.2.4 其他游戏性系统 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 866
参考文献 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 867
中文索引 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 871
英文索引 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 900