第1章 DirectX基础 1
1.1 DirectX API 2
1.1.1 DirectDraw 2
1.1.2 Direct3D 2
1.1.3 DirectMusic 3
1.1.4 DirectSound 3
1.1.5 DirectPlay 3
1.1.6 DirectInput 4
1.1.7 DirectSetup 4
1.2 Direct3D作为DirectX API时的工作方式 4
1.3 使用DirectX API所应了解的知识 5
1.3.1 什么是COM对象 5
1.3.2 AddRef和Release方法的用途 6
1.3.3 C和C++调用DirectX方法的差别 6
1.3.4 返回代码 7
1.5 结束语 8
1.4 Direct3D Framework 8
第2章 Direct3D程序中的Windows代码 9
2.1 Windows代码的组织方法 9
2.1.1 用于指定所包含文件和定义CUID的代码 10
2.1.2 CMyD3DApplication和CD3DApplication类 11
2.1.3 建立主窗口和消息处理 14
2.1.4 建立消息处理循环 16
2.1.5 建立应用程序的窗口进程 21
2.2 目前的程序代码 28
2.3 结束语 29
第3章 创建Direct3D程序的DirectDraw 30
3.1 DirectDraw和多显示器 31
3.2 建立DirectDraw 32
3.3 创建保存所列举设备的数据结构 33
3.4 列举DirectDraw设备 34
3.5 创建DirectDraw对象 38
3.6 列举显示模式 39
3.7 列举Direct3D设备 41
3.8 选择Direct3D设备 44
3.9 利用CD3DFramework7对象初始化DirectDraw 46
3.10 设定协作级别 52
3.11 创建表面 54
3.11.1 前缓冲区、后缓冲区和裁剪程序 55
3.11.2 全屏幕缓冲区 55
3.11.3 窗口模式缓冲区 59
3.12 界面的翻动 62
3.13 目前的程序代码 64
3.14 结束语 65
第4章 用于DirectX应用程序的Direct3D 66
4.1 Direct3D Immediate Mode的对象和接口 66
4.1.1 DirectDraw对象 66
4.1.2 DirectDrawSurface对象 66
4.1.3 Direct3DDevice对象 67
4.2 创建Immediate Mode的应用程序 68
4.1.4 Direct3DVertexBuffer对象 68
4.2.1 步骤1:初始化应用程序 70
4.2.2 步骤2:判定DirectX的版本 70
4.2.3 步骤3:列举可用的Direct3D设备 71
4.2.4 步骤4:选择Direct3D设备 71
4.2.5 步骤5:获取IDirectDraw7接口 72
4.2.6 步骤6:从IDirectDraw7获取IDirect3D7接口并创建Direct3D设备 73
4.2.7 步骤7:创建深度缓冲区 82
4.3 目前的程序代码 87
4.4 结束语 88
第5章 Direct3D顶点及转换和照明流水线 89
5.1 T L流水线概述 89
5.1.1 世界转换 90
5.1.2 视图转换 91
5.1.3 照明 92
5.1.4 投影转换和观察平截面 92
5.1.5 裁剪 93
5.1.6 除以w或非均匀 94
5.1.7 视口缩放 94
5.2 顶点 94
5.2.1 灵活的顶点格式 95
5.2.2 左手和右手坐标系 96
5.2.3 跨距顶点格式 96
5.2.4 顶点缓冲区 98
5.3 建立T L流水线矩阵 99
5.3.1 世界矩阵 99
5.3.2 观察矩阵 104
5.3.3 投影矩阵 104
5.4 视口 105
5.4.1 创建视口 106
5.4.2 建立视口 106
5.4.3 清理视口 107
5.5 照明 108
5.5.1 环境光 109
5.5.2 直射光 110
5.5.3 光的颜色与材料颜色 111
5.5.4 光的类型 111
5.5.5 光的属性 113
5.5.6 设置光的属性 116
5.5.7 检索光的属性 117
5.5.8 启用和禁用照明引擎 118
5.5.9 启用和禁用某种光 118
5.6 目前的程序代码 118
5.7 结束语 119
第6章 渲染3D图元 120
6.1 BeginScene和EndScene方法 120
6.2 索引和无索引图元 121
6.3 DrawPrimitive方法 122
6.3.1 DrawPrimitive 122
6.3.2 DrawPrimitiveStrided 123
6.3.3 DrawPrimitiveVB 124
6.3.4 DrawIndexedPrimitive 125
6.3.5 DrawIndexedPrimitiveStrided 126
6.3.6 DrawIndexedPrimitiveVB 127
6.4 图元的类型 127
6.4.1 点列表 128
6.4.2 线列表 130
6.4.3 线条 131
6.4.4 三角形列表 133
6.4.5 三角条形 134
6.4.6 三角扇形 136
6.5 设置渲染状态 137
6.5.1 Alpha混合状态 139
6.5.2 Alpha测试状态 139
6.5.3 环境光状态 140
6.5.4 消除锯齿状态 140
6.5.7 清除状态 141
6.5.5 裁剪状态 141
6.5.6 颜色键控状态 141
6.5.8 深度缓冲状态 142
6.5.9 填充状态 143
6.5.10 雾化状态 143
6.5.11 照明状态 144
6.5.12 轮廓状态 144
6.5.13 单项点颜色状态 144
6.5.14 阴影状态 145
6.5.15 模板缓冲状态 145
6.5.16 纹理透视状态 146
6.5.17 纹理包装状态 147
6.5.18 顶点颜色照明状态 147
6.5.19 Z偏差状态 147
6.6 内插值:Gouraud阴影和扩散照明 148
6.7.1 调用模型 149
6.7 创建3D应用程序 149
6.7.2 设备初始化 150
6.7.3 处理每帧的活动性 151
6.7.4 渲染帧 151
6.8 目前的程序代码 151
6.9 结束语 152
第7章 键盘和游戏杆输入 154
7.1 创建DirectInput对象 154
7.2 获取键盘、鼠标或游戏杆 160
7.3 力反馈 173
7.3.1 创建力 175
7.3.2 创建DirectInput力 176
7.4 结束语 185
第8章 纹理 186
8.1 纹理坐标 186
8.2 创建纹理表面 187
8.3 纹理管理 195
8.4 纹理压缩 197
8.4.1 DXT格式 197
8.4.2 使用DXT表面 199
8.5 多纹理映射 203
8.5.1 创建多纹理映射纹理 204
8.5.2 访问多纹理映射级别 206
8.5.3 设置多纹理映射LOD偏移量 207
8.6 纹理过滤 208
8.6.1 最近点取样 208
8.6.2 线性纹理过滤 209
8.6.3 各向异性的纹理过滤 210
8.6.4 多纹理映射纹理过滤 210
8.7 纹理接口指针 211
8.8 纹理阶段 212
8.9 纹理混合 215
8.9.1 多遍纹理混合 215
8.9.2 单遍多纹理混合 217
8.9.3 凸起花纹映射 220
8.10 纹理寻址模式 226
8.10.1 边框颜色纹理寻址模式 226
8.10.2 夹持纹理寻址模式 227
8.10.3 镜像纹理寻址模式 227
8.10.4 包装纹理寻址模式 228
8.11 纹理包装处理 229
8.12 目前的程序代码 230
8.13 结束语 231
第9章 雾化处理 232
9.1 雾化处理公式 233
9.2 创建雾化效果 234
9.3 像素雾化 238
9.4 目前的程序代码 241
9.5 结束语 247
10.1 利用帧缓冲区混合 249
第10章 Alpha混合处理 249
10.2 特殊效果 251
10.2.1 有雾环境中的发射对象 252
10.2.2 镜头眩光 252
10.2.3 照明图 253
10.2.4 有色玻璃 253
10.3 Alpha测试 254
10.4 颜色键控透明性 255
10.5 Alpha可用的调色板化纹理 257
10.6 利用Alpha的纹理阶段 257
10.7 遗留混合模式和纹理阶段 258
10.8 Alpha自左乘与非自左乘 260
10.9 目前的程序代码 260
10.10 结束语 261
第11章 照明映射和环境映射 262
11.1 照明映射 262
11.1.1 多遍纹理混合的照明映射 265
11.1.2 纹理阶段照明映射 266
11.2 环境映射 269
11.2.1 球形环境映射图 270
11.2.2 立方体环境映射图 271
11.3 目前的程序代码 276
11.4 结束语 276
第12章 模板缓冲区 278
12.1 创建模板缓冲区 278
12.2 清除模板缓冲区 282
12.3 配置模板处理状态 283
12.4 创建效果 286
12.4.1 合成效果 286
12.4.3 消融 287
12.4.4 淡入淡出效果 287
12.4.2 贴画效果 287
12.4.5 轮廓线效果 288
12.4.6 测影效果 288
12.4.7 滑入效果 288
12.4.8 阴影效果 288
12.5 ShadowVol和ShadowVo12演示程序 289
12.6 目前的程序代码 290
12.7 结束语 290
第13章 加载3D模型并为之添加动画效果 292
13.1 动画角色 292
13.1.1 分段式角色 292
13.1.2 单网格角色 293
13.2 加载和控制RoadRage模型 294
13.3 目前的程序代码 299
13.4 结束语 300
14.2 保存纹理内存 301
14.2.1 AGP内存 301
第14章 Direct3D应用程序的优化 301
14.1 Direct3D Framework 301
14.2.2 纹理映射图压缩 303
14.3 增强3D效果 303
14.3.1 多纹理处理 303
14.3.2 三重缓冲 304
14.3.3 真彩色渲染 304
14.4.2 顶点缓冲区 305
14.4.3 批量处理DrawPrimitive调用 305
14.4.1 ComputeSphereVisibility 305
14.4 优化几何图形处理 305
14.4.4 浮点精度以及多线程SetCooperativeLevel标志 306
14.4.5 防护带裁剪 306
14.4.6 纹理类型提示 306
14.5 资源最小化 306
14.5.1 高成本状态的变化 306
14.5.2 多边形 306
14.6 结束语 307
14.5.5 可见方格 307
14.5.3 纹理变化 307
14.5.4 纹理内存 307
第15章 集成DirectPlay 308
15.1 DirectPlay概念 308
15.2 启动 309
15.3 Multiplayer Connect对话框 313
15.4 Multiplayer Games对话框 317
15.5 DirectPlay消息 325
15.5.1 向游戏者传送游戏消息 326
15.5.2 结束游戏 355
15.6 目前的程序代码 358
15.7 结束语 358
第16章 结束语 360
16.1 游戏 360
16.2 模拟程序和虚拟现实 361
16.3 一路顺风,尽情陶醉吧! 361