第1部分 概论 2
Chapter 1 游戏设计软件架构 2
1-1 游戏引擎 3
1-2 面向对象(Object-Oriented) 6
1-2-1 对象(Object)、类(Class)与事件(Instance) 7
1-2-2 面向对象程序设计的基本概念 8
1-3 C++程序设计 9
1-3-1 继承(Inheritance) 10
1-3-2 虚拟函数(Virtual Function) 11
1-4 什么是gConsole 14
1-4-1 gConsole的设计概念 15
1-4-2 gConsole的架构与模块 16
1-4-3 gConsole的对象功能与关系 18
1-4-4 gConsole的模块加载 20
1-4-5 gConsole的流程 23
1-5 gConsole架构的应用 26
1-5-1 多重数据格式支持 26
1-5-2 多重模块支持 26
1-5-3 多重游戏形式 26
第2部分 3D图形程序设计 30
Chapter 2 计算机图形学概述 30
2-1 计算机绘图基础观念 31
2-1-1 像素结构 31
2-1-2 3D计算机绘图的架构 33
2-2 3D图形学基础 34
2-2-1 三角函数 35
2-2-2 向量、法向量、外积与内积 36
2-2-3 向量与矩阵 39
2-2-4 物体的放大缩小、移动与旋转 40
2-2-5 3D投影 41
2-2-6 四元数 43
2-2-7 深度缓冲区 45
2-3 3D对象数据结构 45
2-3-1 对象几何结构 46
2-3-2 对象材质贴图 48
2-3-3 对象法向量 49
2-4 二叉树与四元树 50
2-4-1 二叉树 51
2-4-2 四元树(Quadtree) 52
2-5 立体显示原理 53
2-5-1 硬件需求 53
2-5-2 视锥计算 55
Chapter 3 图形模块设计 57
3-1 OpenGL程序设计入门 58
3-1-1 OpenGL概述 58
3-1-2 OpenGL初始化 59
3-1-3 OpenGL常用函数 64
3-1-4 OpenGL环境贴图 78
3-1-5 OpenGL雾 80
3-2 OpenGL立体显示 81
3-2-1 如何激活立体显示 81
3-2-2 立体显示画面绘制 82
3-2-3 立体显示与非立体显示的切换 83
3-3 摄像机设计 83
3-3-1 摄像机类型 83
3-3-2 摄像机路径插值设计 85
3-4 图形模块设计说明 86
3-4-1 图形模块数据定义 87
3-4-2 模型管理 89
3-4-3 材质管理 90
3-4-4 场景管理 92
3-4-5 图形模块加载方式 93
3-5 图形模块实践 94
3-5-1 图形模块的初始化 94
3-5-2 模型与材质数据读取 96
3-5-3 多层材质 99
3-5-4 画面绘制 101
3-5-5 影子 107
3-5-6 图形设置对话框设计 110
3-5-7 图形模块的释放 114
第3部分 控制设备程序设计 118
Chapter 4 控制设备 118
4-1 控制设备简介 119
4-1-1 键盘 119
4-1-2 鼠标 121
4-1-3 游戏杆 123
4-1-4 掌上型控制器 125
4-1-5 方向盘 125
4-1-6 控制设备检测 126
4-2 控制设备程序设计的重要事项 127
4-2-1 客制化设置 128
4-2-2 设备校正与重置 128
4-2-3 力回馈效果 129
Chapter 5 控制模块设计 133
5-1 DirectInput概述 133
5-1-1 DirectInput初始化 133
5-1-2 DirectInput键盘相关函数 134
5-2 控制模块设计说明 139
5-2-1 控制模块数据定义 140
5-2-2 控制模块加载方式 142
5-3 控制模块实践 143
5-3-1 键盘模块的初始化 143
5-3-2 键盘状态读取 145
5-3-3 键盘设置窗口设计 147
5-3-4 键盘模块的释放 151
第4部分 音效程序设计 154
Chapter 6 音效与音乐 154
6-1 声音的基本概念 155
6-1-1 声音的数字化 156
6-1-2 混音 157
6-2 立体声与多声道系统 158
6-2-1 双声道立体声系统 158
6-2-2 5.1声道系统 159
6-2-3 6.1声道与7.1声道系统 160
6-3 MIDI简介 161
6-3-1 什么是MIDI 161
6-3-2 MIDI文件的优缺点 163
6-3-3 MIDI文件与声音文件的转换 163
6-4 3D音效技术简介 165
6-4-1 HRTF 165
6-4-2 EAX ADVANCED HDTM 167
Chapter 7 音效模块设计 169
7-1 DirectSound概述 169
7-1-1 DirectSound对象初始化 169
7-1-2 主缓冲区与次缓冲区 171
7-1-3 主缓冲区设置 172
7-1-4 次缓冲区的取得与播放 173
7-2 Audio Compression Manager 175
7-2-1 什么是Codec 175
7-2-2 WAVEFORMATEX数据结构 176
7-2-3 Codec的使用方法 177
7-2-4 将PCM格式转为ADPCM格式 181
7-3 音效模块设计说明 182
7-3-1 音效模块数据定义 183
7-3-2 音效模块加载方式 183
7-4 音效模块实践 185
7-4-1 音效模块的初始化 185
7-4-2 声音数据的加载 187
7-4-3 音效设置窗口设计 192
7-4-4 音效模块的释放 193
第5部分 游戏设计 198
Chapter 8 游戏制作过程 198
8-1 游戏制作概述 199
8-2 游戏策划 200
8-2-1 游戏的类型与名称 200
8-2-2 游戏概念、功能、画面的描述 200
8-2-3 市场分析 201
8-2-4 成本预算 201
8-3 美术设计 202
8-3-1 美术设计的过程 202
8-3-2 美术设计的注意事项 203
8-4 程序设计 204
8-4-1 程序设计的过程 204
8-4-2 程序设计的注意事项 205
8-5 音乐与音效制作 206
8-5-1 音乐制作 206
8-5-2 音效制作 206
8-5-3 音效制作的注意事项 207
8-6 游戏测试 207
8-6-1 硬件测试 208
8-6-2 操作系统测试 208
8-6-3 游戏端口测试 208
8-6-4 游戏程序漏洞 209
8-6-5 游戏性调整 209
8-6-6 安装程序测试 210
Chapter 9 游戏设计实例——Thunder Blast 213
9-1 初期工作 213
9-1-1 游戏企划书 213
9-1-2 技术研究与评估 215
9-2 模型建制与输出 216
9-2-1 模型建制 217
9-2-2 模型输出 218
9-3 辅助工具开发 219
9-3-1 Wave TableEditor 219
9-3-2 Mesh Table Editor 221
9-3-3 MF Player 223
9-4 主循环 223
9-4-1 gConsole的主循环 224
9-4-2 定时器 225
9-5 碰撞检测 227
9-5-1 球形边界 227
9-5-2 Thunder Blast的碰撞检测 228
9-6 人工智能设计 229
9-6-1 有限状态机(Finite State Machine) 229
9-6-2 Thunder Blast的状态机 231
9-6-3 如何决定在竞技场的移动 232
9-7 回放模式设计 233
9-7-1 回放模式数据记录 233
9-7-2 回放模式运行方式 233
9-8 Thunder Blast模块设计说明 234
9-8-1 Thunder Blast模块数据定义 234
9-8-2 Thunder Blast模块加载方式 236
9-9 Thunder Blast模块实践 237
9-9-1 游戏音像数据的存储与读取 237
9-9-2 Thunder Blast模块初始化 241
9-9-3 游戏画面数据运算 241
9-9-4 碰撞检测 246
9-9-5 人工智能设计 249
9-9-6 回放模式设计 252
9-9-7 Thunder Blast模块释放 255
第6部分 辅助程序与程序技巧 258
Chapter 10 3ds Max输出插件设计 258
10-1 走出插件编写的第一步 259
10-1-1 开始前的建议与注意事项 259
10-1-2 输出插件的程序架构 263
10-2 几何对象数据读取 266
10-2-1 常见对象种类 266
10-2-2 模型数据读取 266
10-2-3 模型数据读取注意事项 270
10-3 材质读取 270
10-3-1 什么是Multi/Sub-Object材质 270
10-3-2 如何使用Multi/Sub-Object材质 271
10-3-3 材质属性读取 275
10-3-4 材质贴图读取 276
10-4 输出插件实践 277
10-4-1 插件概述 278
10-4-2 插件窗口界面 281
10-4-3 材质数据 283
10-4-4 模型数据 285
10-4-5 法向量计算 291
10-4-6 数据存盘 292
10-4-7 如何使插件除错更方便 293
Chapter 11 高效程序设计技巧 297
11-1 缓存滞留 297
11-1-1 CPU的缓存系统 297
11-1-2 缓存线与缓存页 299
11-1-3 完全关联缓存 300
11-1-4 直接映像缓存 300
11-1-5 集合关联缓存 302
11-1-6 数据对齐 303
11-1-7 缓存滞留实例 303
11-2 内嵌函数 308
11-2-1 使用内嵌函数的理由 309
11-2-2 内嵌函数实例 309
11-3 SIMD指令 311
11-3-1 MMX技术 312
11-3-2 MMX技术实例 313
11-3-3 SSE技术 317
11-3-4 SSE技术实例 318
11-4 循环分块 322
11-4-1 循环展开的做法 322
11-4-2 循环分块的使用时机 323
11-4-3 循环分块实例 323
11-5 总结 328