《3D游戲引擎設計:實時計算機圖形學的應用方法(第2版)》詳細闡述了與3D游戲引擎設計相關的高效解決方案及相應的數據結構和算法,主要包括圖形系統、渲染器、場景圖、控制器動畫、空間排序、細節級別、碰撞檢測、物理學、標準對象、曲線、曲面、包含測試、距離計算方案、相交計算、數值方案、旋轉計算、面向對象結構、內存管理以及基于著色器的特效。此外,《3D游戲引擎設計:實時計算機圖形學的應用方法(第2版)》還提供了相應的算法、代碼以及偽代碼,以幫助讀者進一步理解相關方案的實現過程。《3D游戲引擎設計:實時計算機圖形學的應用方法(第2版)》適合作為高等院校計算機及相關專業的教材和教學參考書,也可作為相關開發人員的自學教材和參考手冊。
本書第1版于2000年9月面世,當時,著色器語言尚未出現于民用級圖形硬件中,全部渲染行為均在固定功能管線中完成,即設置渲染狀態進而控制幾何數據與繪制操作之間的操作方式。
Wild Magic始自0.1版本,并涵蓋了1015個源文件以及17個示例應用程序,共計101293行代碼。該版本發布時僅支持Microsoft Windows操作系統,且渲染器構建于OpenGL之上,項目文件由Microsoft Visual C++ 6.0提供。隨后,源代碼進化至Wild Magic 3.9,并兼顧Linux和Macintosh平臺,以及OpenGL和Direct3D渲染器。除此之外,Wild Magic 3.9還對著色器程序設計提供了某些支持。盡管如此,該版本的引擎仍構建于固定功能管線之上。需要說明的是,Wild Magic 3.9支持多個版本的Microsoft編譯器、其他平臺上的編譯器以及某些開發工具,例如導入器和導出器,進而可對藝術設計素材進行處理。
本書第2版包括諸多新增特性,例如著色器程序設計以及引擎的支持方式。本書在原有基礎上增加了大量內容并涉及與圖形系統相關的諸多細節知識,特別是著色器與幾何管線之間的擬合方式。另外,場景圖材質及其管理操作均得到了較大程度的擴展。同時,本書第2版涵蓋了更為豐富的圖像信息,并在一定程度上減少了與引擎相關的數學知識。
本書第2版發布了Wild Magic 4.0,其中包括1587個源文件和105個示例應用程序,共計249860行代碼。最新版本支持Windows、Linux以及Macintosh平臺,并采用OpenGL渲染器。另外,Windows平臺還支持Direct3D渲染器,其性能與OpenGL相比毫不遜色。同時,多個版本的Microsoft C++均得到了較好的支持,包括版本6.0、7.0、7.1以及8.0(專業版和精簡版)。除此之外,MINGW編譯器和MSYS環境同樣在Windows平臺上得到了較好的支持。Linux平臺使用了g++編譯器,而Macintosh平臺則采用了Apple Xcode工具。
Wild Magic 4.0圖形系統則完全基于著色器系統,并采用NVIDIA推出的Cg編程語言。針對OpenGL,預編譯著色器程序通過arbvp1和arbfp1配置項創建;而對于Direct3D,則可使用vs_2_0和ps_2_0配置項,因而圖形硬件應對此予以支持進而運行示例應用程序。若圖形硬件僅支持少量的配置項,例如vs_1_1和ps_1_1,則須通過此類配置項重新編譯當前著色器程序,并生成對應輸出結果而非本書附帶光盤所發布的內容。Wild Magic 4.0版本包含了基于著色器的全功能軟件渲染器,并以此彰顯幾何管線的各方面內容,而非僅是頂點著色器和像素著色器。
著色器方案逐漸替代了固定功能方案,這也使得Wild Magic 4.0成為一款功能強大的圖形引擎,并適用于多種圖形應用程序,而非僅限于游戲程序。經過多方努力,該引擎兼具易用性和可擴展性等特征,并在渲染器性能方面獲得了長足的進步。借此,也希望讀者對Wild Magic 4.0版本給予更多的支持。
本書的出版是多方努力的共同結果,這里要感謝審稿人對本書第1版所提出的極具價值的反饋意見,這極大地增加了本書第2版的可讀性。另外,還要感謝Marc Olano(巴爾的摩馬里蘭大學)選用本書第1版作為授課教材,憑借其豐富的個人經驗,他對本書提出了許多中肯的建議;感謝制作編輯和策劃編輯Elisabeth Beller,她所引領的工作團隊為本書內容增添了濃重的色彩;最后,還要感謝編輯Tim Cox,他的耐心和幫助使得本人的另一本書籍得以出版。
關于作者
目前,Dave Eberly出任Geometric Tools, Inc.(其網址為www.geometrictools.com)總裁一職,該公司致力于計算機圖形學、圖像分析以及數字方案的軟件開發。在此之前,他任職Numerical Design Ltd.(NDL)技術總監,該公司負責實時3D游戲引擎NetImmerse的研發工作。另外,他還參與了NDL的Gamebryo引擎研發工作,該引擎定位于NetImmerse之后的次世代引擎。Dave Eberly曾先后獲得了布魯斯堡大學數學學士學位,北卡羅來納大學教堂山分校計算機科學理學碩士和博士學位,其專著包括《游戲物理學》(出版于2004年),《3D游戲引擎體系結構》(出版于2005年),并與Philip Schneider協作出版了《計算機圖形學幾何工具》一書(出版于2003年),且均由Morgan Kaufmann出版社出版。作為一名數學工作者,其研究領域涉及燃燒學、數字和圖像處理以及統計學中的長度偏差分布問題。除此之外,Dave Eberly還曾兼任圣安東尼奧德克薩斯大學U.T.健康科學中心副教授一職。1991年,他放棄了終身職位并于北卡羅來納大學專攻計算機圖形學。1994年畢業后,在隨后的一年時間里,Dave Eberly兼任神經外科計算機圖形學研究副教授一職,研發方向為SAS/Insight,即一款以統計圖形學為主的軟件工具。最終,Dave Eberly決定將計算機圖形學和幾何學作為職業發展方向,并先后就職于NDL(Emergent Game Technologies公司前身)和Magic Software,Inc.(現更名為Geometric Tools)。Dave Eberly積極參與新聞組(對應網址為comp.graphics.algorithms)的交流活動,并致力于推廣3D圖形技術。在他的引領下,公司網站以及個人專著均散發著無窮的創造力。
本書光盤
本書附帶光盤包含Wild Magic 4.0版本。其中,許可證協議、安裝和版本說明以及源代碼分別位于以下目錄樹中:
GeometricTools/WildMagic4/Wm4FoundationLicense.pdf
GeometricTools/WildMagic4/Wm4RestrictedLicense.pdf
GeometricTools/WildMagic4/Wm4InstallationRelease.pdf
GeometricTools/WildMagic4/LibFoundation
GeometricTools/WildMagic4/LibGraphics
GeometricTools/WildMagic4/LibPhysics
GeometricTools/WildMagic4/LibRenderers
GeometricTools/WildMagic4/LibApplications
示例應用程序、數據集以及各類數據項則位于其他目錄中。Wild Magic引擎的官方網站包含了引擎更新記錄、文件變更歷史、問題修復、已知問題以及與引擎相關的附加素材。
1. LibFoundation目錄
* Approximation目錄。該目錄包含基于高斯分布、直線、平面、二次曲線、二次表面以及多項式的點集匹配擬合方案。
* ComputationGeometry目錄。該目錄包含凸殼構造過程、Delaunay三角剖分、耳式剪裁三角剖分以及有理數運算。
* Containment目錄。該目錄包含基于盒體、膠囊體、圓柱體、橢球體、菱形體以及球體的點集包含測試。除此之外,該目錄還包含最小空間盒體以及最小空間球體包含測試。
* Curves目錄。該目錄包含了抽象類并計算如下內容:位置、導數、切線、速度、弧長、基于弧長的參數重置、細分算法、曲率、扭矩、法線、副法線、多項式曲線、Bezier曲線、B樣條曲線、NURBS曲線、3次樣條曲線以及張力-偏移-連續性曲線。
* Distance目錄。該目錄包含對象間的距離計算。
* ImageAnalysis目錄。該目錄包含2D和3D圖像分析處理的基本例程,例如從2D圖像析取各級曲線,或者從3D圖像中析取各級表面。
* Interpolation目錄。該目錄包含數據的插值計算,其中包括Akima插值、雙三次插值、分段式二次插值、球體插值、薄板樣條插值、雙線性插值、雙三次薄板樣條插值以及向量域插值。另外,分散數據插值則采用Delaunay三角剖分和四面體剖分方案。
* Intersection目錄。該目錄包含對象間的相交計算,其中包括靜態和動態查詢、相交測試查詢以及相交信息查詢。
* Mathematics目錄。該目錄包含了點、向量、矩陣、四元數以及某些三角形函數的快速計算。另外,該目錄還提供了引擎中所使用的對象源代碼。
* Meshes目錄。該目錄包含了圖形圖像應用程序所使用的頂點-邊-三角形表實現方案。
* NumericalAnalysis目錄。該目錄包含二分根值計算、基于對稱矩陣的特征向量計算、積分計算、線性方程計算、最小化計算(不采用導數方式)、常微分方程計算以及多項式根值計算。
* Surfaces目錄。該目錄包含了抽象類,并計算位置、導數、切線、法線、主曲率和方向、參數表面的派生類(包括B樣條和NURBS)以及隱式表面(包括二次表面)。
* System目錄。該目錄封裝了與操作系統相關的特定需求(包括Windows,Linux和Macintosh)。
2. LibGraphics目錄
* Collision目錄。該目錄包含了與碰撞檢測相關的內容,包括碰撞分組、碰撞信息以及包圍體樹。
* Controllers目錄。該目錄包含了各類動畫控制器,例如關鍵幀動畫、變形機制、皮膚-骨骼機制、點-粒子系統以及逆向動力學。
* Curves目錄。該目錄支持曲線細分和渲染操作。
* Detail目錄。該目錄支持細分級別計算,包括離散計算、連續計算以及廣告牌效果。
* Effects目錄。該目錄支持著色器特效計算,包括光照-材質、紋理機制、頂點著色、平面反射以及平面投影陰影。
* ObjectSystem目錄。該目錄包含了引擎的面向對象結構,例如運行期類型信息、智能指針、獨立命名和標識機制、流操作、premain初始化操作以及postmain終止操作。
* Rendering目錄。該目錄包含抽象渲染API、相機對象、光照、紋理和圖像、幀緩沖區和全局渲染狀態,包括混合操作、面剔除操作、材質、多邊形偏移、目標緩沖區狀態、線框模式以及深度緩沖區機制。
* SceneGraph目錄。該目錄支持場景圖管理行為,其中包括樹形結構、內部節點、葉節點、點-粒子圖元、直線圖元、三角形圖元、包圍體、轉換操作、層次結構剔除機制、頂點緩沖區以及索引緩沖區。
* Shaders目錄。該目錄針對著色器和像素著色器提供了基本支持,其中包括著色器程序、著色器常量、紋理采樣器以及程序和紋理圖像的共享機制。
* Shared Arrays目錄。針對對象間的數據共享,該目錄提供了相應的數組實例化方案。
* Sorting目錄。該目錄支持渲染排序操作,其中包括二分空間樹(BSP樹)和入口結構。
* Surfaces目錄。該目錄支持表面細分計算和渲染操作。
* Terrain目錄。該目錄支持連續/非連續細分級別的地形處理。
3. LibPhysics目錄
* Intersection目錄。該目錄包含區間(1D環境下)、軸對齊矩形(2D環境下)、軸對齊盒體(3D環境下)以及基于時間一致性的快速相交檢測。
* LCPSolver目錄。該目錄提供了線性互補問題的數值求解方案,包括凸多邊形和凸多面體之間的距離計算方法。
* ParticleSystem目錄。該目錄包含了粒子系統和質體-彈簧系統的物理學方案。
* RigidBody目錄。該目錄提供了剛體、凸多面體的質量和慣性計算方法。
4. LibRenderers目錄
* Dx9Renderer目錄。該目錄提供了基于Direct3D的抽象API實現。
* OpenGLRenderer目錄。該目錄提供了基于OpenGL的抽象API實現。
* SoftRenderer目錄。該目錄提供了基于軟件的抽象API實現。
5. LibApplications目錄
* Dx9Application目錄。該目錄包含了基于Direct3D渲染的應用程序層。
* OpenGLApplication目錄。該目錄包含了基于OpenGL渲染的應用程序層。
* SoftApplication目錄。該目錄包含了基于軟件渲染的應用程序層。
本書附帶光盤中的全部內容均已上傳至www.tup.com.cn,請讀者自行下載。
第1章 概述
1.1 圖形硬件和游戲發展史
1.2 本書版本與軟件發展史
1.3 章節導讀
第2章 圖形系統
2.1 基礎知識
2.1.1 坐標系
2.1.2 右手規則/左手規則和叉積計算
2.1.3 點和向量
2.2 轉換操作
2.2.1 線性轉換
2.2.2 仿射轉換
2.2.3 透視轉換
2.2.4 透視投影的特征
2.2.5 齊次點和矩陣 第1章 概述
1.1 圖形硬件和游戲發展史
1.2 本書版本與軟件發展史
1.3 章節導讀
第2章 圖形系統
2.1 基礎知識
2.1.1 坐標系
2.1.2 右手規則/左手規則和叉積計算
2.1.3 點和向量
2.2 轉換操作
2.2.1 線性轉換
2.2.2 仿射轉換
2.2.3 透視轉換
2.2.4 透視投影的特征
2.2.5 齊次點和矩陣
2.3 相機
2.3.1 透視相機模型
2.3.2 模型空間和對象空間
2.3.3 世界空間
2.3.4 視見空間、相機空間和眼睛空間
2.3.5 剪裁空間、投影空間或齊次空間
2.3.6 窗口空間
2.3.7 整合結果
2.4 剔除操作和剪裁操作
2.4.1 對象剔除操作
2.4.2 背面剔除
2.4.3 基于視錐體的剪裁操作
2.5 光柵化操作
2.5.1 直線段
2.5.2 圓形
2.5.3 橢圓
2.5.4 三角形
2.6 頂點屬性
2.6.1 顏色
2,6.2 光照和材質
2.6.3 紋理
2.6.4 透明度和混合操作
2.6.5 霧效果
2.6.6 其他
2.6.7 光柵化屬性
2.7 軟件、硬件和API
2.7.1 概述
2.7.2 可移植性和性能
2.8 API規范
2.8.1 矩陣的表達和存儲方式
2.8.2 矩陣累積計算
2.8.3 視見矩陣
2.8.4 投影矩陣
2.8.5 窗口坐標系
2.8.6 旋轉操作
2.8.7 基于圖形API的快速計算
第3章 渲染器
3.1 軟件渲染
3.1.1 頂點著色器
3.1.2 背面剔除
3.1.3 剪裁操作
3.1.4 光柵化操作
3.1.5 邊緩沖區
3.1.6 掃描線處理過程
3.1.7 像素著色器
3.1.8 模板緩沖機制
3.1.9 深度緩沖區
3.1.10 Alpha混合操作
3.1.11 顏色蒙版
3.1.12 紋理采樣
3.1.13 幀緩沖區
3.2 硬件渲染
3.3 抽象渲染API
3.3.1 構造和析構
3.3.2 相機管理
……
第4章 場景圖
第5章 控制器動畫
第6章 空間排序
第7章 細節級別
第8章 碰撞檢測
第9章 物理學
第10章 標準對象
第11章 曲線
第12章 曲面
第13章 包含測試
第14章 距離計算方案
第15章 相交計算
第16章 數值方案
第17章 旋轉計算
第18章 面向對象結構
第19章 內存管理
第20章 基于著色器的特效
附錄A在WildMagic中生成著色器
參考文獻