第1章 计算机图形学基础 1
1.1 3D图形学概述 2
1.1.1 计算机图形学基础 2
1.1.2 计算机图形显示技术 4
1.1.3 计算机图形处理器 4
1.1.4 显卡发展史 6
1.2 向量 11
1.2.1 向量的概念 11
1.2.2 坐标系 12
1.2.3 向量的运算 13
1.3 矩阵 16
1.3.1 矩阵的概念 16
1.3.2 矩阵的运算 17
1.3.3 齐次坐标 20
1.4 图形几何变换 20
1.4.1 图形几何变换的意义 20
1.4.2 二维图形的几何变换 21
1.4.3 三维图形的几何变换 23
1.5 四元数 25
1.5.1 复数理论 25
1.5.2 四元数的运算 26
1.5.3 四元数在图形学中的应用 28
本章小结 30
自测习题 31
课后作业 31
第2章 DirectX基础 33
2.1 DirectX介绍 34
2.1.1 DirectX及其历史 34
2.1.2 DirectX开发库 37
2.1.3 DirectX编程约定和命名规范 37
2.1.4 DirectX环境配置 40
2.2 D3D相关概念 42
2.2.1 HAL和COM 42
2.2.2 D3D中的基础概念 46
2.2.3 空间的概念 47
2.3 T&L渲染流水线 48
2.3.1 T&L的概念 48
2.3.2 空间转换 49
2.3.3 照明与投影 50
2.3.4 投影后的处理 51
2.3.5 渲染中的数据存储 53
2.4 D3D中的图元 54
2.4.1 D3D中图元(Primitive)的概念 54
2.4.2 图元类型 55
2.5 D3D程序基本框架 57
2.5.1 初始化Direct3D程序 58
2.5.2 图形显示 63
本章小结 65
自测习题 65
课后作业 66
第3章 绘制基本图形 67
3.1 绘制基本图形 68
3.1.1 绘制基本图形的完整代码 68
3.1.2 绘制图形的代码分析 72
3.2 索引缓冲绘制矩形 76
3.2.1 使用索引缓冲(Index Buffer)的意义 76
3.2.2 在D3D中如何使用索引缓冲 76
3.3 D3D中的图形学 78
3.3.1 D3D中的图形学基础 78
3.3.2 D3D中的平面 83
3.3.3 D3D中的射线 86
3.3.4 D3D中的图形变换 87
本章小结 89
自测习题 89
课后作业 90
第4章 实现基本光照与纹理 91
4.1 基本纹理绘制 92
4.1.1 纹理的概念 92
4.1.2 D3D的纹理绘制 94
4.2 特殊纹理渲染 99
4.2.1 纹理过滤(Texture Filtering)与采样 99
4.2.2 纹理寻址(Texture Address) 103
4.2.3 纹理包装(Texture Wrapping)与压缩 106
4.3 基本光照模型与表面材质 109
4.3.1 光照模型 109
4.3.2 光源类型 111
4.3.3 光源的属性 112
4.3.4 物体表面材质 114
4.3.5 在Direct3D中实现光照 115
本章小结 117
自测习题 118
课后作业 118
第5章 使用网格模型 119
5.1 使用网格建立基本模型 120
5.1.1 ID3DXMesh接口 120
5.1.2 子集和属性缓冲 121
5.1.3 网格渲染 122
5.1.4 优化网格 122
5.1.5 属性表 123
5.1.6 邻接信息 124
5.1.7 克隆网格 125
5.1.8 创建Mesh(D3DXCreateMeshFVF) 126
5.1.9 创建并渲染Mesh 126
5.2 游戏地形网格 128
5.2.1 高度图的概念 129
5.2.2 高度图的使用 130
5.3 使用模型 134
5.3.1 X文件格式 134
5.3.2 输出.X文件格式 137
5.3.3 在Direct3D程序中载入X文件 139
5.3.4 三维模型动画 141
5.3.5 骨骼动画详解 143
本章小结 148
自测习题 149
课后作业 149
第6章 实现基本游戏特效 151
6.1基 本渲染属性 152
6.1.1 深度缓冲 152
6.1.2 Alpha混合 153
6.1.3 Alpha测试 156
6.1.4 多边形填充和渲染 157
6.1.5 图形反锯齿 158
6.2 多纹理混合 160
6.2.1 多纹理的概念 160
6.2.2 多重纹理的使用 161
6.3 雾化效果 163
6.3.1 D3D中的雾化模型 163
6.3.2 实现雾化效果 165
6.4 2D文字和图形 167
6.4.1 D3D中使用2D文字 167
6.4.2 D3D中使用二维图形 169
6.5 公告板技术 170
6.5.1 公告板技术原理 170
6.5.2 公告板的程序实现 171
6.6 粒子系统 172
6.6.1 粒子系统的概念 172
6.6.2 粒子系统的实现 173
本章小结 178
自测习题 178
课后作业 178
第7章 实现游戏实时阴影 179
7.1 模板技术 180
7.1.1 模板的概念 180
7.1.2 模板的程序实现 181
7.1.3 模板的简单应用 183
7.2 实时阴影技术 188
7.2.1 阴影体 188
7.2.2 实时阴影的技术实现 192
本章小结 199
自测习题 200
课后作业 200
第8章 实现游戏控制 201
8.1 游戏控制概述 202
8.1.1 传统的控制 202
8.1.2 DirectIput 203
8.2 DirectX键盘控制 207
8.2.1 初始化键盘对象 207
8.2.2 设置键盘设备状态 208
8.2.3 获取键盘输入 209
8.2.4 释放设备 212
8.3 DirectX鼠标控制 212
8.3.1 使用鼠标设备的流程 212
8.3.2 使用鼠标控制 217
8.4 游戏控制综合应用 221
8.4.1 游戏角色控制 221
8.4.2 摄像机控制 226
本章小结 228
自测习题 229
课后作业 229
第9章 实现游戏音乐与音效 231
9.1 DirectMusic对音频文件的支持 232
9.1.1 游戏音乐音效概述 232
9.1.2 DirectMusic的特点 233
9.1.3 DirectMusic的编程步骤 234
9.2 DirectSound对音频文件的支持 238
9.2.1 DirectSound的特点 238
9.2.2 DirectSound的编程步骤 239
9.3 DirectShow对流媒体的支持 246
9.3.1 DirectShow的工作原理 246
9.3.2 DirectShow的编程步骤 250
9.3.3 DirectShow播放AVI动画 252
9.4 3D音效的实现 253
9.4.1 3D音效模型 254
9.4.2 3D音效实现 255
本章小结 256
自测习题 256
课后作业 257
第10章 建立基本游戏场景 259
10.1 CGameApp 260
10.2 CMath 262
10.3 CBoundingBox 263
10.4 CCamera 265
10.5 CMesh 267
10.6 CMP3 268
10.7 CParticleSystem 269
10.8 CShadowVolume 272
10.9 CSkyBox 273
10.10 CTerrain 274
10.11 CUnit 275
10.12 CSkinMesh 277
本章小结 282
第11章 HLSL语言基础 283
11.1 HLSL基本概念 284
11.1.1 着色器和高级语言 284
11.1.2 VertexShader和PixelShader 285
11.1.3 HLSL工作模型 286
11.1.4 VertexShader和PixelShader的版本 287
11.1.5 Technique和Pass 288
11.2 HLSL中的变量 288
11.2.1 变量类型 289
11.2.2 变量类型的转换 292
11.2.3 变量的其他修饰用关键字 293
11.2.4 变量重组 294
11.3 HLSL中的基础语法 295
11.3.1 HLSL的函数 295
11.3.2 HLSL中的内置函数 296
11.3.3 数学表达式 296
11.3.4 依赖于不同版本的变量类型 297
11.3.5 HLSL关键字和保留字表 298
本章小结 299
自测习题 299
课后作业 299
本章附录函数定义表 299
第12章 Direct3D与HLSL 309
12.1 HLSL编码入门 310
12.1.1 一个简单的示例 310
12.1.2 获取图形硬件所支持的Shader版本 311
12.1.3 编译HLSL代码 313
12.1.4 定义technique和pass 316
12.1.5 修改渲染状态 316
12.2 HLSL中的语义 317
12.2.1 语义的概念 317
12.2.2 Direct3D中的FVF与多流 318
12.2.3 语义的应用 319
12.2.4 输入/输出语义的其他相关内容 320
12.2.5 语义的作用 322
12.2.6 使用语义的原因 322
12.3 HLSL中的释义 323
12.3.1 释义的概念 323
12.3.2 获取释义信息 325
本章小结 326
自测习题 327
课后作业 327
第13章 HLSL基本应用 329
13.1 D3D与HLSL的交互 330
13.1.1 在D3D中调用HLSL代码 330
13.1.2 与变量交互的方法 331
13.1.3 获取变量的所有信息 335
13.1.4 枚举出代码中的所有变量 338
13.1.5 获取Technqiue和Pass的信息 340
13.2 基本渲染效果 344
13.2.1 顶点变换 344
13.2.2 顶点颜色 348
13.2.3 使用纹理 349
13.2.4 光照效果 351
本章小结 359
自测习题 359
课后作业 359
第14章 寻路算法 361
14.1 图论基础 362
14.1.1 图的定义 362
14.1.2 图的表示结构 363
14.2 基本寻路算法 365
14.2.1 深度优先算法 365
14.2.2 广度优先算法 370
14.3 A*算法 376
14.3.1 A*算法的思想 376
14.3.2 A*算法的逻辑 377
14.3.3 A*算法的实现 379
本章小结 391
自测习题 392
课后作业 392
第15章 人工智能 393
15.1 人工智能概述 394
15.1.1 人工智能的概念及其应用 394
15.1.2 游戏中的人工智能 396
15.1.3 游戏中人工智能的系统结构 398
15.2 有限状态机 399
15.2.1 电脑角色的行为 399
15.2.2 有限状态机 401
15.2.3 模糊状态机 403
15.3 博弈论 403
15.3.1 博弈问题概述 403
15.3.2 完全信息静态博弈 404
15.3.3 完全信息动态博弈 406
15.3.4 不完全信息静态博弈 407
15.3.5 不完全信息动态博弈 408
15.3.6 博弈论的应用 409
本章小结 416
自测习题 416
课后作业 417
第16章 物理模拟 419
16.1 相关物理概念 420
16.1.1 基本物理单位 420
16.1.2 主要物理单位 422
16.2 物理环境模拟 427
16.2.1 动量守恒与传递 427
16.2.2 模拟重力场中的运动 429
16.2.3 模拟摩擦力 432
本章小结 435
自测习题 436
课后作业 436
第17章 碰撞检测 437
17.1 2D环境下的碰撞 438
17.1.1 简单的平面碰撞反应 438
17.1.2 2D物体间的精确碰撞响应 441
17.2 3D环境下的碰撞 448
17.2.1 碰撞检测概述 448
17.2.2 包围球碰撞检测 448
17.2.3 AABB算法 450
本章小结 451
自测习题 452
课后作业 452
第18章 LOD地形渲染 453
18.1 地表的四叉树分割与数据存储 454
18.1.1 四叉树概念及与LOD的关系 454
18.1.2 四叉树的地表分割原理 454
18.1.3 四叉树分割数据的存储 454
18.1.4 四叉树的实现 455
18.2 平截头体对场景的分割 456
18.2.1 平截头体的剔除原理 456
18.2.2 边界球体的剔除原理 456
18.2.3 平截头体的实现 458
18.2.4 四叉树的剔除 458
18.3 视点距离相关的结点评价 462
18.3.1 结点评价系数与结点分割的LOD等级 462
18.3.2 LOD的实现 463
18.4 地形结点渲染网格的生成 464
18.5 LOD地形渲染实现 466
本章小结 469
自测习题 469
课后作业 470