第1章 3D游戏开发的数学基础 1
1.1点和向量 1
1.1.1点 1
1.1.2向量 2
1.2直线与平面 4
1.2.1直线方程 4
1.2.2平面方程 6
1.2.3直线与平面、平面与平面之间的关系 7
1.3矩阵与坐标变换 8
1.3.1矩阵 8
1.3.2二维几何变换 9
1.3.3齐次坐标 11
1.3.4三维几何变换 12
1.3.5投影变换 14
1.3.6裁剪操作 16
1.4坐标系 16
第2章 DirectX快速入门 19
2.1 DirectX概述 19
2.1.1 DirectX的由来 19
2.1.2版本与功能 19
2.2 Direct3D底层结构概述 22
2.2.1硬件抽象层 22
2.2.2硬件模拟层 23
2.2.3系统组成及相互关系 23
2.2.4 Direct3D对象和Direct 3D设备对象 24
2.3 DirectX 9.0的配置和安装 25
2.3.1 DirectX 9.0安装 25
2.3.2选择调试或发布库 28
2.3.3集成开发环境的配置 29
第3章 DirectX程序框架 32
3.1 Win32+C+Direct3 D的基础框架 32
3.1.1创建新项目 32
3.1.2初始化Direct3D 35
3.1.3渲染函数 39
3.1.4结束处理 41
3.1.5消息处理 41
3.1.6程序入口 42
3.2 DXUT框架 44
3.2.1创建一个DXUT框架 44
3.2.2 EmptyProject.cpp文件代码分析 47
3.2.3 DXUT框架的生命周期 54
第4章 文本显示 55
4.1文本绘制流程 55
4.2 Win32程序框架实现 55
4.2.1创建字体对象 56
4.2.2绘制文本 57
4.2.3释放字体对象 58
4.3 DXUT程序框架实现 60
4.3.1创建字体对象 60
4.3.2绘制文本 61
第5章 基本图形的绘制 63
5.1图元 63
5.1.1点列表 64
5.1.2线段列表 64
5.1.3线段条带 64
5.1.4三角形列表 64
5.1.5三角形条带 64
5.1.6三角形扇 65
5.2坐标系 66
5.3灵活顶点格式(FVF) 66
5.4使用顶点缓存绘制图形 67
5.4.1创建顶点缓存 67
5.4.2访问顶点缓存 69
5.4.3使用顶点缓存绘制图形 70
5.5索引缓存 71
5.5.1创建索引缓存 71
5.5.2访问索引缓存 71
5.5.3使用索引缓存绘制图形 72
5.5.4获取顶点和索引缓存信息 73
5.6颜色表示法 73
5.7渲染状态 76
5.7.1着色模式 76
5.7.2多边形填充模式 78
5.8绘制准备 79
5.9 D3DX几何物体 80
5.10实例设计与实现 81
5.10.1基本图元的绘制实例 81
5.10.2使用索引缓存绘制实例 87
第6章 变换 92
6.1摄像机 92
6.2顶点变换 93
6.2.1局部坐标系 94
6.2.2世界坐标系 94
6.2.3观察坐标系 97
6.2.4光源 99
6.2.5投影变换 99
6.2.6友好的投影矩阵 102
6.2.7视口变换 103
6.3光栅化 104
6.4实例 104
6.4.1移动线框正方体实例 104
6.4.2不同颜色的正方体实例 108
第7章 光照和材质 111
7.1真实感图形基本概念 111
7.2 Direct3D中的光照 111
7.2.1光照的组成 111
7.2.2光源 113
7.2.3光源的设定 115
7.3 Direct3D中的材质 116
7.3.1材质定义 116
7.3.2材质设置 116
7.4光照和材质小结 117
7.5光照和材质例子 118
7.5.1光源例子——SimpleLighting 118
7.5.2材质例子——MultiMaterial 126
第8章 纹理映射 140
8.1纹理贴图 140
8.2纹理坐标 141
8.3纹理寻址模式 142
8.3.1重叠纹理寻址模式 143
8.3.2镜像纹理寻址模式 143
8.3.3钳位纹理寻址模式 143
8.3.4边界颜色纹理寻址模式 144
8.3.5一次镜像纹理寻址模式 144
8.3.6设置纹理模式 145
8.4纹理过滤 146
8.4.1最近点采样 146
8.4.2线性纹理过滤 146
8.4.3各向异性纹理过滤 147
8.4.4 Mipmap纹理过滤 147
8.4.5设置纹理过滤方式 148
8.5纹理混合状态 150
8.6纹理实例解析 152
8.6.1纹理过程 152
8.6.2纹理过程流程图 153
8.6.3纹理寻址实例 153
8.6.4纹理过滤方式实例 158
第9章 深度测试和反走样 161
9.1深度缓存与深度测试 162
9.1.1创建深度缓存 162
9.1.2激活深度测试 162
9.1.3设置深度测试函数 163
9.1.4更新深度缓存 163
9.2图形反走样 163
9.2.1检测设备是否支持多重采样 163
9.2.2启用多重采样的全景图形反走样 164
9.3深度测试实例 164
9.4反走样实例 170
第10章 网格(一) 172
10.1 ID3 DXMesh 172
10.2子集和属性缓存 173
10.3绘制 174
10.4邻接信息 174
10.5优化 175
10.6属性表 177
10.7创建一个Mesh 178
10.8例子:从已有的顶点序列中创建一个网格 179
第11章 网格(二) 187
11.1 X文件格式解析 187
11.2读取X文件 192
11.3 X文件的材质 193
11.4读X文件例子 193
11.5渐进网格 197
11.5.1产生一个渐进网格 198
11.5.2 ID3 DXPMesh方法 198
11.6渐进网格例子 199
第12章 混合和模板 203
12.1混合因子 203
12.2混合计算 204
12.2.1启用Alpha混合 205
12.2.2设置Alpha混合因子 205
12.2.3设置Alpha混合方法 205
12.3 Alpha来源 206
12.3.1顶点Alpha 206
12.3.2材质Alpha 206
12.3.3纹理Alpha 206
12.4 Alpha测试 207
12.5 Alpha混合实例 208
12.5.1顶点Alpha实例 208
12.5.2纹理Alpha实例 209
12.6模板 210
12.6.1模板缓存的格式 210
12.6.2模板测试 210
12.6.3模板绘制状态 211
12.6.4模板实例解析 212
第13章 着色器入门 218
13.1着色器概述 218
13.1.1顶点着色器和像素着色器 219
13.1.2手法和渲染路径 219
13.1.3 GLSL与HLSL的比较 220
13.1.4 Cg与HLSL的比较 220
13.2 HLSL的变量 220
13.2.1标量 220
13.2.2向量 220
13.2.3矩阵 221
13.2.4对象 222
13.2.5结构体 223
13.2.6用户自定义类型 223
13.2.7变量类型的转换 223
13.2.8修饰变量的关键字 224
13.2.9变量重组 225
13.3 HLSL的函数 226
13.3.1内置函数 226
13.3.2自定义函数 227
13.4 HLSL基本语法 228
13.4.1数学表达式 228
13.4.2 HLSL的关键字和保留字 229
13.5在Direct3 D中使用HLSL 230
13.5.1简单的实例 230
13.5.2版本的查询 230
第14章 顶点着色器 232
14.1顶点着色器概述 232
14.2顶点声明 233
14.2.1描述顶点声明 233
14.2.2创建和使用顶点声明 236
14.2.3顶点声明与HLSL输入 236
14.3使用顶点着色器 237
14.3.1编写并编译顶点着色器程序 238
14.3.2创建顶点着色器 238
14.3.3设置顶点着色器 238
14.3.4销毁顶点着色器 238
14.4顶点着色器实例1:TeapotVS 239
14.5顶点着色器实例2:渐变动画MorphingVS 243
第15章 像素着色器 250
15.1像素着色器概述 250
15.2使用像素着色器 251
15.2.1测定像素着色器的支持 251
15.2.2编译像素着色器 251
15.2.3创建像素着色器接口 251
15.2.4设置像素着色器 252
15.2.5销毁像素着色器接口 252
15.3 HLSL采样器对象 252
15.4多重纹理 253
15.4.1允许多个纹理 254
15.4.2编写顶点结构 255
15.5例子程序:像素着色器实现多纹理MultiTex 255
第16章 一个游戏实例 262
16.1前言 262
16.2游戏整体架构 262
16.3游戏初始化 263
16.3.1逻辑模块初始化 263
16.3.2渲染模块初始化 264
16.3.3声效模块初始化 265
16.4场景渲染 266
16.5游戏控制 269
16.6声效控制 271
参考文献 273