《3D遊戲引擎設計:實時計算機圖形學的套用方法(第2版)》是清華大學出版社出版的圖書。
基本介紹
- 書名:3D遊戲引擎設計:實時計算機圖形學的套用方法(第2版)
- 作者:(美)David H. Eberly 徐明亮 李秋霞 許威威
- ISBN:9787302343004
- 定價:120元
- 出版社:清華大學出版社
- 出版時間:2013.12.01
出版信息,內容簡介,目 錄,
出版信息
3D遊戲引擎設計:實時計算機圖形學的套用方法(第2版)
作者:(美)David H. Eberly 徐明亮 李秋霞 許威威
出版社:清華大學出版社
出版社:清華大學出版社
ISBN:9787302343004
出版日期:2013.12.01
印刷日期:2013.12.23
出版日期:2013.12.01
印刷日期:2013.12.23
內容簡介
本書詳細闡述了與3D遊戲引擎設計相關的高效解決方案及相應的數據結構和算法,主要包括圖形系統、渲染器、場景圖、控制器動畫、空間排序、細節級別、碰撞檢測、物理學、標準對象、曲線、曲面、包含測試、距離計算方案、相交計算、數值方案、旋轉計算、面向對象結構、記憶體管理以及基於著色器的特效。此外,本書還提供了相應的算法、代碼以及偽代碼,以幫助讀者進一步理解相關方案的實現過程。 本書適合作為高等院校計算機及相關專業的教材和教學參考書,也可作為相關開發人員的自學教材和參考手冊。
目 錄
第1章 概述 1
1.1 圖形硬體和遊戲發展史 1
1.2 本書版本與軟體發展史 1
1.3 章節導讀 2
第2章 圖形系統 4
2.1 基礎知識 4
2.1.1 坐標系 5
2.1.2 右手規則/左手規則和叉積計算 6
2.1.3 點和向量 9
2.2 轉換操作 11
2.2.1 線性轉換 11
2.2.2 仿射轉換 19
2.2.3 透視轉換 20
2.2.4 透視投影的特徵 22
2.2.5 齊次點和矩陣 25
2.3 相機 28
2.3.1 透視相機模型 28
2.3.2 模型空間和對象空間 31
2.3.3 世界空間 31
2.3.4 視見空間、相機空間和眼睛空間 32
2.3.5 剪裁空間、投影空間或齊次空間 34
2.3.6 視窗空間 37
2.3.7 整合結果 38
2.4 剔除操作和剪裁操作 45
2.4.1 對象剔除操作 45
2.4.2 背面剔除 46
2.4.3 基於視錐體的剪裁操作 48
2.5 光柵化操作 53
2.5.1 直線段 53
2.5.2 圓形 57
2.5.3 橢圓 58
2.5.4 三角形 62
2.6 頂點屬性 64
2.6.1 顏色 64
2.6.2 光照和材質 65
2.6.3 紋理 69
2.6.4 透明度和混合操作 80
2.6.5 霧效果 84
2.6.6 其他 85
2.6.7 光柵化屬性 85
2.7 軟體、硬體和API 86
2.7.1概述 86
2.7.2可移植性和性能 87
2.8API規範 89
2.8.1矩陣的表達和存儲方式 89
2.8.2矩陣累積計算 93
2.8.3視見矩陣 93
2.8.4投影矩陣 95
2.8.5視窗坐標系 97
2.8.6旋轉操作 99
2.8.7基於圖形API的快速計算 100
第3章渲染器 103
3.1軟體渲染 104
3.1.1頂點著色器 104
3.1.2背面剔除 106
3.1.3剪裁操作 108
3.1.4光柵化操作 111
3.1.5邊緩衝區 111
3.1.6掃描線處理過程 113
3.1.7像素著色器 115
3.1.8模板緩衝機制 117
3.1.9深度緩衝區 119
3.1.10Alpha混合操作 120
3.1.11顏色蒙版 120
3.1.12紋理採樣 121
3.1.13幀緩衝區 122
3.2硬體渲染 122
3.3抽象渲染API 123
3.3.1構造和析構 124
3.3.2相機管理 125
3.3.3全局狀態管理 125
3.3.4緩衝區清除操作 126
3.3.5對象繪製 127
3.3.6紋理和2D繪製 127
3.3.7其他操作 128
3.3.8資源管理 129
3.4渲染器的核心內容 139
3.4.1場景繪製 139
3.4.2幾何圖元繪製 141
3.4.3視效套用 143
3.4.4載入和解析著色器程式 144
3.4.5著色器程式的驗證 153
第4章場景圖 157
4.1場景圖設計 157
4.1.1核心類 160
4.1.2空間層次結構設計 164
4.1.3對象共享機制 166
4.2幾何狀態 168
4.2.1頂點緩衝區和索引緩衝區 168
4.2.2轉換操作 169
4.2.3包圍體 177
4.2.4幾何類型 182
4.3渲染狀態 188
4.3.1全局狀態 188
4.3.2光照 190
4.3.3視效 194
4.4更新操作 195
4.4.1幾何狀態更新 195
4.4.2渲染狀態更新 204
4.5剔除操作 212
4.5.1層次結構的剔除操作 215
4.5.2基於排序的剔除操作 217
4.6繪製操作 218
4.6.1單路繪製操作 219
4.6.2單一視效和多路繪製 222
4.6.3多視效繪製操作 224
4.7場景圖編譯器 225
4.7.1基於表達式的場景圖 226
4.7.2編譯語義 229
第5章控制器動畫 231
5.1關鍵幀動畫 232
5.1.1位置插值 232
5.1.2方向插值計算 233
5.1.3縮放插值 233
5.2關鍵幀壓縮 234
5.2.1基於B樣條曲線的匹配點 235
5.2.2B樣條曲線計算 238
5.2.33階最佳化計算 245
5.3逆向動力學 249
5.3.1基於Jacobian方法的數值方案 251
5.3.2基於非線性最佳化的數值方案 252
5.3.3基於循環坐標下降法的數值方案 252
5.4蒙皮機制 255
5.5頂點變形 257
5.6粒子系統 258
第6章空間排序 259
6.1二叉空間劃分樹 259
6.1.1構造BSP樹 260
6.1.2BSP樹的套用 262
6.2基於節點的排序 268
6.3入口 269
6.4用戶自定義地圖 276
6.5遮擋剔除 276
第7章細節級別 278
7.1精靈對象和廣告板 278
7.2離散細節級別 279
7.3連續細節級別 280
7.3.1基於二次誤差測度的簡化方案 280
7.3.2重組頂點和索引值 284
7.3.3地形 284
7.4無限細節級別 285
第8章碰撞檢測 286
8.1分離軸方案 288
8.1.1凸多邊形和凸多面體極值 289
8.1.2靜態對象 296
8.1.3基於恆定線速度的運動對象 302
8.1.4有向包圍盒 322
8.2運動對象之間的碰撞計算 327
8.2.1偽距離 328
8.2.2運動對象之間的接觸狀態 329
8.2.3計算首次碰撞時刻 331
8.2.4一階導數計算 334
8.3動態碰撞檢測系統 336
8.3.1抽象基類 336
8.3.2特定對象類型組合的偽距離 341
8.3.3基於軸對齊包圍盒的碰撞剔除 344
8.4對象拾取操作 349
8.4.1構造拾取光線 350
8.4.2獲取場景圖的支持 351
8.4.3維持相機高度 355
8.4.4躲避行為 356
8.5碰撞躲避路徑 356
8.5.1環境、關卡和房間 357
8.5.2房間之間的運動行為 360
8.5.3關卡之間的運動行為 361
8.5.4室外環境中的運動 361
8.5.5結構圖(藍圖) 361
8.5.6可視圖 362
8.5.7構建輪廓邊 365
8.5.8基本數據結構 372
8.5.9可視圖的高效計算方案 372
第9章物理學 375
9.1粒子系統 375
9.2質體-彈簧系統 377
9.2.1曲線質體 377
9.2.2表面質體 379
9.2.3空間質體 381
9.2.4任意結構對象 384
9.3變形體 386
9.4剛體 386
9.4.1剛體類 388
9.4.2計算慣性張量 391
第10章標準對象 392
10.1線性對象 392
10.2平面對象 394
10.3盒體對象 396
10.4二次曲面 396
10.4.1球體 396
10.4.2橢球體 396
10.4.3圓柱體 397
10.4.4圓錐體 398
10.5球掃掠體 399
10.5.1膠囊體 399
10.5.2菱形體 399
第11章曲線 400
11.1定義 400
11.2基於弧長的參數重置操作 401
11.3Bezier曲線 402
11.3.1定義 402
11.3.2計算過程 403
11.3.3升階計算 403
11.3.4降階計算 404
11.4自然、鉗式以及封閉式三次樣條 405
11.4.1自然曲線 406
11.4.2鉗式樣條 406
11.4.3封閉樣條 407
11.5B樣條曲線 407
11.5.1節點向量類型 408
11.5.2計算過程 408
11.5.3局部控制 413
11.5.4封閉曲線 413
11.6NURBS曲線 414
11.7張力-連續性-偏移樣條 416
11.8參數細分 418
11.8.1基於均勻採樣的細分方案 418
11.8.2基於弧長的細分方案 418
11.8.3基於中點距離的細分方案 419
11.8.4基於三次曲線的快速細分方案 420
11.9曲線路徑上對象的方向 421
11.9.1基於Frenet坐標系的方向 422
11.9.2基於固定Up向量的方向 422
第12章曲面 423
12.1簡介 423
12.2Bezier矩形面片 424
12.2.1定義 424
12.2.2計算過程 424
12.2.3升階計算 425
12.2.4降階計算 425
12.3Bezier三角形面片 426
12.3.1定義 426
12.3.2計算過程 428
12.3.3升階計算 428
12.3.4降階計算 428
12.4B樣條矩形面片 430
12.5NURBS矩形面片 430
12.6基於曲線的表面構造過程 431
12.6.1柱面 431
12.6.2廣義柱面 432
12.6.3旋轉曲面 433
12.6.4管狀表面 433
12.7參數細分 434
12.7.1矩形面片細分 434
12.7.2三角形面片的細分操作 443
第13章包含測試 449
13.1球體 449
13.1.1球體中的點 449
13.1.2包含數據點的球體 449
13.1.3合併球體 454
13.2盒體 455
13.2.1盒體中的點 455
13.2.2包含點的盒體 455
13.2.3合併盒體 461
13.3膠囊體 462
13.3.1膠囊體中的點 463
13.3.2包含點的膠囊體 463
13.4菱形體 465
13.4.1菱形體中的點 465
13.4.2包含點的菱形體 465
13.4.3菱形體的合併操作 466
13.5圓柱體 467
13.5.1圓柱體中的點 467
13.5.2包含點的圓柱體 467
13.5.3移至最小面積中心處的最小二乘直線 468
13.5.4圓柱體合併操作 468
13.6橢球體 469
13.6.1橢球體中的點 469
13.6.2包含點的橢球體 470
13.6.3橢球體的合併操作 470
第14章距離計算方案 471
14.1點與線性對象之間的距離 471
14.1.1點與直線之間的距離 471
14.1.2點與射線之間的距離 472
14.1.3點與線段之間的距離 472
14.2線性對象至線性對象之間的距離 473
14.2.1直線與直線之間的距離 473
14.2.2直線與射線之間的距離 474
14.2.3直線與線段之間的距離 475
14.2.4射線與射線之間的距離 475
14.2.5射線與線段之間的距離 476
14.2.6線段與線段之間的距離 476
14.3點與三角形之間的距離 477
14.4線性對象與三角形之間的距離 480
14.4.1直線與三角形之間的距離 480
14.4.2射線與三角形之間的距離 483
14.4.3線段與三角形之間的距離 483
14.5點與矩形之間 484
14.6線性對象與矩形之間的距離 485
14.6.1直線與矩形之間的距離 485
14.6.2射線與矩形之間的距離 487
14.6.3線段與矩形之間的距離 488
14.7三角形(或矩形)與三角形(或矩形)之間的距離 488
14.8點和有向盒體之間的距離 490
14.9線性對象與有向盒體之間的距離 491
14.9.1直線與有向盒體之間的距離 491
14.9.2射線與有向盒體之間的距離 493
14.9.3線段與有向盒體之間的距離 493
14.10三角形與有向盒體之間的距離 494
14.11矩形和有向盒體之間的距離 495
14.12有向盒體與有向盒體之間的距離 496
14.13混合方案 498
14.13.1點與橢圓之間的距離 498
14.13.2點與橢球體之間的距離 499
14.13.3點與二次曲線或二次表面之間的距離 499
14.13.4點與3D圓之間的距離 500
14.13.5圓與3D圓之間的距離 501
第15章相交計算 504
15.1線性對象和凸對象 504
15.2線性對象和平面對象 506
15.3線性對象和有向盒體 508
15.3.1相交測試查詢 508
15.3.2相交信息查詢 513
15.4線性對象和球體 517
15.4.1直線和球體 517
15.4.2射線和球體 519
15.4.3線段和球體 519
15.5直線和球體掃掠體 521
15.5.1直線和膠囊體 521
15.5.2直線和菱形體 524
15.6直線和二次表面 525
15.6.1直線和橢球體 526
15.6.2直線和圓柱體 526
15.6.3直線和圓錐體 526
15.7基於平面的對象剔除操作 527
15.7.1有向盒體 527
15.7.2球體 528
15.7.3膠囊體 528
15.7.4菱形體 528
15.7.5橢球體 529
15.7.6圓柱體 530
15.7.7圓錐體 531
15.7.8凸多邊形或凸多面體 532
第16章數值方案 533
16.1方程組 533
16.1.1線性方程組 533
16.1.2多項式方程組 533
16.2特徵系統 535
16.2.1二次多項式的極值 535
16.2.2約束型二次多項式的極值 535
16.3最小二乘匹配方案 536
16.3.1點(x,f(x))的匹配方案 537
16.3.2基於正交回歸的線性匹配方案 537
16.3.3平麵點(x,y,f(x,y))的平面匹配方案 538
16.3.4基於正交回歸的數據點的平面匹配方案 539
16.3.5圓與2D數據點之間的匹配方案 539
16.3.6球體與3D數據點之間的匹配方案 540
16.3.7二次曲線與2D數據點之間的匹配方案 542
16.3.8二次曲面與3D數據點之間的匹配方案 542
16.4最小化計算 543
16.4.1一維方案 543
16.4.2多維處理方案 544
16.5根值計算 546
16.5.1一維方案 546
16.5.2多維方案 549
16.6積分運算 550
16.6.1Romberg積分 550
16.6.2Gaussian求積法 553
16.7微分方程 554
16.7.1常微分方程 554
16.7.2偏微分方程 556
16.8快速函式計算 559
16.8.1平方根以及平方根倒數運算 559
16.8.2正弦、餘弦和正切運算 560
16.8.3反正切運算 561
第17章旋轉計算 562
17.1旋轉矩陣 562
17.1.1軸/角-矩陣 562
17.1.2矩陣-軸/角 564
17.1.3插值計算 565
17.2四元數 565
17.2.1四元數的線性代數觀點 567
17.2.2向量旋轉 569
17.2.3旋轉積 569
17.2.4四元數的古典觀 570
17.2.5軸/角-四元數 572
17.2.6四元數-軸/角 572
17.2.7矩陣-四元數 572
17.2.8四元數-矩陣 572
17.2.9插值計算 573
17.3Euler角 573
17.4性能問題 575
17.5非均勻縮放 576
17.5.1Gram-Schmidt標準正交法 577
17.5.2特徵分解 578
17.5.3極分解法 578
17.5.4奇異值分解法 578
第18章面向對象結構 580
18.1面向對象的軟體設計 580
18.1.1軟體質量 580
18.1.2模組化 581
18.1.3復用 582
18.1.4函式和數據 583
18.1.5面向對象 584
18.2風格、命名規則和命名空間 584
18.3運行期類型信息 587
18.3.1單繼承系統 587
18.3.2多重繼承系統 590
18.3.3宏 592
18.4模板 592
18.5共享對象和引用計數 594
18.6流機制 599
18.6.1流API 600
18.6.2Object類API 602
18.7名稱和唯一標識符 608
18.7.1名稱字元串 608
18.7.2唯一標識符 609
18.8初始化和終止操作 610
18.8.1潛在問題 610
18.8.2基於類的通用處理方案 613
18.9應用程式層 617
18.9.1處理命令行參數 618
18.9.2Application類 621
18.9.3ConsoleApplication類 624
18.9.4WindowApplication類 626
18.9.5WindowApplication3類 632
18.9.6引擎管理 646
第19章記憶體管理 651
19.1遊戲機記憶體預算 651
19.2記憶體泄露檢測和收集統計信息 652
19.3通用記憶體管理 658
19.3.1基於順序適配的記憶體請求 658
19.3.2基於夥伴系統的分配方案 665
19.3.3基於分離存儲方案的記憶體分配 668
19.3.4記憶體壓縮 668
第20章基於著色器的特效 670
20.1頂點顏色 670
20.2光照和材質 671
20.2.1環境光 673
20.2.2有向光源 673
20.2.3點光源 675
20.2.4聚光燈 676
20.3紋理 679
20.4多重紋理 680
20.5凹凸貼圖 682
20.5.1生成法線貼圖 682
20.5.2生成切空間信息 684
20.5.3著色器程式 685
20.6光澤貼圖 688
20.7球體貼圖 690
20.8立方體貼圖 692
20.9折射 695
20.10平面反射 697
20.11平面陰影 700
20.12投影紋理 703
20.13陰影貼圖 706
20.14體積霧 707
20.15蒙皮機制 708
20.16虹彩效果 710
20.17水流效果 712
附錄A在WildMagic中生成著色器 714
A.1著色器程式 714
A.2創建幾何數據 719
A.3著色器效果(不使用類數據) 721
A.4創建ShaderEffect的派生類 723
A.5著色器常量的動態更新 724
參考文獻 725