DirectX 3D HLSL高級實例精講

DirectX 3D HLSL高級實例精講

本書以微軟DirectX 3D(簡稱D3D)為基礎,以HLSL為主線討論了DX9的圖形內容,並介紹DX11的三個核心,供在校學生、圖形愛好者、圖形開發強化培訓班和工程技術人員學習,參考。

本書結構嚴謹,內容充實,講解清晰,詳細討論了當前計算機圖形學的實時渲染技術,並提供大量滿足教學要求和工程的實例代碼。

基本介紹

  • 書名:DirectX 3D HLSL高級實例精講
  • 作者:李健波 丁海燕
  • ISBN:9787302318439
  • 定價:79元
  • 出版時間:2013
  • 裝幀:平裝
主要內容,目錄,

主要內容

本書以微軟DirectX 3D(簡稱D3D)為基礎,以HLSL為主線討論了DX9的圖形內容,並介紹DX11的三個核心,供在校學生、圖形愛好者、圖形開發強化培訓班和工程技術人員學習,參考。
本書結構嚴謹,內容充實,講解清晰,詳細討論了當前計算機圖形學的實時渲染技術,並提供大量滿足教學要求和工程的實例代碼。

目錄

目錄
第1章 入門基礎 1
1.1 入門程式 1
1.1.1 程式的總體結構 1
1.1.2 D3D的引入 2
1.1.3 WinMain主程式代碼講解 2
1.1.4 Direct3D各部分代碼功能 3
1.1.5 效果檔案 8
1.2 裝入模型 9
1.2.1 模型裝載 9
1.2.2 裝載模型的高級接口 9
1.2.3 裝載模型的低級接口 11
1.3 效果檔案和HLSL入門 11
1.3.1 效果檔案和HLSL檔案綜述 11
1.3.2 效果檔案 12
1.3.3 HLSL檔案 13
1.4 .x檔案入門 13
1.4.1 .x檔案 13
1.4.2 .x檔案的模板 15
1.5 總結和記憶 16
第2章 DXUT庫和渲染對象類 18
2.1 DXUT和D3D設備 19
2.1.1 DXUT框架入門 19
2.1.2 設備管理 19
2.2 UI接口 24
2.2.1 UI類型 24
2.2.2 UI的定義創建與使用 24
2.2.3 使用滑鼠的控制 26
2.2.4 控制小物體 27
2.2.5 UI設定的總結 28
2.3 模型管理類 CRenderObject 29
2.3.1 新類的引入 29
2.3.2 增加CRENDEROBJECT類 30
2.3.3 CRENDEROBJECT類代碼的講解 30
2.4 CBOARD類 36
2.4.1 CBOARD類的講解 36
2.4.2 CBOARD類的使用 39
2.4.3 CBOARD類的擴展 40
2.5 總結和記憶 42
第3章 效果檔案和HLSL代碼 43
3.1 FX效果檔案 44
3.1.1 效果檔案的總體結構 44
3.1.2 實例代碼 44
3.1.3 重要函式的講解 46
3.2 HLSL入門 46
3.2.1 VertexShader和PixelShader功能 46
3.2.2 效果檔案狀態變數 49
3.2.3 使用Shader句柄方式 51
3.2.3.3 OnFrameMove()中增加代碼 52
3.3 HLSL語言 54
3.3.1 HLSL中變數的類型 54
3.3.2 HLSL提供的運算符 54
3.3.3 數據類型轉換 55
3.3.4 流程控制語句 55
3.3.5 HLSL的核心函式 55
3.3.6 變數的修飾符和自定義函式 58
3.3.7 程式實例 59
3.4 編譯常見錯誤和使用技巧 60
3.4.1 FX和HLSL常見編譯錯誤 60
3.4.2 執行錯誤 61
3.4.3 編輯效果檔案 62
3.4.4 效果檔案的編譯的一些建議和經驗 62
3.4.5 HLSL的代碼保護 63
3.4.6 效果檔案的調試方法 63
3.4.7 各Shader版本之間的區別 63
3.5 總結和記憶 64
第4章 .x檔案 65
4.1 .x檔案結構 65
4.1.1 .x檔案的組成 65
4.1.2 簡單.x檔案實例 67
4.1.3 .x檔案記錄材質和紋理 68
4.1.4 動畫數據 69
4.2 訪問.x檔案 70
4.2.1 對.x檔案的讀取 70
4.2.2 訪問.x的高層接口 70
4.2.3 訪問.x檔案的低層接口 71
4.2.4 一些注意事項 74
4.3 使用程式創建模型 74
4.3.1 目的和方式 74
4.3.2 具體實例 75
4.3.3 其他創建模型的D3DX庫 77
4.4 其他格式的模型檔案 78
4.4.1 .obj檔案格式說明 78
4.4.2 .md5檔案格式說明 80
4.4.3 FBX和COLLADA檔案介紹 80
4.5 渲染圖元 81
4.5.1 三角形條帶渲染方式 81
4.5.2 實例程式 82
4.5.3 渲染圖元的比較 83
4.6 記憶和總結 84
第5章 D3D燈光 85
5.1 模型的材質 86
5.1.1 光照模型的數學表達式 86
5.1.2 燈光屬性 86
5.1.3 法向量 87
5.1.4 模型的材質 88
5.1.5 實例代碼 88
5.2 點光源 90
5.2.1 點光源的特點 90
5.2.2 點光源中增加距離因子 93
5.3 光照模型 94
5.3.1 Flat光照模型 94
5.3.2 Gouraud光照模型 95
5.3.3 Phone光照模型 96
5.4 聚光燈和平行光 96
5.4.1 聚光燈 96
5.4.2 平行光 100
5.5 全局光照的近似模擬 101
5.5.1 半球光照 101
5.5.2 光照貼圖 103
5.5.3 兩種技術的比較 103
5.6 SSAO 104
5.6.1 SSAO實現原理 104
5.6.2 實例代碼講解 105
5.6.3 後續改進方向 107
5.7 光線追蹤 107
5.7.1 光線追蹤的原理 107
5.7.2 實例代碼講解 108
5.7.3 後續改進方向 114
5.8 輻射度算法簡介 114
5.9 總結和記憶 115
第6章 紋理 116
6.1 紋理和紋理頁面 117
6.1.1 紋理綜述 117
6.1.2 紋理使用實例 118
6.1.3 訪問紋理的其他形式和注意事項 121
6.2 顏色、高光、透明紋理 121
6.2.1 顏色紋理、鏡面高光紋理的概念 121
6.2.2 顏色紋理 122
6.2.3 鏡面高光紋理 122
6.2.4 紋理融合 123
6.2.5 透明紋理 123
6.3 凹凸貼圖和法線紋理 124
6.3.1 凹凸貼圖 124
6.3.2 法線紋理的原理 125
6.3.3 使用法線紋理的實例 126
6.4 立方體環境貼圖 129
6.4.1 立方體環境貼圖的原理 129
6.4.2 使用立方體來模擬天空盒 129
6.4.3 使用立方體貼圖來模擬材質的反射 131
6.5 1D、2D、3D紋理 132
6.5.1 1D、2D、3D紋理的原理 132
6.5.2 1D紋理的使用 132
6.5.3 3D紋理的運用實例 134
6.6 視差貼圖 135
6.6.1 視差貼圖原理 135
6.6.2 視差貼圖實例 136
6.7 反射和折射效果 138
6.7.1 折射和反射的原理 138
6.7.2 反射效果實例代碼 138
6.7.3 折射效果 140
6.7.4 更複雜的效果 141
6.8 過程紋理 141
6.8.1 過程紋理原理 141
6.8.2 過程紋理的實例 142
6.9 投影紋理 144
6.9.1 投影紋理的原理與使用 144
6.9.2 投影紋理實例 145
6.10 總結和記憶 148
第7章 緩衝區 149
7.1 顏色緩衝區 150
7.1.1 顏色緩衝區格式和基本操作 150
7.1.2 顏色緩衝區運算實例 152
7.1.3 顏色緩衝區的常用設定 153
7.2 Alpha混合和Alpha比較 154
7.2.1 Alpha混合和Alpha比較 154
7.2.2 實例講解 155
7.2.3 關於透明紋理的選擇 156
7.3 深度緩衝區 156
7.3.1 深度緩衝區原理 156
7.3.2 使用HLSL來計算深度 159
7.3.3 透明物體的深度 160
7.3.4 深度緩衝區的設定 161
7.4 模板緩衝 162
7.4.1 模板緩衝區的功能和原理 162
7.4.2 模板緩衝區的運用實例基礎 164
7.4.3 模板緩衝區高級實例 167
7.4.4 雙面模板的設定 170
7.5 頂點、頂點索引、鄰接緩衝區 171
7.5.1 原理和用途 171
7.5.2 代碼實例 172
7.6 總結和記憶 176
第8章 VertexShader運用 177
8.1 VertexShader的基本使用 177
8.1.1 VertexShader的功能和原理 177
8.1.2 實例代碼 178
8.2 VertexShade高級運用 181
8.2.1 使用VertexShader實現物體的變形 181
8.2.2 更複雜的VertexShader變換 184
8.3 矩陣變換 184
8.3.1 空間坐標變換 184
8.3.2 矩陣變換的特性 185
8.3.3 特殊矩陣的特殊性質 186
8.3.4 D3DX矩陣函式功能說明 186
8.4 四元數 188
8.4.1 四元數簡單介紹 188
8.4.2 四元數的物理意義 188
8.4.3 實例程式 189
8.5 物體方向和布告欄技術 191
8.5.1 控制物體的方向 191
8.5.2 布告欄技術 193
8.6 頂點標識 196
8.6.1 如何控制頂點 196
8.6.2 代碼實例 197
8.7 總結和記憶 200
第9章 PixelShader運用 201
9.1 基本功能 201
9.1.1 PixelShader功能和原理 201
9.1.2 其他可以生成的特效 203
9.2 圖像的後期處理 204
9.2.1 後期處理綜述 204
9.2.2 後期處理的幾個實現 204
9.3 PixelShader分形 206
9.3.1 分形的數學原理 206
9.3.2 實例代碼 207
9.4 Hough變換 209
9.4.1 Hough變換原理 209
9.4.2 實例代碼 210
9.5 圖像的傅立葉變換 212
9.5.1 圖像變換原理和算法 212
9.5.2 快速傅立葉變換FFT 213
9.5.3 代碼實例 215
9.6 總結和記憶 219
第10章 渲染到紋理 221
10.1 渲染到紋理 221
10.1.1 基本原理和實現 221
10.1.2 接口函式講解 225
10.1.3 直接渲染到紋理 226
10.1.4 渲染到紋理的實用技術 227
10.2 渲染到立方體紋理 228
10.2.1 渲染到立方體紋理 228
10.2.2 實例講解 229
10.2.3 接口類函式講解 232
10.3 多渲染目標 233
10.3.1 多渲染目標用途 233
10.3.2 多渲染目標的實例 233
10.4 渲染到頂點 236
10.4.1 渲染到頂點 236
10.4.2 實例代碼 236
10.5 總結和記憶 237
第11章 陰影 238
11.1 平面陰影 238
11.1.1 實現原理 238
11.1.2 實例代碼 240
11.2 ShadowMap陰影 243
11.2.1 技術原理 243
11.2.2 實例代碼 244
11.2.3 透明效果的陰影深度圖 247
11.2.4 陰影質量 248
11.3 ShadowVolume陰影 251
11.3.1 技術原理 251
11.3.2 創建陰影體 252
11.3.3 頂點變換 254
11.3.4 模板設定 255
11.3.5 計算光照 257
11.3.6 陰影體類代碼 259
11.3.7 特殊情況下處理方式 261
11.4 陰影實現方式的比較 262
11.5 總結和記憶 262
第12章 骨骼動畫 263
12.1 骨骼動畫 264
12.1.1 骨骼動畫的原理 264
12.1.2 骨骼動畫的實例 265
12.2 .x檔案中的骨骼和動畫信息 268
12.2.1 骨骼動畫檔案記錄要求 268
12.2.2 骨骼動畫檔案實例講解 269
12.3 實用骨骼代碼 274
12.3.1 程式總體結構 274
12.3.2 骨骼類實現代碼的講解 276
12.3.3 實例代碼 277
12.4 骨骼動畫的融合和事件觸發 281
12.4.1 骨骼動畫的融合 281
12.4.2 事件觸發 283
12.5 總結和記憶 285
第13章 剛體動畫、變形動畫和紋理動畫 286
13.1 剛體動畫 286
13.1.1 剛體動畫 286
13.1.2 實例代碼 286
13.2 變形動畫 288
13.2.1 變形動畫原理 288
13.2.2 實例代碼 289
13.3 紋理動畫 295
13.3.1 動畫紋理 295
13.3.2 改變紋理坐標 295
13.3.3 改變紋理 295
13.4 變形動畫工具 299
13.4.1 MPH的檔案結構 299
13.4.2 核心代碼講解 299
13.5 總結和記憶 301
第14章 粒子 302
14.1 粒子的顯示 302
14.1.1 技術實現的核心 302
14.1.2 粒子類的結構 302
14.1.3 粒子顯示的最佳化 305
14.2 粒子的運動 308
14.2.1 粒子運動狀態的描述 308
14.2.2 粒子類的實現 309
14.2.3 後續改進 313
14.3 總結和記憶 313
第15章 物理模擬初步 314
15.1 物理運動的數學模擬 314
15.1.1 物理運動的數學描述方法 314
15.1.2 一階微分方程 315
15.1.3 一階方程數值求解的實例代碼 315
15.1.4 二階微分方程的數學描述 317
15.1.5 二體問題的數值模擬 318
15.1.6 Verlet積分 320
15.1.7 數值積分方程的簡單比較 321
15.2 布料模擬 322
15.2.1 布料模擬的原理 322
15.2.2 布料實例代碼 323
15.3 簡單的碰撞 327
15.3.1 碰撞概述 327
15.3.2 關於BV的期望特徵 328
15.3.3 使用球體檢測碰撞 329
15.3.4 使用AABB來檢測碰撞 330
15.4 OBB碰撞檢測算法實例 330
15.4.1 OBB分離軸原理 330
15.4.2 實例代碼 331
15.5 Bullet物理引擎入門 333
15.5.1 入門實例 334
15.5.2 計算物體的運動狀態 335
15.5.3 與圖形結合 338
15.6 總結和記憶 346
第16章 特效實例 347
16.1 光暈效果 347
16.1.1 簡易光暈 347
16.1.2 像素擴展方式的光暈 349
16.2 延遲渲染(Deferred Shader) 350
16.2.1 傳統的渲染方式 350
16.2.2 延遲渲染的實現原理 351
16.2.3 延遲渲染的實例 351
16.3 HDR 355
16.3.1 HDR介紹 355
16.3.2 HDR的功能和使用 356
16.3.3 HDR效果的實例代碼 357
16.3.4 兩個核心實例 358
16.4 運動模糊和景深效果 366
16.4.1 運動模糊的實現原理 366
16.4.2 運動模糊的實例代碼 367
16.4.3 景深的實現原理 367
16.4.4 景深效果的實例代碼 368
16.5 NPR 370
16.5.1 NPR實現原理和分類 370
16.5.2 技術實現 370
16.5.3 常見NPR類型 371
16.6 霧效果 374
16.6.1 霧的實現原理 374
16.6.2 體積霧的實現原理 375
16.6.3 體積霧實例代碼 376
16.7 體積光照散射效果 379
16.7.1 體積光照散射及實現原理 379
16.7.2 體積光照散射(GodRay)實例代碼 380
16.8 各項異性材質 383
16.8.1 各項異性材質特性 383
16.8.2 實例代碼 383
16.9 總結和記憶 384
第17章 雜項實例 385
17.1 模型差集與交集 385
17.1.1 渲染模型交集的實現方式 385
17.1.2 實現代碼 386
17.2 渲染線段 388
17.2.1 DrawLine接口方式 388
17.2.2 使用渲染元型 389
17.3 模型面的拾取 392
17.3.1 模型面的拾取 392
17.3.2 拾取的實例代碼 394
17.4 通用計算初步 396
17.4.1 使用PixelShader實現矩陣相乘 396
17.4.2 紋理疊代計算 397
17.4.3 使用Jacobi疊代法求解線性方程組 399
17.4.4 通用計算運用總結 401
17.5 視頻音頻的後期處理 402
17.5.1 視頻後期處理 402
17.5.2 音頻處理 402
17.6 總結和記憶 402
第18章 綜合實例 403
18.1 路徑漫遊 403
18.1.1 實現原理和關鍵數據 403
18.1.2 實現檔案及代碼講解 405
18.1.3 路徑檔案創建和工具 407
18.2 簡單水面 409
18.2.1 水面的物理現象分析 409
18.2.2 水面效果實現的代碼講解 409
18.2.3 實例代碼 410
18.3 場景載入 417
18.3.1 場景載入 417
18.3.2 實例代碼 418
18.4 增加特效 424
18.4.1 增加效果 424
18.4.2 效果代碼 424
18.4.3 後續的需求 425
18.5 動畫組合 425
18.5.1 動畫內容 425
18.5.2 實例代碼 425
18.6 總結和記憶 426
第19章 調試和最佳化 427
19.1 PIX調試 427
19.1.1 PIX的高級功能 427
19.1.2 常用調試方式 432
19.1.3 調試實例 432
19.2 實例方式渲染 435
19.2.1 實例方式渲染 435
19.2.2 實例代碼 436
19.3 剪裁 439
19.3.1 剪裁原理 439
19.3.2 實例代碼 441
19.4 模型最佳化和簡化 443
19.4.1 模型最佳化 443
19.4.2 模型最佳化的實例 444
19.4.3 模型簡化實例 446
19.4.4 模型簡化實例程式 446
19.5 D3D程式最佳化的一些基本方法 449
19.5.1 資源的最佳化 449
19.5.2 程式在執行過程中的一些建議 449
19.6 總結和記憶 449
第20章 DX11入門 450
20.1 遷移到DX11 450
20.1.1 DXUT函式 450
20.1.2 CRENDEROBJECT類 451
20.1.3 CRENDEROBJECT的使用 456
20.2 DX11使用的模型和DXUTSDKMesh 456
20.2.1 DXUTSDKMesh模型 456
20.2.2 模型的裝載、渲染和釋放 458
20.2.3 動畫裝載 458
20.3 細分初步 459
20.3.1 細分介紹 459
20.3.2 細分的實例代碼 459
20.4 通用計算 463
20.4.1 通用計算 463
20.4.2 創建設備 464
20.4.3 創建緩衝區 467
20.4.4 顯示執行緒狀態 469
20.4.5 執行緒、執行緒號、執行緒組 472
20.4.6 大矩陣相乘 473
20.5 使用ComputeShader圖像處理 474
20.5.1 輔助庫 474
20.5.2 對圖像的簡單操作 476
20.5.3 計算分形 476
20.5.4 SM5.0功能介紹 478
20.6 總結和記憶 479
第21章 附錄 480
21.1 .x外掛程式 480
21.1.1 外掛程式的安裝 480
21.1.2 外掛程式導出注意事項 481
21.1.3 設定 481
21.1.4 導出方式 482
21.1.5 其他 485
21.2 紋理工具 485
21.2.1 立方體紋理的創建 486
21.2.2 體積紋理的創建 486
21.2.3 法線紋理和高度紋理 486
21.2.4 過程紋理的創建 488
21.3 Pix的使用 488
21.3.1 Pix功能總體講解 488
21.3.2 使用實例講解Pix功能 489
21.3.3 對象視窗 490
21.3.4 其他功能 491
21.4 RenderMonkey簡述 491
21.4.1 界面介紹 492
21.4.2 RenderMonkey中的變數 493
21.4.3 實例介紹 494
21.5 DirectMusic介紹及使用 495
21.6 Bullet物理引擎介紹 498
21.7 路徑導出工具 500
21.8 其他工具概述 502
21.9 總結和記憶 504
參考文獻 505
參考網站 507

相關詞條

熱門詞條

聯絡我們