第一部分 数学基础 3
第1章 向量 3
1.1向量的概念 3
1.1.1向量的表示 3
1.1.2左手坐标系和右手坐标系 3
1.2向量的长度及规范化 4
1.2.1向量长度 4
1.2.2向量的标准化 4
1.3向量的加法和减法 5
1.4数乘 5
1.5点积 6
1.6叉积 6
1.7齐次坐标 7
1.8 XNA向量 7
1.8.1 SIMD编程简介 8
1.8.2 XNA向量类型 8
1.8.3 XNA向量操作 9
1.9本章小结 12
第2章 矩阵 13
2.1矩阵定义 13
2.1.1定义 13
2.1.2矩阵相等、矩阵加法和矩阵数乘 13
2.2矩阵乘法 14
2.2.1定义 14
2.2.2向量-矩阵乘法 14
2.3矩阵的转置 15
2.4单位矩阵 15
2.5逆矩阵 16
2.5.1定义 16
2.5.2逆矩阵的用途 16
2.6 XNA矩阵 17
2.6.1 XNA矩阵类型 17
2.6.2 XNA矩阵操作 18
2.7本章小结 21
第3章 矩阵变换 23
3.1基本变换 23
3.1.1平移变换 23
3.1.2旋转变换 24
3.1.3缩放变换 26
3.2 XNA矩阵变换函数 27
3.3几何变换的组合 28
3.4本章小结 29
第二部分 Direct3D基础 33
第4章 Direct3D 11概述 33
4.1 DirectX概述 33
4.1.1 DirectX历史及版本 33
4.1.2 COM 36
4.2 Direct3D 11新特性 37
4.3 Direct3D 11与OpenGL 4.0比较 38
4.4 Direct3D 11与Direct3D 10渲染管线比较 38
4.5着色器概述 39
4.6各个管线阶段 41
4.7本章小结 42
第5章 初始化Direct3D 43
5.1一些准备工作 43
5.1.1三维空间及其变换 43
5.1.2资源 47
5.1.3交换链和页面切换 52
5.1.4深度缓存 52
5.1.5多重采样 54
5.2初始化Direct3 D 54
5.2.1初始化设备 54
5.2.2描述交换链(Swap Chain) 55
5.2.3创建设备、交换链以及立即执行上下文 57
5.2.4创建并绑定渲染目标视图 58
5.2.5创建视口 59
5.3本章小结 60
第6章 HLSL入门 61
6.1 Effect文件 62
6.1.1什么是Effect 62
6.1.2 Effect文件结构 62
6.1.3外部变量和常量缓存 64
6.1.4输入输出结构 64
6.1.5着色器主函数 65
6.1.6 Technique 65
6.1.7通道 65
6.2高级着色语言 66
6.2.1变量 67
6.2.2语义 75
6.2.3函数声明 76
6.3 Effect框架 77
6.3.1配置Effect框架 77
6.3.2读取Effect文件 78
6.3.3创建ID3DEffect对象 79
6.3.4 C++程序与Effect的交互 80
6.3.5使用Effect进行绘制 81
6.4本章小结 81
第7章 Direct3D 11中的绘制 82
7.1三维图元 82
7.2三角形的绘制 83
7.2.1三角形的定义 83
7.2.2输入布局 84
7.2.3编译顶点着色器及创建顶点布局对象 85
7.2.4创建顶点缓存 86
7.2.5指定图元类型 86
7.2.6创建像素着色器 87
7.2.7绘制 88
7.3基于Effect框架的立方体绘制 89
7.3.1顶点缓存的缺陷 89
7.3.2索引缓存的概念 90
7.3.3着色器代码 91
7.3.4绘制立方体 92
7.4本章小结 93
第8章 颜色 94
8.1 Direct3D中的颜色表示 94
8.2顶点颜色 95
8.3着色处理 95
8.4实例程序:Color Cube 96
8.5本章小结 99
第9章 光照 100
9.1光照与材质 100
9.1.1光照 100
9.1.2材质 100
9.1.3光照模型 100
9.2顶点法线 101
9.3光照类型 102
9.3.1环境光 102
9.3.2漫射光 103
9.3.3镜面光 104
9.3.4 Phong光照模型 105
9.4光源类型 106
9.4.1方向光源 106
9.4.2点光源 107
9.4.3聚光灯 107
9.5光照实例 108
9.5.1光源及材质结构定义 108
9.5.2平行光的实现 110
9.5.3点光源的实现 111
9.5.4聚光灯的实现 113
9.6本章小结 114
第10章 纹理 116
10.1纹理坐标 116
10.2创建并使用纹理 117
10.3纹理过滤器 118
10.4纹理采样 120
10.5纹理寻址模式 121
10.6实例:木箱 123
10.7本章小结 126
第11章 混合 127
11.1开启混合 127
11.2混合公式的设置 128
11.2.1名词解释 128
11.2.2混合因子 129
11.2.3混合操作符 130
11.3应用颜色混合 130
11.4本章小结 133
第12章 模板 134
12.1建立缓存区 134
12.2建立缓存视图 135
12.3创建模板描述和模板状态对象 136
12.4使用模板缓存 137
12.5本章小结 139
第三部分 Direct3D应用 143
第13章 相机设计 143
13.1基本概念 143
13.2 Camera设计 144
13.3 Camera工作原理 146
13.3.1摄像机在初始位置绕Up轴旋转 146
13.3.2摄像机在初始位置绕Right轴旋转 147
13.3.3摄像机在指定位置旋转 148
13.3.4摄像机平移 149
13.4 Camera的实现 149
13.4.1倾斜、偏航、滚转 149
13.4.2移动 150
13.4.3整合 151
13.5 Camera的使用 151
13.6本章小结 153
第14章 网格 154
14.1 OBJ格式介绍 154
14.1.1 OBJ文件 154
14.1.2 OBJ关键字 154
14.1.3 mtl文件 156
14.2 OBJ模型导入 158
14.2.1模型文件解析 158
14.2.2坐标系转换 160
14.2.3绘制 160
14.3本章小结 162
第15章 粒子系统 163
15.1粒子系统的工作原理 163
15.1.1模拟阶段 164
15.1.2渲染阶段 164
15.2粒子系统的设计 165
15.2.1粒子的顶点结构 165
15.2.2粒子的运动 165
15.2.3随机数 166
15.2.4混合 169
15.3粒子系统的实现 169
15.3.1产生/销毁粒子 169
15.3.2模拟更新 172
15.4本章小结 175
第16章 拾取 177
16.1拾取流程 177
16.2求拾取射线 178
16.2.1屏幕坐标变换到投影坐标 178
16.2.2投影坐标转换到观察坐标 179
16.3射线-物体相交判断 181
16.3.1将射线变换到模型空间 181
16.3.2射线-三角形相交判断 181
16.4本章小结 183
第四部分 Direct3D 11渲染管线及高级主题 187
第17章 输入装配阶段 187
17.1 IA阶段的步骤 187
17.1.1创建输入缓存 187
17.1.2创建输入布局对象 191
17.1.3将输入对象绑定到管线的IA阶段 193
17.1.4指定图元拓扑类型 194
17.1.5调用绘制方法 195
17.2图元拓扑类型 196
17.2.1基本图元类型 196
17.2.2带邻接信息的图元类型 197
17.3不需要输入缓存的IA阶段 198
17.3.1实例 198
17.3.2 IA阶段系统生成值 200
17.4本章小结 201
第18章 顶点着色阶段 202
18.1顶点着色器的设置步骤 202
18.2进行空间变换 204
18.2.1局部空间和世界空间 204
18.2.2观察空间 205
18.2.3投影空间 206
18.3例程:人物波动 209
18.4例程:顶点光照 210
18.5本章小结 213
第19章 曲面细分技术 214
19.1 Direct3D 11中的曲面细分 214
19.2新的渲染阶段 215
19.2.1外壳着色器阶段 216
19.2.2曲面细分阶段 220
19.2.3域着色器阶段 221
19.3实例1:简单的曲面细分的例子 224
19.4实例2:利用曲面细分实现置换纹理映射 228
19.4.1凹凸映射 228
19.4.2实例说明 231
19.5本章小结 236
第20章 几何着色阶段 237
20.1几何着色器的设计 238
20.2几何着色器的使用 240
20.3本章小结 241
第21章 流输出阶段和光栅化阶段 242
21.1流输出阶段 242
21.1.1设置流输出的元素并和几何着色器绑定 242
21.1.2设置输出目标 243
21.2光栅化阶段 244
21.2.1裁剪矩形 244
21.2.2光栅化状态 245
21.3本章小结 246
第22章 绘制阶段 247
22.1像素着色阶段 247
22.1.1像素着色器的结构 247
22.1.2像素着色器的调用 248
22.1.3像素着色器的应用 248
22.2合并输出阶段 250
22.2.1深度/模板测试 250
22.2.2颜色混合 251
22.2.3深度偏移 251
22.3本章小结 254
第23章 计算着色器 255
23.1计算着色器的介绍 255
23.2计算着色器线程和线程组 256
23.3计算着色器状态 258
23.4实例:分形算法 259
23.5本章小结 262
附录A Windows编程基础 263
A.1语言的选择 263
A.2“类”和类 264
A.3入口函数 264
A.4注册窗口“类”并创建窗口 265
A.5显示窗口并处理消息队列 266
A.6响应消息 266
附录B XNA数学库 269
B.1编译指令 269
B.2常量 269
B.3宏命令 270
B.4结构和类型 271
B.5函数 273
B.5.1颜色函数 273
B.5.2转换函数 274
B.5.3标量函数 274
参考文献 276