DirectX 12 3D 游戲開(kāi)發(fā)實(shí)戰(zhàn)
定 價(jià):148 元
- 作者:[美] 弗蘭克·D.盧娜(Frank D. Luna)
- 出版時(shí)間:2018/12/1
- ISBN:9787115479211
- 出 版 社:人民郵電出版社
- 中圖法分類:TP317
- 頁(yè)碼:742
- 紙張:
- 版次:01
- 開(kāi)本:16開(kāi)
Direct3D是微軟公司DirectX SDK集成開(kāi)發(fā)包中的重要組成部分,是編寫(xiě)高性能3D圖形應(yīng)用程序的渲染庫(kù),適用于多媒體、娛樂(lè)、即時(shí)3D動(dòng)畫(huà)等廣泛和實(shí)用的3D圖形計(jì)算領(lǐng)域。
本書(shū)圍繞交互式計(jì)算機(jī)圖形學(xué)這一主題展開(kāi),著重介紹Direct3D的基礎(chǔ)知識(shí)和著色器編程的方法,并介紹了如何利用Direct3D來(lái)實(shí)現(xiàn)各種有趣的技術(shù)與特效,旨在為讀者學(xué)習(xí)圖形技術(shù)奠定堅(jiān)實(shí)的基礎(chǔ)。本書(shū)包括3部分內(nèi)容。第一部分介紹數(shù)學(xué)知識(shí),涵蓋向量代數(shù)、矩陣代數(shù)和變換等內(nèi)容。這是貫穿全書(shū)的數(shù)學(xué)工具,是讀者需要掌握的基礎(chǔ)內(nèi)容。第二部分重點(diǎn)介紹Direct3D的基礎(chǔ)知識(shí),展示用Direct3D來(lái)實(shí)現(xiàn)繪圖任務(wù)的基本概念與技術(shù),如渲染流水線、紋理貼圖、混合、曲面細(xì)分等。第三部分則利用Direct3D來(lái)實(shí)現(xiàn)各種有趣的特效,如實(shí)例化與視錐體剔除、陰影貼圖、環(huán)境光遮蔽等。
本書(shū)適合希望通過(guò)Direct3D來(lái)學(xué)習(xí)3D編程的C++中級(jí)程序員閱讀,也可供已對(duì)Direct3D有一定了解或具有非DirectX API使用經(jīng)驗(yàn)的3D程序員參考。
本書(shū)是暢銷(xiāo)書(shū)作者的新作。該作者在3D開(kāi)發(fā)領(lǐng)域擁有豐富的經(jīng)驗(yàn)和積累,本書(shū)容納了作者多年來(lái)的重要經(jīng)驗(yàn)。書(shū)中通過(guò)三個(gè)部分來(lái)講解如何使用DirectX12進(jìn)行3D游戲的開(kāi)發(fā),從基礎(chǔ)開(kāi)始,由淺入深地引導(dǎo)讀者進(jìn)行學(xué)習(xí),通過(guò)閱讀本書(shū),讀者能夠快速掌握這一工具。
*以DirectX 12游戲開(kāi)發(fā)為重點(diǎn),介紹交互式計(jì)算機(jī)圖形學(xué)編程。
*利用Direct3D 12的新特性,減少CPU的開(kāi)銷(xiāo)并充分利用CPU多核心的優(yōu)勢(shì)。
*詳細(xì)講解流行的實(shí)時(shí)游戲效果設(shè)計(jì)。
*涵蓋環(huán)境光遮蔽、實(shí)時(shí)反射、法線貼圖、位移貼圖、陰影繪制、幾何著色器編程以及角色動(dòng)畫(huà)等渲染技術(shù)。
*涵蓋與圖形學(xué)有關(guān)的基礎(chǔ)數(shù)學(xué)知識(shí)以及光照、紋理貼圖、混合以及模板等3D渲染等基本概念。
*每章配有相應(yīng)的習(xí)題,可供讀者檢驗(yàn)自己對(duì)知識(shí)的掌握程度,讓其進(jìn)一步掌握DirectX 12的使用方法。
弗蘭克·D·盧娜(Frank D. Luna),畢業(yè)于加利福尼亞大學(xué)歐文分校,獲得數(shù)學(xué)學(xué)士學(xué)位,具備著超過(guò)15年的DirectX交互式圖形學(xué)編程經(jīng)驗(yàn),著有3本DirectX暢銷(xiāo)書(shū),曾從事3D醫(yī)療可視化、3D建筑設(shè)計(jì)軟件以及游戲相關(guān)工作。
目錄
第 一部分 必備的數(shù)學(xué)知識(shí)
第 1章 向量代數(shù) 3
1.1 向量 3
1.1.1 向量與坐標(biāo)系 4
1.1.2 左手坐標(biāo)系與右手坐標(biāo)系 5
1.1.3 向量的基本運(yùn)算 6
1.2 長(zhǎng)度和單位向量 8
1.3 點(diǎn)積 9
1.4 叉積 12
1.4.1 2D向量的偽叉積 13
1.4.2 通過(guò)叉積來(lái)進(jìn)行正交化處理 13
1.5 點(diǎn) 14
1.6 利用DirectXMath庫(kù)進(jìn)行向量運(yùn)算 15
1.6.1 向量類型 16
1.6.2 加載方法和存儲(chǔ)方法 17
1.6.3 參數(shù)的傳遞 18
1.6.4 常向量 20
1.6.5 重載運(yùn)算符 21
1.6.6 雜項(xiàng) 21
1.6.7 Setter函數(shù) 21
1.6.8 向量函數(shù) 23
1.6.9 浮點(diǎn)數(shù)誤差 26
1.7 小結(jié) 28
1.8 練習(xí) 29
第 2章 矩陣代數(shù) 34
2.1 矩陣的定義 34
2.2 矩陣乘法 36
2.2.1 定義 36
2.2.2 向量與矩陣的乘法 37
2.2.3 結(jié)合律 37
2.3 轉(zhuǎn)置矩陣 38
2.4 單位矩陣 38
2.5 矩陣的行列式 39
2.5.1 余子陣 40
2.5.2 行列式的定義 40
2.6 伴隨矩陣 41
2.7 逆矩陣 42
2.8 用DirectXMath庫(kù)處理矩陣 43
2.8.1 矩陣類型 44
2.8.2 矩陣函數(shù) 46
2.8.3 DirectXMath矩陣示例程序 47
2.9 小結(jié) 49
2.10 練習(xí) 49
第3章 變換 52
3.1 線性變換 52
3.1.1 定義 52
3.1.2 矩陣表示法 53
3.1.3 縮放 53
3.1.4 旋轉(zhuǎn) 55
3.2 仿射變換 58
3.2.1 齊次坐標(biāo) 58
3.2.2 仿射變換的定義及其矩陣
表示 58
3.2.3 平移 59
3.2.4 縮放和旋轉(zhuǎn)的仿射矩陣 61
3.2.5 仿射變換矩陣的幾何意義 61
3.3 變換的復(fù)合 62
3.4 坐標(biāo)變換 63
3.4.1 向量的坐標(biāo)變換 64
3.4.2 點(diǎn)的坐標(biāo)變換 65
3.4.3 坐標(biāo)變換的矩陣表示 66
3.4.4 坐標(biāo)變換矩陣及其結(jié)合律 66
3.4.5 坐標(biāo)變換矩陣及其逆矩陣 67
3.5 變換矩陣與坐標(biāo)變換矩陣 68
3.6 DirectXMath庫(kù)提供的變換函數(shù) 69
3.7 小結(jié) 70
3.8 練習(xí) 71
第二部分 Direct3D基礎(chǔ)
第4章 Direct3D的初始化 77
4.1 預(yù)備知識(shí) 77
4.1.1 Direct3D 12概述 77
4.1.2 組件對(duì)象模型 78
4.1.3 紋理格式 79
4.1.4 交換鏈和頁(yè)面翻轉(zhuǎn) 80
4.1.5 深度緩沖 81
4.1.6 資源與描述符 83
4.1.7 多重采樣技術(shù)的原理 85
4.1.8 利用Direct3D進(jìn)行多重采樣 87
4.1.9 功能級(jí)別 88
4.1.10 DirectX圖形基礎(chǔ)結(jié)構(gòu) 89
4.1.11 功能支持的檢測(cè) 92
4.1.12 資源駐留 93
4.2 CPU與GPU間的交互 94
4.2.1 命令隊(duì)列和命令列表 94
4.2.2 CPU與GPU間的同步 98
4.2.3 資源轉(zhuǎn)換 100
4.2.4 命令與多線程 101
4.3 初始化Direct3D 102
4.3.1 創(chuàng)建設(shè)備 102
4.3.2 創(chuàng)建圍欄并獲取描述符的
大小 104
4.3.3 檢測(cè)對(duì)4X MSAA質(zhì)量級(jí)別的
支持 104
4.3.4 創(chuàng)建命令隊(duì)列和命令列表 105
4.3.5 描述并創(chuàng)建交換鏈 105
4.3.6 創(chuàng)建描述符堆 107
4.3.7 創(chuàng)建渲染目標(biāo)視圖 108
4.3.8 創(chuàng)建深度/模板緩沖區(qū)及其
視圖 110
4.3.9 設(shè)置視口 114
4.3.10 設(shè)置裁剪矩形 115
4.4 計(jì)時(shí)與動(dòng)畫(huà) 116
4.4.1 性能計(jì)時(shí)器 116
4.4.2 游戲計(jì)時(shí)器類 117
4.4.3 幀與幀之間的時(shí)間間隔 118
4.4.4 總時(shí)間 120
4.5 應(yīng)用程序框架示例 123
4.5.1 D3DApp類 123
4.5.2 非框架方法 126
4.5.3 框架方法 127
4.5.4 幀的統(tǒng)計(jì)信息 128
4.5.5 消息處理函數(shù) 130
4.5.6 “初始化Direct3D演示”
程序 131
4.6 調(diào)試Direct3D應(yīng)用程序 135
4.7 小結(jié) 137
第5章 渲染流水線 139
5.1 3D視覺(jué)即錯(cuò)覺(jué)? 140
5.2 模型的表示 141
5.3 計(jì)算機(jī)色彩基礎(chǔ) 142
5.3.1 顏色運(yùn)算 143
5.3.2 128位顏色 143
5.3.3 32位顏色 144
5.4 渲染流水線概述 145
5.5 輸入裝配器階段 147
5.5.1 頂點(diǎn) 147
5.5.2 圖元拓?fù)洹?47
5.5.3 索引 151
5.6 頂點(diǎn)著色器階段 152
5.6.1 局部空間和世界空間 153
5.6.2 觀察空間 156
5.6.3 投影和齊次裁剪空間 158
5.7 曲面細(xì)分階段 164
5.8 幾何著色器階段 165
5.9 裁剪 165
5.10 光柵化階段 167
5.10.1 視口變換 167
5.10.2 背面剔除 167
5.10.3 頂點(diǎn)屬性插值 169
5.11 像素著色器階段 170
5.12 輸出合并階段 170
5.13 小結(jié) 171
5.14 練習(xí) 171
第6章 利用Direct3D繪制幾何體 175
6.1 頂點(diǎn)與輸入布局 175
6.2 頂點(diǎn)緩沖區(qū) 178
6.3 索引和索引緩沖區(qū) 183
6.4 頂點(diǎn)著色器示例 187
6.5 像素著色器示例 192
6.6 常量緩沖區(qū) 195
6.6.1 創(chuàng)建常量緩沖區(qū) 195
6.6.2 更新常量緩沖區(qū) 198
6.6.3 上傳緩沖區(qū)輔助函數(shù) 198
6.6.4 常量緩沖區(qū)描述符 201
6.6.5 根簽名和描述符表 202
6.7 編譯著色器 206
6.7.1 離線編譯 208
6.7.2 生成著色器匯編代碼 210
6.7.3 利用Visual Studio離線編譯
著色器 212
6.8 光柵器狀態(tài) 213
6.9 流水線狀態(tài)對(duì)象 214
6.10 幾何圖形輔助結(jié)構(gòu)體 217
6.11 立方體演示程序 219
6.12 小結(jié) 229
6.13 練習(xí) 230
第7章 利用Direct3D繪制幾何體(續(xù)) 235
7.1 幀資源 235
7.2 渲染項(xiàng) 238
7.3 渲染過(guò)程中所用到的常量數(shù)據(jù) 239
7.4 不同形狀的幾何體 242
7.4.1 生成柱體網(wǎng)格 244
7.4.2 生成球體網(wǎng)格 248
7.4.3 生成幾何球體網(wǎng)格 249
7.5 繪制多種幾何體演示程序 251
7.5.1 頂點(diǎn)緩沖區(qū)和索引緩沖區(qū) 252
7.5.2 渲染項(xiàng) 255
7.5.3 幀內(nèi)資源和常量緩沖區(qū)視圖 257
7.5.4 繪制場(chǎng)景 260
7.6 細(xì)探根簽名 262
7.6.1 根參數(shù) 263
7.6.2 描述符表 264
7.6.3 根描述符 266
7.6.4 根常量 267
7.6.5 更復(fù)雜的根簽名示例 269
7.6.6 根參數(shù)的版本控制 270
7.7 陸地與波浪演示程序 271
7.7.1 生成柵格頂點(diǎn) 273
7.7.2 生成柵格索引 274
7.7.3 應(yīng)用計(jì)算高度的函數(shù) 275
7.7.4 根常量緩沖區(qū)視圖 277
7.7.5 動(dòng)態(tài)頂點(diǎn)緩沖區(qū) 279
7.8 小結(jié) 281
7.9 練習(xí) 282
第8章 光照 283
8.1 光照與材質(zhì)的交互 283
8.2 法向量 285
8.2.1 計(jì)算法向量 286
8.2.2 變換法向量 288
8.3 參與光照計(jì)算的一些關(guān)鍵向量 289
8.4 朗伯余弦定律 290
8.5 漫反射光照 292
8.6 環(huán)境光照 292
8.7 鏡面光照 293
8.7.1 菲涅耳效應(yīng) 294
8.7.2 表面粗糙度 296
8.8 光照模型的概述 298
8.9 材質(zhì)的實(shí)現(xiàn) 299
8.10 平行光源 304
8.11 點(diǎn)光源 304
8.12 聚光燈光源 306
8.13 光照的具體實(shí)現(xiàn) 306
8.13.1 Light結(jié)構(gòu)體 307
8.13.2 常用輔助函數(shù) 308
8.13.3 實(shí)現(xiàn)方向光源 310
8.13.4 實(shí)現(xiàn)點(diǎn)光源 310
8.13.5 實(shí)現(xiàn)聚光燈光源 311
8.13.6 多種光照的疊加 312
8.13.7 HLSL主文件 313
8.14 光照演示程序 316
8.14.1 頂點(diǎn)格式 317
8.14.2 計(jì)算法線 317
8.14.3 更新光照的方向 319
8.14.4 更新根簽名 320
8.15 小結(jié) 320
8.16 練習(xí) 321
第9章 紋理貼圖 323
9.1 紋理與資源的回顧 324
9.2 紋理坐標(biāo) 325
9.3 紋理數(shù)據(jù)源 328
9.3.1 DDS格式概述 328
9.3.2 創(chuàng)建DDS文件 329
9.4 創(chuàng)建以及啟用紋理 330
9.4.1 加載DDS文件 330
9.4.2 著色器資源視圖堆 331
9.4.3 創(chuàng)建著色器資源視圖描述符 331
9.4.4 將紋理綁定到流水線 333
9.5 過(guò)濾器 335
9.5.1 放大 335
9.5.2 縮小 337
9.5.3 各向異性過(guò)濾 338
9.6 尋址模式 339
9.7 采樣器對(duì)象 341
9.7.1 創(chuàng)建采樣器 341
9.7.2 靜態(tài)采樣器 344
9.8 在著色器中對(duì)紋理進(jìn)行采樣 346
9.9 板條箱演示程序 347
9.9.1 指定紋理坐標(biāo) 347
9.9.2 創(chuàng)建紋理 348
9.9.3 設(shè)置紋理 349
9.9.4 更新HLSL部分代碼 349
9.10 紋理變換 352
9.11 附有紋理的山川演示程序 353
9.11.1 生成柵格紋理坐標(biāo) 353
9.11.2 鋪設(shè)紋理 355
9.11.3 紋理動(dòng)畫(huà) 355
9.12 小結(jié) 356
9.13 練習(xí) 356
第 10章 混合 359
10.1 混合方程 360
10.2 混合運(yùn)算 360
10.3 混合因子 362
10.4 混合狀態(tài) 363
10.5 混合示例 365
10.5.1 禁止顏色的寫(xiě)操作 365
10.5.2 加法混合與減法混合 366
10.5.3 乘法混合 366
10.5.4 透明混合 367
10.5.5 混合與深度緩沖區(qū) 368
10.6 alpha通道 368
10.7 裁剪像素 369
10.8 霧 371
10.9 小結(jié) 377
10.10 練習(xí) 377
第 11章 模板 379
11.1 深度/模板緩沖區(qū)的格式及其資源
數(shù)據(jù)的清理 380
11.2 模板測(cè)試 381
11.3 描述深度/模板狀態(tài) 382
11.3.1 深度信息的相關(guān)設(shè)置 382
11.3.2 模板信息的相關(guān)設(shè)置 383
11.3.3 創(chuàng)建和綁定深度/模板狀態(tài) 384
11.4 實(shí)現(xiàn)平面鏡效果 385
11.4.1 鏡像概述 385
11.4.2 定義鏡像的深度/模板狀態(tài) 387
11.4.3 繪制場(chǎng)景 389
11.4.4 繞序與鏡像 390
11.5 實(shí)現(xiàn)平面陰影 391
11.5.1 平行光陰影 391
11.5.2 點(diǎn)光陰影 393
11.5.3 通用陰影矩陣 394
11.5.4 使用模板緩沖區(qū)防止雙重
混合 394
11.5.5 編寫(xiě)陰影部分的代碼 395
11.6 小結(jié) 396
11.7 練習(xí) 397
第 12章 幾何著色器 402
12.1 編寫(xiě)幾何著色器 402
12.2 以公告牌技術(shù)實(shí)現(xiàn)森林效果 408
12.2.1 概述 408
12.2.2 頂點(diǎn)結(jié)構(gòu)體 410
12.2.3 HLSL文件 411
12.2.4 SV_PrimitiveID語(yǔ)義 416
12.3 紋理數(shù)組 417
12.3.1 概述 417
12.3.2 對(duì)紋理數(shù)組進(jìn)行采樣 417
12.3.3 加載紋理數(shù)組 418
12.3.4 紋理子資源 418
12.4 alpha-to-coverage技術(shù) 419
12.5 小結(jié) 421
12.6 練習(xí) 422
第 13章 計(jì)算著色器 425
13.1 線程與線程組 427
13.2 一個(gè)簡(jiǎn)單的計(jì)算著色器 428
13.3 數(shù)據(jù)的輸入與輸出資源 430
13.3.1 紋理輸入 430
13.3.2 紋理輸出與無(wú)序訪問(wèn)視圖 430
13.3.3 利用索引對(duì)紋理進(jìn)行采樣 433
13.3.4 結(jié)構(gòu)化緩沖區(qū)資源 435
13.3.5 將計(jì)算著色器的執(zhí)行結(jié)果
復(fù)制到系統(tǒng)內(nèi)存 437
13.4 線程標(biāo)識(shí)的系統(tǒng)值 441
13.5 追加緩沖區(qū)與消費(fèi)緩沖區(qū) 442
13.6 共享內(nèi)存與線程同步 443
13.7 圖像模糊演示程序 445
13.7.1 圖像模糊理論 445
13.7.2 渲染到紋理技術(shù) 448
13.7.3 圖像模糊的實(shí)現(xiàn)概述 450
13.7.4 計(jì)算著色器程序 456
13.8 拓展資料 461
13.9 小結(jié) 461
13.10 練習(xí) 463
第 14章 曲面細(xì)分階段 468
14.1 曲面細(xì)分的圖元類型 469
14.2 外殼著色器 470
14.2.1 常量外殼著色器 470
14.2.2 控制點(diǎn)外殼著色器 473
14.3 鑲嵌器階段 474
14.3.1 四邊形面片的曲面細(xì)分
示例 475
14.3.2 三角形面片的曲面細(xì)分
示例 475
14.4 域著色器 476
14.5 對(duì)四邊形進(jìn)行鑲嵌化處理 477
14.6 三次貝塞爾四邊形面片 481
14.6.1 貝塞爾曲線 482
14.6.2 三次貝塞爾曲面 484
14.6.3 計(jì)算三次貝塞爾曲面的
相關(guān)代碼 485
14.6.4 定義面片的幾何形狀 487
14.7 小結(jié) 489
14.8 練習(xí) 490
第三部分 主 題 篇
第 15章 構(gòu)建第 一人稱視角的攝像機(jī)與
動(dòng)態(tài)索引 493
15.1 重溫取景變換 493
15.2 攝像機(jī)類 494
15.3 攝像機(jī)類中的方法實(shí)現(xiàn)選講 496
15.3.1 返回XMVECTOR類型
變量的方法 496
15.3.2 SetLens方法 497
15.3.3 推導(dǎo)視錐體信息 497
15.3.4 與攝像機(jī)相關(guān)的變換
操作 498
15.3.5 構(gòu)建觀察矩陣 499
15.4 攝像機(jī)演示程序的若干注解 500
15.5 動(dòng)態(tài)索引 502
15.6 小結(jié) 509
15.7 練習(xí) 509
第 16章 實(shí)例化與視錐體剔除 511
16.1 硬件實(shí)例化 511
16.1.1 繪制實(shí)例數(shù)據(jù) 512
16.1.2 實(shí)例數(shù)據(jù) 512
16.1.3 創(chuàng)建實(shí)例緩沖區(qū) 517
16.2 包圍體與視錐體 519
16.2.1 DirectXMath碰撞檢測(cè)庫(kù) 520
16.2.2 包圍盒 520
16.2.3 包圍球 523
16.2.4 視錐體 524
16.3 視錐體剔除 529
16.4 小結(jié) 532
16.5 練習(xí) 533
第 17章 拾取 535
17.1 屏幕空間到投影窗口的變換 536
17.2 位于世界空間與局部空間中的
拾取射線 539
17.3 射線與網(wǎng)格的相交檢測(cè) 540
17.3.1 射線與軸對(duì)齊包圍盒的
相交檢測(cè) 542
17.3.2 射線與球體的相交檢測(cè) 542
17.3.3 射線與三角形的相交檢測(cè) 543
17.4 應(yīng)用例程 545
17.5 小結(jié) 546
17.6 練習(xí) 547
第 18章 立方體貼圖 548
18.1 什么是立方體貼圖 548
18.2 環(huán)境貼圖 549
18.3 繪制天空紋理 552
18.4 模擬反射 556
18.5 動(dòng)態(tài)立方體圖 559
18.5.1 動(dòng)態(tài)立方體圖輔助類 561
18.5.2 構(gòu)建立方體圖資源 562
18.5.3 分配額外的描述符堆空間 562
18.5.4 構(gòu)建描述符 564
18.5.5 構(gòu)建深度緩沖區(qū) 565
18.5.6 立方體圖的視口與裁剪矩形 566
18.5.7 設(shè)置立方體圖攝像機(jī) 566
18.5.8 對(duì)立方體圖進(jìn)行繪制 568
18.6 用幾何著色器繪制動(dòng)態(tài)
立方體圖 571
18.7 小結(jié) 574
18.8 練習(xí) 574
第 19章 法線貼圖 577
19.1 使用法線貼圖的動(dòng)機(jī) 577
19.2 什么是法線貼圖 578
19.3 紋理空間/切線空間 580
19.4 頂點(diǎn)切線空間 582
19.5 在切線空間與物體空間之間進(jìn)行
轉(zhuǎn)換 583
19.6 法線貼圖的著色器代碼 584
19.7 小結(jié) 588
19.8 練習(xí) 589
第 20章 陰影貼圖 591
20.1 渲染場(chǎng)景深度 591
20.2 正交投影 594
20.3 投影紋理坐標(biāo) 595
20.3.1 代碼實(shí)現(xiàn) 597
20.3.2 視錐體之外的點(diǎn) 598
20.3.3 正交投影 598
20.4 什么是陰影貼圖 599
20.4.1 算法描述 599
20.4.2 偏移與走樣 600
20.4.3 百分比漸近過(guò)濾 603
20.4.4 構(gòu)建陰影圖 607
20.4.5 陰影因子 612
20.4.6 陰影圖檢測(cè) 614
20.4.7 渲染陰影圖 614
20.5 過(guò)大的PCF核 615
20.5.1 ddx函數(shù)與ddy函數(shù) 616
20.5.2 較大PCF核問(wèn)題的解決
方案 616
20.5.3 較大PCF核問(wèn)題的另一種
解決方案 618
20.6 小結(jié) 619
20.7 練習(xí) 620
第 21章 環(huán)境光遮蔽 622
21.1 通過(guò)投射光線實(shí)現(xiàn)環(huán)境光遮蔽 623
21.2 屏幕空間環(huán)境光遮蔽 626
21.2.1 法線與深度值的渲染過(guò)程 626
21.2.2 環(huán)境光遮蔽的渲染過(guò)程 628
21.2.3 模糊過(guò)程 637
21.2.4 使用環(huán)境光遮蔽圖 641
21.3 小結(jié) 642
21.4 練習(xí) 642
第 22章 四元數(shù) 644
22.1 復(fù)數(shù)回顧 644
22.1.1 定義 645
22.1.2 復(fù)數(shù)的幾何意義 645
22.1.3 極坐標(biāo)表示法與旋轉(zhuǎn)操作 646
22.2 四元數(shù)代數(shù) 647
22.2.1 定義與基本運(yùn)算 647
22.2.2 特殊乘積 648
22.2.3 性質(zhì) 648
22.2.4 轉(zhuǎn)換 649
22.2.5 共軛與范數(shù) 649
22.2.6 四元數(shù)的逆 650
22.2.7 極坐標(biāo)表示法 651
22.3 單位四元數(shù)及其旋轉(zhuǎn)操作 652
22.3.1 旋轉(zhuǎn)算子 652
22.3.2 將四元數(shù)旋轉(zhuǎn)算子轉(zhuǎn)換為
矩陣形式 654
22.3.3 將旋轉(zhuǎn)矩陣變換為四元數(shù)
旋轉(zhuǎn)算子 655
22.3.4 復(fù)合 657
22.4 四元數(shù)插值 657
22.5 DirectX數(shù)學(xué)庫(kù)中與四元數(shù)有關(guān)的
函數(shù) 661
22.6 旋轉(zhuǎn)演示程序 662
22.7 小結(jié) 667
22.8 練習(xí) 667
第 23章 角色動(dòng)畫(huà) 670
23.1 框架層次 670
23.2 蒙皮網(wǎng)格 674
23.2.1 定義 674
23.2.2 重新推導(dǎo)將骨骼變換至根
坐標(biāo)系的公式 674
23.2.3 偏移變換 675
23.2.4 驅(qū)動(dòng)骨架運(yùn)動(dòng) 675
23.2.5 計(jì)算最終變換 677
23.3 頂點(diǎn)混合 679
23.4 從文件中加載動(dòng)畫(huà)數(shù)據(jù) 682
23.4.1 文件頭 682
23.4.2 材質(zhì) 683
23.4.3 子集 683
23.4.4 頂點(diǎn)數(shù)據(jù)與三角形 684
23.4.5 骨骼偏移變換 685
23.4.6 層次結(jié)構(gòu) 685
23.4.7 動(dòng)畫(huà)數(shù)據(jù) 686
23.4.8 M3DLoader類 688
23.5 角色動(dòng)畫(huà)演示程序 689
23.6 小結(jié) 692
23.7 練習(xí) 694
附錄A Windows編程入門(mén) 695
A.1 概述 696
A.1.1 資源 696
A.1.2 事件、消息隊(duì)列、消息以及
消息循環(huán) 696
A.1.3 圖形用戶界面 698
A.1.4 Unicode 698
A.2 基本的Windows應(yīng)用程序 699
A.3 講解基本W(wǎng)indows應(yīng)用程序的
工作流程 702
A.3.1 程序中的頭文件、全局變量
以及函數(shù)聲明 702
A.3.2 WinMain 703
A.3.3 WNDCLASS結(jié)構(gòu)體與
實(shí)例注冊(cè) 704
A.3.4 創(chuàng)建并顯示窗口 705
A.3.5 消息循環(huán) 707
A.3.6 窗口過(guò)程 708
A.3.7 消息框函數(shù) 710
A.4 一種更靈活的消息循環(huán) 710
A.5 小結(jié) 711
A.6 練習(xí) 711
附錄B 高級(jí)著色器語(yǔ)言參考 713
B.1 變量類型 713
B.1.1 標(biāo)量類型 713
B.1.2 向量類型 713
B.1.3 矩陣類型 714
B.1.4 數(shù)組 716
B.1.5 結(jié)構(gòu)體 716
B.1.6 typedef關(guān)鍵字 716
B.1.7 變量的修飾符 717
B.1.8 強(qiáng)制類型轉(zhuǎn)換 717
B.2 關(guān)鍵字與運(yùn)算符 718
B.2.1 關(guān)鍵字 718
B.2.2 運(yùn)算符 718
B.3 程序中的控制流 720
B.4 函數(shù) 721
B.4.1 用戶自定義函數(shù) 721
B.4.2 內(nèi)置函數(shù) 722
B.4.3 常量緩沖區(qū)的封裝規(guī)則 725
附錄C 解析幾何學(xué)選講 728
C.1 射線、直線以及線段 728
C.2 平行四邊形 729
C.3 三角形 729
C.4 平面 730
C.4.1 DirectX數(shù)學(xué)庫(kù)中平面的表示 731
C.4.2 空間點(diǎn)與平面的位置關(guān)系 731
C.4.3 構(gòu)建平面 732
C.4.4 對(duì)平面進(jìn)行規(guī)范化處理 733
C.4.5 對(duì)平面進(jìn)行變換 733
C.4.6 平面內(nèi)離指定點(diǎn)最近的點(diǎn) 734
C.4.7 射線與平面的相交檢測(cè) 734
C.4.8 反射向量 735
C.4.9 反射點(diǎn) 735
C.4.10 反射矩陣 736
C.5 練習(xí) 737
附錄D 參考資料 739