第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 DirectInput. 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







