第1部分 Direct3D入门 1
第1章 DirectX简介 1
1.1 什么是DirectX和Direct3D 2
1.1.1 DirectX 2
1.1.2 DirectX SDK 2
1.2 基于COM的DirectX 3
1.2.1 什么是COM对象 3
1.2.2 AddRef()和Release() 5
1.3 小结 6
第2章 一个简单的Direct3D程序 7
2.1.1 对WNDCLASS类赋值并注册 10
2.1 创建一个Windows窗口 10
2.1.2 创建窗口 12
2.2 初始化Direct3D程序 14
2.2.1 创建Direct3D对象并得到Direct3D接口 15
2.2.2 查询显示卡的显示模式GetAdapterDisplayMode() 16
2.2.3 创建Direct3D设备对象并得到接口 17
2.3 处理消息循环 21
2.4 图形显示 22
2.4.1 IDirect3DDevice9::Clear()函数 22
2.4.2 BeginScene()和EndScene() 24
2.4.3 IDirect3DDevice9::Present()函数 25
2.5 结束Direct3D程序 25
2.6 一个简单的Direct3D范例程序 26
2.7 小结 30
第3章 几何模型显示 33
3.1 3D坐标系 34
3.2 Direct3D基础图形表示 35
3.3 使用顶点缓冲区绘制图形 40
3.3.1 创建顶点缓冲区 41
3.3.2 顶点缓冲区图形显示 44
3.4 使用索引缓冲区绘制图形 52
3.5 小结 61
第4章 三维坐标变换 63
4.1 顶点坐标变换和光照流水线概述 64
4.2.1 平移(Translate) 67
4.2 模型几何变换 67
4.2.2 旋转(Rotate) 69
4.2.3 缩放(Scale) 69
4.2.4 复合变换 71
4.3 取景变换 72
4.4 投影变换 74
4.4.1 正交投影 74
4.4.2 透视投影 76
4.5 视区变换 77
4.5.1 视区(D3DVIEWPORT9结构) 77
4.5.2 IDirect3DDevice9::SetViewport() 78
4.6 三维坐标变换程序范例 79
4.7 获得Direct3D坐标变换矩阵 88
4.8 小结 89
第5章 光照 91
5.1 3种不同的光照计算模型 92
5.1.1 环境光(Ambient Light) 92
5.1.2 漫反射(Diffuse Reflection) 93
5.1.3 镜面反射(Specular Reflection) 94
5.2 Direct3D支持的光源类型 94
5.2.1 光源类型 95
5.2.2 光源属性 97
5.3 设置物体表面材质属性 98
5.4.1 激活光照运算 100
5.4 Direct3D中设置光照 100
5.4.2 设置物体表面材质 101
5.4.3 设置方向光、点光源或者聚光灯 101
5.4.4 在多边形顶点信息中增加法线向量 103
5.5 光照程序范例 103
5.6 小结 112
第6章 纹理 113
6.1 基本纹理概念 114
6.1.1 纹理位图 114
6.1.2 纹理坐标:(U,V)坐标 114
6.1.3 分配纹理坐标 115
6.2.1 载入纹理 116
6.2 Direct3D纹理绘制过程 116
6.2.2 分配顶点纹理坐标 121
6.2.3 设置当前渲染纹理IDirect3DDevice9::SetTexture() 122
6.2.4 设置纹理渲染状态IDirect3DDevice9::SetTextureStageState() 123
6.2.5 渲染顶点缓冲区 125
6.3 纹理采样属性 131
6.3.1 纹理过滤(Texture Filtering) 131
6.3.2 纹理寻址(Texture Address) 137
6.4 DXT纹理压缩 141
6.5 小结 142
第7章 用DirectX数据文件绘制三维数据模型 143
第2部分 Direct3D进阶 143
7.1 将三维模型输出为Direct3D数据文件 145
7.2 在Direct3D程序中载入X文件 147
7.2.1 Direct3D多边形网格(ID3DXMESH) 147
7.2.2 载入X文件并生成多边形网格 149
7.3 绘制Direct3D多边形网格 153
7.4 小结 154
第8章 Direct3D图形绘制技巧 155
8.1 深度测试 156
8.2 Alpha混合 159
8.3 Alpha测试 166
8.4 多边形填充模式 167
8.5 Flat渲染和Gouraud渲染 169
8.6 图形反锯齿 171
8.6.1 查询设备是否支持多重采样 171
8.6.2 创建使用多重采样的Direct3D设备 172
8.6.3 启用多重采样的全景图形反锯齿 173
8.7 小结 174
第9章 雾化 175
9.1 雾化计算方法 176
9.2 创建雾化效果 177
9.2.1 激活雾化处理 177
9.2.2 设置雾化计算公式 178
9.2.3 设置雾化参数 178
9.3 基于发散的雾化效果 179
9.4 雾化程序范例 180
9.5 小结 182
第10章 高级纹理应用 183
10.1 多层纹理映射 184
10.1.1 设置纹理层混合方法 186
10.1.2 设置纹理层坐标索引 189
10.1.3 设置渲染纹理 190
10.2 纹理坐标自动生成 197
10.2.1 纹理坐标生成 197
10.2.2 纹理坐标变换 198
10.2.4 纹理坐标自动生成应用 199
10.2.3 选择纹理坐标输出 199
10.3 凹凸纹理映射 207
10.3.1 凹凸纹理像素格式 207
10.3.2 查询是否支持凹凸纹理 211
10.3.3 凹凸纹理状态设置 212
10.3.4 凹凸纹理计算 214
10.3.5 凹凸纹理范例 215
10.4 小结 216
第11章 在Direct3D中显示二维字体 217
11.1 使用ID3DXFont显示字体 218
11.1.1 D3DXCreateFont() 218
11.1.2 ID3DXFont::DrawText() 219
11.1.3 其他相关的ID3DXFont接口函数 221
11.2 小结 221
第3部分 深入了解Direct3D 223
第12章 使用模板缓冲区 223
12.1 模板缓冲区 225
12.1.1 创建模板缓冲区 225
12.1.2 清除模板缓冲区 227
12.1.3 设置模板缓冲区状态参数 228
12.1.4 双面模板缓冲区 230
12.2.2 贴花效果 231
12.2.3 消融、淡入淡出和滑入效果 231
12.2.1 图像合成 231
12.2 使用模板缓冲区创建特殊效果 231
12.2.4 轮廓线和侧影效果 232
12.3 阴影 232
12.4 小结 249
第13章 顶点渲染 251
13.1 顶点渲染基本步骤 253
13.1.1 查询顶点渲染版本 253
13.1.2 创建顶点缓冲区和顶点声明对象 254
13.1.3 创建顶点渲染对象 257
13.1.4 设置顶点渲染函数并绘制图元 260
13.1.5 程序范例 261
13.2 顶点渲染指令简介 269
13.2.1 顶点渲染版本声明 270
13.2.2 顶点元素声明 270
13.2.3 渲染处理 271
13.3 顶点渲染寄存器 275
13.4 顶点渲染寄存器控制 275
13.4.1 目标寄存器元素屏蔽(Masking) 276
13.4.2 源寄存器元素替换(Swizzling) 276
13.4.3 源寄存器修改符(Source Modifiers) 277
13.5 顶点渲染范例1——坐标变换 277
13.6 顶点渲染范例2——光照与纹理映射 282
13.7 小结 292
第14章 像素渲染 293
14.1 像素渲染简介 295
14.1.1 查询像素渲染版本 296
14.1.2 创建像素渲染指令 296
14.1.3 编译并载入像素渲染指令 297
14.1.4 创建像素渲染对象 299
14.1.5 执行像素渲染 299
14.2 像素渲染指令简介 299
14.2.1 版本声明指令 300
14.2.2 常量定义和寄存器声明指令 300
14.2.3 像素渲染处理指令 301
14.2.4 像素输出指令 303
14.4 像素渲染指令控制 304
14.3 像素渲染寄存器 304
14.4.1 指令修改符(Instruction Modifier) 305
14.4.2 源寄存器修改符(Source Modifiers) 305
14.4.3 目标寄存器元素屏蔽(Masking) 305
14.4.4 源寄存器元素替换(Swizzling) 306
14.5 像素渲染范例1——模拟夜视图像 306
14.6 像素渲染范例2——景物模糊处理 317
14.7 小结 329
附录1 D3DFile.h代码 331
附录2 D3DFile.cpp代码 335
附录3 Direct3D渲染状态 361
附录4 顶点元素数据类型D3DDECLTYPE 365