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