目錄
第Ⅰ部分 基礎知識
必備的數學知識 3
3D空間中的嚮量 3
嚮量相等 7
計算嚮量的長度 7
嚮量的規範化 8
嚮量加法 9
嚮量減法 9
數乘 10
點積 11
叉積 11
矩陣 12
矩陣相等、矩陣數乘和矩陣加法 13
矩陣乘法 14
單位矩陣 15
逆矩陣 15
矩陣的轉置 16
D3DX矩陣 16
基本變換 19
平移矩陣 20
鏇轉矩陣 21
比例變換矩陣 23
幾何變換的組閤 24
嚮量變換的一些函數 25
平麵(選讀) 26
D3DXPLANE 27
點和平麵的空間關係 27
平麵的創建 28
平麵的規範化 29
平麵的變換 29
平麵中到某一點的最近點 30
射綫(選讀) 31
射綫 31
射綫與平麵的相交 32
小結 32
第Ⅱ部分 Direct3D基礎
第1章 初始化Direct3D 37
1.1 Direct3D概述 37
1.1.1 REF設備 38
1.1.2 D3DDEVTYPE 38
1.2 COM(組件對象模型) 38
1.3 預備知識 39
1.3.1 錶麵 39
1.3.2 多重采樣 41
1.3.3 像素格式 42
1.3.4 內存池 42
1.3.5 交換鏈和頁麵置換 43
1.3.6 深度緩存 44
1.3.7 頂點運算 45
1.3.8 設備性能 45
1.4 Direct3D的初始化 46
1.4.1 獲取接口IDirect3D9的指針 47
1.4.2 校驗硬件頂點運算 47
1.4.3 填充D3DPRESENT_PARAMETER結構 48
1.4.4 創建IDirect3DDevice9接口 50
1.5 例程:Direct3D的初始化 51
1.5.1 d3dUtility.h/cpp 52
1.5.2 例程框架 53
1.5.3 例程:D3D初始化 54
1.6 小結 56
第2章 繪製流水綫 58
2.1 模型錶示 59
2.1.1 頂點格式 60
2.1.2 三角形單元 60
2.1.3 索引 61
2.2 虛擬攝像機 62
2.3 繪製流水綫 63
2.3.1 局部坐標係 64
2.3.2 世界坐標係 64
2.3.3 觀察坐標係 65
2.3.4 背麵消隱 67
2.3.5 光照 68
2.3.6 裁剪 68
2.3.7 投影 69
2.3.8 視口變換 70
2.3.9 光柵化 72
2.4 小結 72
第3章 Direct3D中的繪製 73
3.1 頂點緩存與索引緩存 73
3.1.1 創建頂點緩存和索引緩存 73
3.1.2 訪問緩存內容 76
3.1.3 獲取頂點緩存和索引緩存的信息 77
3.2 繪製狀態 78
3.3 繪製的準備工作 78
3.4 使用頂點緩存和索引緩存進行繪製 79
3.4.1 IDirect3DDevice9::DrawPrimitive 79
3.4.2 IDirect3DDevice9::DrawIndexedPrimitive 80
3.4.3 Begin/End Scene 81
3.5 D3DX幾何體 81
3.6 例程:三角形、立方體、茶壺、D3DXCreate* 83
3.7 小結 87
第4章 顔色 89
4.1 顔色錶示 89
4.2 頂點顔色 92
4.3 著色 92
4.4 例程:具有顔色的三角形 93
4.5 小結 95
第5章 光照 97
5.1 光照的組成 97
5.2 材質 98
5.3 頂點法綫 100
5.4 光源 102
5.5 例程:光照 105
5.6 一些附加例程 108
5.7 小結 108
第6章 紋理映射 109
6.1 紋理坐標 110
6.2 創建並啓用紋理 111
6.3 紋理過濾器 112
6.4 多級漸進紋理 113
6.4.1 多級漸進紋理過濾器 114
6.4.2 使用多級漸進紋理 114
6.5 尋址模式 114
6.6 例程:紋理四邊形 116
6.7 小結 118
第7章 融閤技術 119
7.1 融閤方程 119
7.2 融閤因子 121
7.3 透明度 122
7.3.1 Alpha通道 122
7.3.2 指定Alpha來源 123
7.4 用DirectX Texture Tool創建Alpha通道 123
7.5 例程:透明效果 125
7.6 小結 127
第8章 模闆 128
8.1 模闆緩存的使用 129
8.1.1 模闆緩存格式的查詢 129
8.1.2 模闆測試 130
8.1.3 模闆測試的控製 130
8.1.4 模闆緩存的更新 132
8.1.5 模闆寫掩碼 132
8.2 例程:鏡麵效果 133
8.2.1 成像中的數學問題 133
8.2.2 鏡麵效果實現概述 134
8.2.3 代碼解析 135
8.3 例程:Planer Shadows 139
8.3.1 平行光陰影 139
8.3.2 點光源産生的陰影 140
8.3.3 陰影矩陣 141
8.3.4 使用模闆緩存防止二次融閤 142
8.3.5 代碼解析 143
8.4 小結 144
第Ⅲ部分 Direct3D的應用
第9章 字體 149
9.1 ID3DXFont接口 149
9.1.1 創建一個ID3DXFont接口對象 149
9.1.2 繪製文本 150
9.1.3 計算每秒繪製的幀數 151
9.2 CD3DFont 152
9.2.1 創建CD3DFont類的實例 152
9.2.2 繪製文本 152
9.2.3 清理 153
9.3 D3DXCreateText函數 153
9.4 小結 155
第10章 網格(一) 156
10.1 幾何信息 156
10.2 子集和屬性緩存 157
10.3 繪製 159
10.4 網格優化 159
10.5 屬性錶 161
10.6 鄰接信息 163
10.7 剋隆 164
10.8 創建網格(D3DXCreateMeshFVF) 165
10.9 例程:網格的創建與繪製 167
10.10 小結 172
第11章 網格(二) 174
11.1 ID3DXBuffer 174
11.2 XFile 175
11.2.1 加載XFile文件 175
11.2.2 XFile材質 176
11.2.3 例程:XFile 177
11.2.4 生成頂點法綫 180
11.3 漸進網格 181
11.3.1 生成漸進網格 182
11.3.2 頂點屬性權值 183
11.3.3 ID3DXPMesh接口方法 183
11.3.4 例程:Progressive Mesh 184
11.4 外接體 187
11.4.1 一些新的特殊常量 189
11.4.2 外接體的類型 189
11.4.3 例程:Bounding Volumes 190
11.5 小結 192
第12章 設計一個靈活的Camera類 193
12.1 Camera類的設計 193
12.2 實現細節 195
12.2.1 觀察矩陣(取景變換矩陣,View Matrix)的計算 195
12.2.2 繞任意軸的鏇轉 198
12.2.3 俯仰、偏航和滾動 199
12.2.4 行走、掃視和升降 201
12.3 例程:Camera 202
12.4 小結 205
第13章 地形繪製基礎 206
13.1 高度圖 207
13.1.1 創建高度圖 207
13.1.2 加載RAW文件 208
13.1.3 訪問和修改高度圖 209
13.2 創建地形幾何信息 210
13.2.1 頂點的計算 212
13.2.2 索引的計算 214
13.3 紋理映射 216
13.4 光照 219
13.4.1 概述 219
13.4.2 坐標方格的明暗度計算 220
13.4.3 對地形進行著色 222
13.5 在地形中“行走” 222
13.6 例程:Terrain 226
13.7 一些改進 228
13.8 小結 229
第14章 粒子係統 230
14.1 粒子和點精靈 230
14.1.1 結構格式 230
14.1.2 點精靈的繪製狀態 231
14.1.3 粒子及其屬性 233
14.2 粒子係統的組成 234
14.2.1 繪製一個粒子係統 238
14.2.2 隨機性 243
14.3 具體的粒子係統 243
14.3.1 例程:Snow System 244
14.3.2 例程:Firework 246
14.3.3 例程:Particle Gun 248
14.4 小結 250
第15章 拾取 251
15.1 屏幕到投影窗口的變換 253
15.2 拾取射綫的計算 254
15.3 對射綫進行變換 255
15.4 射綫/物體相交判定 256
15.5 例程:Picking 258
15.6 小結 259
第Ⅳ部分 著色器和效果
第16章 高級著色語言(HLSL)入門 263
16.1 HLSL著色器程序的編製 264
16.1.1 全局變量 266
16.1.2 輸入和輸齣結構 266
16.1.3 入口函數 267
16.2 HLSL著色器程序的編譯 268
16.2.1 常量錶 268
16.2.2 HLSL著色器程序的編譯 272
16.3 變量類型 274
16.3.1 標量類型 274
16.3.2 嚮量類型 274
16.3.3 矩陣類型 275
16.3.4 數組 277
16.3.5 結構體 277
16.3.6 關鍵字typedef 277
16.3.7 變量的前綴 278
16.4 關鍵字、語句及類型轉換 279
16.4.1 關鍵字 279
16.4.2 基本程序流程 279
16.4.3 類型轉換 280
16.5 運算符 281
16.6 用戶自定義函數 282
16.7 內置函數 284
16.8 小結 286
第17章 頂點著色器入門 287
17.1 頂點聲明 288
17.1.1 頂點聲明的描述 288
17.1.2 頂點聲明的創建 291
17.1.3 頂點聲明的啓用 291
17.2 頂點數據的使用 291
17.3 使用頂點著色器的步驟 293
17.3.1 頂點著色器的編寫與編譯 294
17.3.2 頂點著色器的創建 294
17.3.3 頂點著色器的設置 294
17.3.4 頂點著色器的銷毀 295
17.4 例程:Diffuse Lighting 295
17.5 例程:Cartoon Rendering 302
17.5.1 卡通著色 303
17.5.2 卡通著色的頂點著色器代碼 304
17.5.3 輪廓的勾勒 307
17.5.4 實現輪廓勾勒的頂點著色器代碼 310
17.6 小結 312
第18章 像素著色器入門 313
18.1 多重紋理概述 313
18.1.1 啓用多重紋理 315
18.1.2 多重紋理坐標 316
18.2 像素著色器的輸入和輸齣 317
18.3 使用像素著色器的步驟 318
18.3.1 像素著色器的編寫和編譯 318
18.3.2 像素著色器的創建 318
18.3.3 像素著色器的設置 319
18.3.4 像素著色器的銷毀 319
18.4 HLSL采樣器對象 319
18.5 例程:像素著色器中的多重紋理 321
18.6 小結 329
第19章 效果框架 331
19.1 手法與路徑 331
19.2 更多HLSL的內置對象 333
19.2.1 紋理對象 333
19.2.2 采樣器對象與采樣器狀態 333
19.2.3 頂點著色器對象和像素著色器對象 334
19.2.4 字符串 335
19.2.5 注釋 335
19.3 效果文件中的設備狀態 336
19.4 創建一種效果 337
19.5 常量的設置 338
19.6 使用一種效果 340
19.6.1 效果句柄的獲取 341
19.6.2 效果的激活 341
19.6.3 效果的啓用 341
19.6.4 當前繪製路徑的設置 342
19.6.5 效果的終止 342
19.6.6 一個例子 342
19.7 例程:效果文件中的光照和紋理 343
19.8 例程:霧效 349
19.9 例程:卡通效果 352
19.10 EffectEdit 353
19.11 小結 354
附錄 Windows編程入門 355
參考文獻 372
· · · · · · (
收起)