第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
· · · · · · (
收起)