目录 2
第一部分 游戏编程 2
第1章 游戏编程时间表 2
1.1 第一阶段:“星球大战”之前 2
1.2 第二阶段:从“星球大战”到Atari 5
1.3 第三阶段:游戏控制台与个人计算机 6
1.3.1 游戏控制台与游戏开发人员 6
1.3.2 个人计算机 8
1.4 第四阶段:调整与汇总 9
1.5 第五阶段:游戏引擎的出现 11
1.6 第六阶段:手指式革命 14
1.7 第七阶段:移动现象 15
1.8 第八阶段:多方游戏 16
1.9 结束语 17
第2章 游戏体系结构 19
2.1 实时软件 19
2.2 游戏逻辑段 24
2.2.1 玩家更新 24
2.2.2 世界更新 25
2.3 显示段 26
2.3.2 NPC绘制 27
2.3.1 世界绘制 27
2.3.3 玩家 28
2.3.4 问题:网络游戏 29
2.4 编程过程 30
关卡 30
2.5 结束语 36
第3章 数据结构与算法 37
3.1 类型、结构和类 37
3.2 数据结构 39
3.2.1 静态数组 39
3.2.2 链表 40
3.2.3 双向链表 41
3.2.4 队列 42
3.2.5 堆栈 43
3.2.6 双头队列 43
3.2.7 表 44
3.2.8 树 47
3.2.9 优先队列 51
3.2.10 图 52
3.3 标准模板库 54
3.3.1 容器 55
3.3.2 迭代器 58
3.4 结束语 59
4.1 设计模式定义 60
第4章 设计模式 60
4.2 一些重要编程模式 61
4.2.1 单体模式 61
4.2.2 策略模式 62
4.2.3 工厂模式 64
4.2.4 空间索引 66
4.2.5 复合模式 69
4.2.6 轻量级模式 72
4.3 可用性模式 74
4.3.1 屏蔽模式 74
4.3.4 磁化 75
4.3.5 焦点模式 75
4.3.2 状态模式 75
4.3.3 自动方式取消 75
4.3.6 进程模式 76
4.4 结束语 76
第5章 用户输入 77
5.1 键盘 77
5.2 鼠标 82
5.3 游戏杆 85
5.4 硬件抽象 90
5.5 力量反馈 92
5.6 结束语 93
第6章 基本人工智能技术 94
6.1 情境 94
6.2 人工智能系统结构 95
6.2.1 感知世界 96
6.2.2 记忆 96
6.2.3 分析/推理核心 96
6.2.4 动作/输出系统 97
6.3 特定技术 97
6.3.1 有限状态机 97
6.3.2 规则系统 106
6.3.3 规划与解题 113
6.3.4 生物灵感人工智能 115
6.4 结束语 119
第7章 面向动作的人工智能 120
7.1 动作游戏 120
7.2 动作设计人工智能 120
7.3 对象跟踪 122
7.3.1 眼睛接触:二维半平面测试 122
7.3.2 三维版本:半球 124
7.4 追赶 125
7.4.1 二维追赶:固定速度 125
7.4.2 预测性追赶 126
7.5 逃避 127
7.7 隐藏与遮盖 128
7.6 巡逻 128
7.8 射击 129
7.8.1 无限速度瞄准 129
7.8.2 实际瞄准 130
7.8.3 机关枪 131
7.9 综合起来 132
7.9.1 并行自动化 132
7.9.2 AI同步 133
7.10 结束语 134
7.10.1 平台游戏 134
7.10.2 射击游戏 135
7.10.4 赛车游戏 136
7.10.3 格斗游戏 136
第8章 战术性人工智能 137
8.1 战术性思维 137
8.1.1 路径寻找 138
8.1.2 团队活动 147
8.2 军事分析:影响图 149
8.2.1 数据结构 149
8.2.2 一些重要测试 150
8.3 表示战术 151
8.4 结束语 154
第9章 脚本 155
9.1.1 简单分析语言 156
9.1 建立脚本语言 156
9.1.2 分析结构化语言 162
9.2 嵌入语言 165
9.2.1 学习Lua 165
9.2.2 Java脚本 171
9.3 基于套接的脚本 173
9.4 结束语 175
第10章 网络编程 176
10.1 Internet的实际工作 176
10.2 从编程人员角度看套接 177
10.3.1 简单TCP客户机 178
10.3 客户机 178
10.3.2 简单UDP客户机 181
10.4 简单TCP服务器 183
10.5 多客户机服务器 185
10.5.1 并发的面向连接服务器 185
10.5.2 迭代的面向连接服务器 187
10.6 UDP服务器 188
10.7 防止套接受阻 189
10.8 设计客户机/服务器游戏 190
10.9 大量用户的多方游戏 191
10.9.1 数据外推 191
10.9.3 空间分割 193
10.9.2 层次消息 193
10.9.4 发送状态改变 194
10.9.5 使用服务器群集 195
10.9.6 动态服务器与勇士综合症 195
10.10 结束语 196
第二部分 引擎编程 198
第11章 二维游戏编程 198
11.1 旧式硬件 198
11.2 二维游戏的数据结构 199
11.3 贴图矩阵 201
地砖表 202
11.4.1 屏幕游戏 203
11.4 二维游戏算法 203
11.4.2 双向与四向卷轴 204
11.4.3 多方引擎 206
11.4.4 视差卷轴 207
11.4.5 各向异性引擎 208
11.4.6 翻页卷轴 210
11.5 特殊效果 211
11.5.1 调色板效果 211
11.5.2 点刻效果 215
11.5.3 灰贴 216
11.5.4 火 216
11.6 结束语 217
第12章 三维管道概述 218
12.1 简介 218
12.2 基本数据类型 219
12.2.1 顶点 219
12.2.2 索引图元 219
12.2.3 颜色 223
12.2.4 纹理贴图 223
12.3 几何格式 224
12.4 一般性图形管道 225
12.4.1 剪取 226
12.4.2 挑选 230
12.4.3 闭合测试 232
12.4.4 确定分辨率 234
12.4.5 变换与灯光 237
12.4.6 光栅化 238
12.5 结束语 240
第13章 室内绘制 241
13.1 一般分析 241
13.2 基于闭合的算法 242
13.3 二叉空间划分算法 243
13.3.1 构造 243
13.3.2 视图相关排序 250
13.3.3 层次式剪取 251
13.3.4 闭合探测 252
13.3.5 绘制 253
13.4 门户绘制 254
13.5 层次式闭合图 258
13.6 混合方法 259
13.6.1 门户/八叉树混合 259
13.6.2 四叉树/BSP混合 259
13.7 硬件辅助闭合测试 260
13.8 结束语 262
14.1 概述 263
第14章 户外算法 263
14.2 户外绘制的数据结构 264
14.2.1 高度域 264
14.2.2 四叉树 265
14.2.3 二叉三角形树 266
14.3 几何贴图 267
14.4 ROAM 269
14.4.1 第一遍:构造变差树 269
14.4.2 第二遍:网格重构 270
14.4.3 优化 272
14.5 块LOD 273
14.6 以GPU为中心的方法 275
14.7 户外视景图 277
14.8 结束语 278
第15章 角色动画 279
15.1 分析 279
15.2 显式与隐式方法 279
15.3 显式动画技术 280
15.3.1 帧动画 281
15.3.2 关键帧动画 281
15.3.3 标记插值 283
15.4 隐式动画概述 286
15.4.1 正向动力学 287
15.4.2 框架动画的数学 288
15.4.3 硬件辅助框架动画 289
15.5 道具处理 292
15.6 关于机车 293
15.7 四肢分解 293
15.8 面部动画 294
15.9 逆向动力学 295
15.9.1 分析逆向动力学 296
15.9.2 循环坐标派生 298
15.10 混合正向与逆向动力学 299
15.11 结束语 299
16.1 第一人称视角射击游戏 300
第16章 制片术 300
16.2 处理惯性 301
16.3 飞行模拟器与四元数 303
16.4 第三人称视角镜头 307
16.5 制片镜头:镜头样式 311
16.6 制片镜头:位置算法 314
16.6.1 选择镜头目标 315
16.6.2 选择相关信息 315
16.6.3 选择视图角度 317
16.7 基于agent的方法 317
16.8 结束语 318
17.1 实际照明 319
第17章 色档 319
17.1.1 简单绘制方程 320
17.1.2 按顶点与按像素照明 322
17.2 灯光贴图 323
17.2.1 扩散贴图 323
17.2.2 镜面贴图 323
17.2.3 使用灯光图的全局照明 324
17.2.4 实现光贴图:DirectX 325
17.2.5 用DirectX实现灯光贴图 326
17.2.6 生成灯光贴图 332
17.3 BRDF 335
17.3.2 阴影 339
17.3.1 平均向量 339
17.4.1 铅笔绘制 347
17.4 非照片真实绘制 347
17.4.2 外形线绘制 348
17.4.3 划线外形 348
17.4.4 单帧色档 349
17.4.5 油画绘制 349
17.5 结束语 350
第18章 纹理贴图 351
18.1 纹理类型 351
18.1.1 纹理贴图 352
18.1.4 球形贴图 353
18.1.2 XYZ贴图 353
18.1.3 圆柱贴图 353
18.1.5 三角形纹理贴图 354
18.2 平铺与贴花 355
18.3 过滤 355
18.4 Mip贴图 356
18.5 纹理优化 357
18.5.1 纹理压缩 359
18.5.2 纹理缓存与分页 359
18.6 多遍方法 360
18.7 多纹理 363
18.8 纹理运算与组合 364
18.10 环境贴图 370
18.9 细节纹理 370
18.11 鼓包贴图 371
18.11.1 浮雕鼓包贴图 371
18.11.2 Dot3鼓包贴图 372
18.12 上光贴图 373
18.13 结束语 374
第19章 微粒系统 375
19.1 微粒系统剖析 375
19.2 微粒数据结束 376
19.2.2 派生微粒 377
19.2.1 一般性微粒系统 377
19.2.3 微粒行为 379
19.2.4 微粒消除 382
19.2.5 绘制微粒 382
19.3 关于体系结构 384
19.4 加速技术 386
19.4.1 避免内存分配与释放 386
19.4.2 空间索引 387
19.4.3 LOD微粒系统 387
19.4.4 基于色档的微粒系统 388
19.5 结束语 388
20.1 自然与细节 389
第20章 有机构绘制 389
20.2 树 390
20.2.1 告示牌 390
20.2.2 基于图像方法 391
20.2.3 平行IBR方法 391
20.2.4 正交IBR方法 392
20.3 草 394
20.3.1 分层草 395
20.3.2 统计分布算法 395
20.4.3 容积云 397
20.4.2 招贴板云 397
20.4.1 天框与园顶 397
20.4 云 397
20.5 海洋 398
20.5.1 逼真海洋几何 398
20.5.2 海洋外观 399
20.5.3 焦散性 399
20.6 结束语 402
第21章 过程性技术 403
21.1 过程性列表 403
21.2 Renderman 404
21.3 实时色档语言 407
21.4 色档程序类型 408
21.3.4 GL2色档语言 408
21.3.2 Cg 408
21.3.3 HLSL 408
21.3.1 当前语言 408
21.4.1 色档程序集合 409
21.4.2 几何效果 409
21.4.3 灯光 410
21.5 纹理贴图 413
21.6 微粒系统 415
21.7 动画 416
21.8 特殊效果 421
21.9 结束语 423
22.1.1 球上的点 424
22.1 点包括测试 424
第22章 几何算法 424
22.1.2 AABB中的点 425
22.1.3 凸多边形的点 426
22.1.4 多边形的点 427
(凹与凸):约当法 427
22.1.5 曲线定理 427
22.1.6 凸实体的点 428
22.1.7 实体的点(约当曲线定理) 428
22.2 光束相交测试 429
22.2.1 光束平面 429
22.2.3 光AABB测试 430
22.2.2 光三角形 430
22.2.4 光球测试 431
22.2.5 光凸形外壳 432
22.2.6 光一般实体(三维DDA) 432
22.3 运动测试 432
22.4 点与三角形集合碰撞(基于BSP) 434
22.5 网格与网格(清扫与修剪方法) 434
22.6 计算凸形外壳 435
22.6.1 二维方案 435
22.6.2 三维方案 436
22.7 三角形简化 436
22.7.3 递进网格 437
22.7.1 顶点重合 437
22.7.2 边重合 437
22.7.4 非保守式三角形简化 438
22.8 结束语 440
第三部分 附录 442
附录A 性能调整 442
附录B OpenGL 458
附录C Direct3D 484
附录D 数学知识 500
附录E 更多读物 510