第1章 DirectX与游戏编程简介 1
1.1 DirectX介绍 1
1.2 OpenGL、XNA与WPF 2
1.2.1 OpenGL 2
1.2.2 XNA 2
1.2.3 WPF 3
1.3 DirectX功能组件 4
1.3.1 DirectX Graphics 5
1.3.2 DirectX Audio 5
1.3.3 DirectX Input 6
1.3.4 其他组件 6
1.4 DirectX与游戏开发 7
1.5 DirectX安装与配置 7
1.5.1 系统配置要求 7
1.5.2 DirectX安装 8
1.5.3 选择调试库和发布库 8
1.5.4 在Visual Studio IDE中配置DirectX 9
1.5.5 浏览DirectX SDK示例程序 10
1.6 小结 11
练习 12
第2章 预备知识 13
2.1 数学基础 13
2.1.1 向量 13
2.1.2 矩阵 15
2.1.3 平面 18
2.2 Win32 API编程基础 19
2.2.1 开发Win32 API程序的基本步骤 20
2.2.2 Win32 API程序解析 23
2.3 COM使用基础 28
2.3.1 COM对象概述 28
2.3.2 创建COM对象 30
2.3.3 使用COM接口 30
2.3.4 管理COM对象的生命期 31
2.4 小结 31
练习 32
第3章 Direct3D编程入门 33
3.1 Direct3D体系结构 33
3.1.1 硬件抽象层 33
3.1.2 软件参考层 33
3.1.3 Direct3D系统集成 34
3.2 Direct3D表面 34
3.2.1 IDirect3DSurface接口 35
3.2.2 宽度和间距 35
3.2.3 像素格式 35
3.2.4 交换链与表面翻转 35
3.3 Direct3D设备对象 36
3.3.1 Direct3D设备类型 36
3.3.2 顶点运算 37
3.3.3 创建Direct3D设备对象 37
3.3.4 设备丢失与恢复 41
3.4 最简单的Direct3D程序 41
3.4.1 程序基本结构 42
3.4.2 常用宏定义 42
3.4.3 初始化Direct3D 42
3.4.4 渲染图形 43
3.4.5 结束Direct3D程序 45
3.5 Direct3D 9Ex扩展编程 45
3.5.1 WDDM和Direct3D 9Ex介绍 45
3.5.2 Direct3D 9Ex初始化 46
3.6 小结 47
练习 47
第4章 基本图元和文本绘制 48
4.1 Direct3D坐标系 48
4.2 Direct3D基本图元 48
4.3 Direct3D中的颜色表示 49
4.3.1 使用D3DCOLOR定义颜色 50
4.3.2 使用D3DCOLORVALUE定义颜色 50
4.3.3 使用D3DXCOLOR定义颜色 50
4.4 使用顶点缓存绘制图形 51
4.4.1 顶点结构和顶点格式 51
4.4.2 内存池类型 52
4.4.3 创建顶点缓存 52
4.4.4 渲染顶点缓存图形 54
4.5 使用索引缓存绘制图形 55
4.5.1 创建顶点缓存和索引缓存 56
4.5.2 使用索引缓存绘制图形 57
4.6 二维文本绘制 58
4.6.1 创建ID3DXFont对象 58
4.6.2 使用ID3DXFont接口绘制二维文本 59
4.6.3 帧速率计算 60
4.7 渲染状态 60
4.7.1 着色模式 61
4.7.2 多边形填充模式 61
4.8 图形反锯齿 62
4.8.1 查询设备是否支持多重采样 62
4.8.2 创建使用多重采样的Direct3D设备对象 62
4.8.3 启用多重采样 63
4.9 小结 63
练习 63
第5章 顶点坐标变换 64
5.1 顶点坐标变换和光照流水线概述 64
5.2 矩阵类型 65
5.2.1 D3DMATRIX 65
5.2.2 D3DXMATRIX 65
5.2.3 D3DXMATRIXA16 67
5.3 坐标变换 67
5.3.1 世界变换 67
5.3.2 观察变换 70
5.3.3 投影变换 71
5.3.4 视区变换 72
5.4 坐标变换示例程序 72
5.5 小结 74
练习 75
第6章 光照 76
6.1 光照计算模型 76
6.1.1 环境光 76
6.1.2 漫反射光 76
6.1.3 镜面反射光 77
6.1.4 自发光 77
6.2 光源 78
6.2.1 光源类型 78
6.2.2 光源属性 79
6.2.3 设置与启用光源 80
6.2.4 对光源的几点说明 81
6.3 材质 81
6.4 光照和材质示例程序 82
6.5 对光照和材质的几点说明 84
6.6 小结 84
练习 84
第7章 纹理映射 85
7.1 纹理元素与纹理坐标 85
7.2 创建纹理对象 85
7.3 纹理过滤方式 86
7.3.1 最近点采样 86
7.3.2 线性纹理过滤 86
7.3.3 各向异性纹理过滤 87
7.3.4 多级渐进纹理过滤 87
7.4 纹理寻址模式 88
7.4.1 重叠纹理寻址模式 89
7.4.2 镜像纹理寻址模式 89
7.4.3 夹取纹理寻址模式 90
7.4.4 边框颜色纹理寻址模式 90
7.5 纹理映射示例程序 91
7.6 纹理阶段混合状态 92
7.6.1 纹理阶段混合状态设置 92
7.6.2 纹理阶段混合状态示例程序 93
7.7 多层纹理映射 94
7.8 小结 96
练习 97
第8章 Direct3D渲染技巧 98
8.1 Alpha混合 98
8.1.1 Alpha混合原理 98
8.1.2 Alpha混合系数 99
8.1.3 Alpha混合示例 99
8.2 雾化效果 101
8.2.1 雾化效果实现原理 101
8.2.2 基于范围的雾化 102
8.2.3 雾化效果示例程序 103
8.2.4 对雾化效果的几点说明 104
8.3 模板测试 104
8.3.1 模板测试过程 104
8.3.2 模板缓存 105
8.3.3 模板测试设置 106
8.3.4 平面阴影 107
8.4 小结 110
练习 110
第9章 网格模型 111
9.1 网格模型基础 111
9.1.1 几何信息 111
9.1.2 网格子集和属性缓存 112
9.1.3 邻接信息 113
9.1.4 绘制网格模型 113
9.1.5 克隆网格模型 114
9.1.6 创建网格模型 114
9.2 简单几何体和三维文本网格模型 115
9.2.1 创建简单几何体网格模型 115
9.2.2 创建三维文本网格模型 116
9.3 文件网格模型 117
9.3.1 模型文件格式 117
9.3.2 使用.X文件网格模型 118
9.3.3 对网格模型的几点说明 121
9.4 网格模型优化 122
9.4.1 优化函数和优化方式 122
9.4.2 属性表 123
9.4.3 其他网格模型处理函数 124
9.4.4 网格优化示例程序 125
9.5 文件网格模型类 126
9.5.1 CXFileMesh类的定义 126
9.5.2 CXFileMesh的实现 127
9.5.3 使用CXFileMesh类渲染文件网格模型 129
9.6 物体空间状态的控制 130
9.7 蒙皮骨骼动画网格模型 132
9.7.1 骨骼动画基本原理 133
9.7.2 图形混合技术 134
9.7.3 蒙皮骨骼动画网格模型类介绍 136
9.8 小结 141
练习 141
第10章 点精灵与粒子系统 143
10.1 粒子系统基本原理 143
10.2 粒子和点精灵 144
10.2.1 点精灵顶点结构和顶点格式 144
10.2.2 点精灵的大小 144
10.2.3 点精灵的纹理坐标 145
10.2.4 点精灵的渲染 145
10.3 粒子系统的具体实现 146
10.3.1 粒子结构与顶点结构 146
10.3.2 粒子系统类的定义 146
10.3.3 粒子系统的创建和销毁 147
10.3.4 粒子系统的更新 148
10.3.5 粒子系统的渲染 150
10.3.6 粒子系统示例程序 152
10.4 雪景模拟 154
10.4.1 雪花粒子结构 154
10.4.2 雪花粒子运动的控制 154
10.4.3 渲染雪花粒子 155
10.5 小结 156
练习 156
第11章 基本虚拟场景构造 157
11.1 三维地形模拟 157
11.1.1 基本地形网格的构造 157
11.1.2 高度图与高程数据 161
11.1.3 地形上任意点高度的计算 162
11.1.4 法线的计算 163
11.1.5 地形模拟示例程序 164
11.2 天空绘制 165
11.2.1 矩形天空 165
11.2.2 天空盒 166
11.2.3 球形天空 167
11.3 虚拟摄像机与虚拟场景漫游 168
11.3.1 虚拟场景漫游基本原理 168
11.3.2 CCamera类 169
11.3.3 虚拟场景漫游的实现 172
11.4 小结 173
练习 174
第12章 HLSL高级着色语言 175
12.1 数据类型 175
12.1.1 标准数据类型 175
12.1.2 向量 176
12.1.3 矩阵 177
12.1.4 复杂数据类型 179
12.1.5 变量的前缀 181
12.2 运算符和语句 181
12.2.1 运算符 181
12.2.2 类型转换 182
12.2.3 语句 182
12.3 函数 183
12.3.1 自定义函数 183
12.3.2 内置函数 183
12.4 语义 183
12.5 编写HLSL着色器 185
12.5.1 添加文件 185
12.5.2 编写着色器代码 185
12.5.3 编译着色器代码 186
12.6 小结 187
练习 187
第13章 着色器和效果 188
13.1 顶点着色器 188
13.1.1 顶点着色器介绍 188
13.1.2 顶点声明 189
13.1.3 使用HLSL顶点着色器的基本步骤 190
13.1.4 使用顶点着色器实现基本光照模型 194
13.2 像素着色器 199
13.2.1 像素着色器介绍 199
13.2.2 使用像素着色器的基本步骤 199
13.2.3 使用像素着色器实现纯亮度显示 202
13.3 效果 203
13.3.1 效果介绍 203
13.3.2 创建效果 203
13.3.3 使用效果 205
13.3.4 多手法效果 206
13.3.5 使用效果管理状态 209
13.4 小结 212
练习 212
第14章 DirectX Audio音频编程 214
14.1 DirectX Audio介绍 214
14.1.1 DirectX Audio技术架构 214
14.1.2 DirectX Audio支持的音频格式 215
14.2 XACT 216
14.2.1 XACT介绍 216
14.2.2 使用XACT GUI制作声音 218
14.2.3 XACT初始化 219
14.2.4 使用XACT播放声音 221
14.2.5 使用XACT播放流声音 225
14.2.6 代码驱动的XACT API介绍 229
14.3 XAudio2 229
14.3.1 XAudio2介绍 229
14.3.2 XAudio2初始化 231
14.3.3 使用XAudio2加载音频数据 232
14.3.4 使用XAudio2播放声音 235
14.4 小结 237
练习 237
第15章 DirectInput与场景交互 239
15.1 DirectInput初始化 239
15.1.1 创建DirectInput对象 239
15.1.2 枚举输入设备 240
15.1.3 创建Directlnput设备对象 241
15.1.4 设置设备对象 241
15.1.5 获取输入设备的访问权 243
15.2 键盘输入处理 244
15.3 鼠标输入处理 246
15.4 游戏杆输入处理 249
15.5 拾取 251
15.5.1 拾取射线的计算 252
15.5.2 拾取射线的变换 253
15.5.3 拾取射线与物体交点的计算 254
15.5.4 拾取示例程序 254
15.6 小结 255
练习 255
第16章 DXUT程序框架 256
16.1 DXUT程序框架剖析 256
16.1.1 DXUT框架文件组成和功能 256
16.1.2 DXUT框架回调函数 257
16.2 使用DXUT框架 260
16.2.1 实现并设置回调函数 260
16.2.2 初始化DXUT 261
16.2.3 其他DXUT设置 261
16.2.4 创建窗口 262
16.2.5 创建Direct3D设备 262
16.3 使用DXUT绘制文本 263
16.4 使用DXUT控件 265
16.4.1 初始化对话框 265
16.4.2 渲染控件 266
16.4.3 处理控件事件 267
16.4.4 释放对话框 267
16.5 综合实例 268
16.5.1 生成程序框架 269
16.5.2 构造基本场景 269
16.5.3 添加背景音乐 271
16.5.4 添加输入处理 271
16.5.5 实现场景漫游 272
16.6 小结 273
练习 274
附录A Direct3D 10与Direct3D 11介绍 275
参考文献 282