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