第1章 DirectX导论 1
1.1 本书概述 2
1.1.1 编写本书的目的 2
1.1.2 读者对象 3
1.1.3 工具和资源 3
1.2 游戏规划 3
1.2.1 项目Stranded概述 4
1.2.2 设计概述 4
1.2.3 引擎设计概述 5
1.2.4 渲染系统 6
1.2.5 输入系统 6
1.2.6 声音系统 6
1.2.7 物理系统 7
1.2.8 动画系统 7
1.2.9 人工智能(AI)系统 7
1.3 DirectX背景 8
1.3.1 DirectGraphics 8
1.3.2 DirectInput 9
1.3.3 DirectPlay 9
1.3.4 DirectMusic 9
1.3.5 DirectSound 10
1.3.6 安装DirectX 9.0 SDK 10
1.4 手动设置窗口 11
1.4.1 创建和显示Direct3D
窗口 13
1.4.2 使用Direct3D绘制图元 21
1.4.3 Direct3D顶点缓存 22
1.4.4 坐标系 23
1.5 演示程序 24
1.5.1 Lines演示程序 24
1.5.2 Triangle演示程序 32
1.5.3 Quad演示程序 35
1.5.4 Ortho Matrix演示程序 36
1.5.5 Perspective Projection Matrix
演示程序 38
1.5.6 World Matrix演示程序 40
1.5.7 View Matrix演示程序 41
1.5.8 深度测试 42
1.5.9 模板源文件 43
1.5.10 使用DirectX框架设置
Direct3D 47
1.6 总结 48
第2章 游戏:Stranded 49
2.1 游戏规划导论 50
2.2 游戏规划 50
2.1.1 角色模型 50
2.1.2 菜单和界面 51
2.1.3 环境 53
2.1.4 游戏剧本 53
2.3 引擎规划 53
2.3.1 渲染系统 54
2.3.2 输入系统 54
2.3.3 声音系统 55
2.3.4 人工智能 55
2.3.5 数学库 55
2.4 游戏项目概述 55
2.4.1 游戏项目第1部分 56
2.4.2 游戏项目第2部分 56
2.4.3 游戏项目第3部分 56
2.4.4 游戏项目第4部分 56
2.4.5 游戏项目第5部分 56
2.4.6 游戏项目第6部分 56
2.4.7 游戏项目第7部分 57
2.4.8 游戏项目第8部分 57
2.4.9 游戏项目第9部分 57
2.4.10 游戏项目第10部分 57
2.4.11 游戏项目第11部分 57
2.4.12 游戏项目第12部分 58
2.5 游戏项目第1部分:启动
项目 58
2.5.1 游戏源文件 59
2.5.2 引擎源文件和头文件 63
2.5.3 D3DRenderer.cpp 67
2.6 总结 77
第3章 Direct3D光照和物体 79
3.1 Direct3D光照导论 80
3.1.1 光源 80
3.1.2 反射模型 82
3.1.3 光照和绘影技术 85
3.2 使用Direct3D函数创建
物体 87
3.3 在Direct3D中创建光照 91
3.4 游戏项目第2部分:增加对
硬件光照的支持 97
3.5 总结 101
第4章 纹理 103
4.1 Direct3D中的纹理介绍 105
4.2 创建和使用纹理 106
4.2.1 纹理坐标 109
4.2.2 Mipmap 110
4.2.3 纹理质量 111
4.2.4 Textures演示程序 111
4.2.5 多纹理贴图 115
4.2.6 Multitexture贴图演示
程序 116
4.2.7 透明度 121
4.2.8 Transparency演示程序 121
4.2.9 立方体贴图纹理 122
4.3 sprite(子图形) 123
4.3.1 点状sprite 124
4.3.2 Point Sprites演示程序 125
4.4 凸凹贴图 127
4.5 保存纹理 130
4.6 幕外渲染 133
4.7 游戏项目第3部分:增加对
纹理的支持 141
4.8 总结 152
第5章 Direct3D文本和图形用户
界面 153
5.1 在屏幕上显示文本 154
5.2 计算帧率 159
5.3 创建和显示图形用户界面 161
5.3.1 状态显示界面(HUD) 161
5.3.2 GUI演示程序 162
5.3.3 main源文件 178
5.4 游戏项目第4部分:添加文本
和GUI支持 183
5.4.1 游戏源文件 183
5.4.2 游戏项目引擎文件 191
5.5 总结 204
第6章 特效 207
6.1 多采样 207
6.2 雾 211
6.3 细节映射 214
6.4 粒子系统 219
6.5 游戏项目第5部分:增加
特效 230
6.6 总结 237
第7章 基本脚本系统 239
7.1 脚本介绍 239
7.2 属性脚本系统 241
7.3 命令脚本系统 258
7.4 令牌流 273
7.5 其他类型的脚本系统 280
7.6 游戏项目第6部分:增加对
脚本的支持 280
7.7 总结 281
第8章 游戏数学回顾 283
8.1 游戏数学介绍 284
8.2 矢量数学和回顾 285
8.3 矩阵数学 288
8.3.1 矩阵复习 289
8.3.2 Direct3D矩阵 293
8.4 四元组数学 293
8.5 射线数学 296
8.6 平面数学 296
8.6.1 平面复习 297
8.6.2 Direct3D平面 302
8.7 三角形和多边形 303
8.8 物理 304
8.9 游戏项目第7部分:创建
数学库 304
8.10 总结 337
第9章 碰撞检测 339
9.1 碰撞介绍 340
9.2 边界框 340
9.3 边界球 344
9.4 平面碰撞 346
9.5 演示程序 347
9.5.1 边界框碰撞 348
9.5.2 球碰撞 354
9.5.3 平面碰撞 360
9.6 游戏项目第8部分:添加
碰撞检测 366
9.7 总结 376
第10章 输入检测和响应 377
10.1 使用DirectInput 377
10.2 DirectInput演示程序 380
10.3 游戏项目第9部分:添加
输入系统 396
10.4 总结 413
第11章 声音 415
11.1 声音介绍 416
11.1.1 DirectSound 416
11.1.2 DirectMusic 417
11.2 使用DirectMusic和
DirectSound 417
11.3 声音演示程序 422
11.3.1 main源文件 422
11.3.2 演示程序的头文件和
源文件 426
11.4 游戏项目第10部分:添加
声音 432
11.5 总结 441
第12章 模型加载 443
12.1 模型加载介绍 443
12.2 使用X文件 445
12.2.1 X文件格式介绍 445
12.2.2 Material模板 447
12.2.3 Mesh模板 447
12.2.4 MeshMaterialList
模板 448
12.2.5 MeshTextureCoords
模板 448
12.2.6 加载和渲染X模型 449
12.2.7 X Model Loading演示
程序 450
12.3 使用OBJ文件 455
12.3.1 OBJ文件格式介绍 456
12.3.2 OBJ Model Loading演示
程序 458
12.4 使用UMF文件 471
12.4.1 UMF文件格式介绍 471
12.4.2 UMF模型加载演示
程序 473
12.5 游戏第11部分:加载
模型 485
12.5.1 添加模型加载支持 486
12.5.2 加载和渲染等级 487
12.6 总结 511
第13章 模型动画 513
13.1 动画介绍 514
13.2 动画路径 514
13.2.1 直线路径 514
13.2.2 曲线路径 520
13.2.3 圆形路径 526
13.2.4 路线 531
13.3 骨骼动画 543
13.4 X模型动画 550
13.5 游戏项目第12部分:添加
对动画的支持功能 571
13.6 总结 573
第14章 场景管理 575
14.1 场景管理介绍 575
14.2 场景管理技术 576
14.2.1 状态管理 576
14.2.2 闭塞物和平截头体
选择 577
14.2.3 八叉树和四叉树 578
14.2.4 二叉搜索树 579
14.2.5 可能可见度集合 580
14.3 总结 581
第15章 完成游戏引擎设计 583
15.1 日志系统 584
15.2 3D摄像机系统 588
15.3 平截头体选择 595
15.4 游戏项目第13部分:完成
引擎设计 605
15.5 总结 610
第16章 开发游戏:Stranded 611
16.1 本章概述 612
16.2 组织游戏资源 613
16.3 加载和显示最终的游戏 625
16.4 摄像机移动和碰撞检测 634
16.5 游戏元素 641
16.6 代理角色 654
16.7 打包 664
16.8 总结 664
第17章 结束语 667
17.1 最后的思考 667
17.2 下一步的工作 668
附录A 推荐的书籍和网站 669
A.1 推荐的书籍 669
A.1.1 游戏和图形编程 669
A.1.2 通用编程 671
A.1.3 人工智能(AI)和数学 671
A.2 推荐的网站 671
附录B C++入门 675
B.1 C++基础 675
B.2 动态内存和文件输入/输出 683
B.3 结构和类 687
B.4 总结 689
附录C 关于光盘 691
C.1 文件夹 691
C.2 一般系统要求 691