|
-- 會員 / 註冊 --
|
|
|
|
DirectX 12 3D 游戲開發實戰 ( 簡體 字) |
作者:[美] 弗蘭克·D.盧娜(Frank D. Luna) | 類別:1. -> 遊戲 -> DirectX |
譯者: |
出版社:人民郵電出版社 | 3dWoo書號: 50482 詢問書籍請說出此書號!【缺書】 NT售價: 740 元 |
出版日:12/1/2018 |
頁數:740 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787115479211 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言: |
內容簡介:Direct3D是微軟公司DirectX SDK集成開發包中的重要組成部分,是編寫高性能3D圖形應用程序的渲染庫,適用于多媒體、娛樂、即時3D動畫等廣泛和實用的3D圖形計算領域。 本書圍繞交互式計算機圖形學這一主題展開,著重介紹Direct3D的基礎知識和著色器編程的方法,并介紹了如何利用Direct3D來實現各種有趣的技術與特效,旨在為讀者學習圖形技術奠定堅實的基礎。本書包括3部分內容。第一部分介紹數學知識,涵蓋向量代數、矩陣代數和變換等內容。這是貫穿全書的數學工具,是讀者需要掌握的基礎內容。第二部分重點介紹Direct3D的基礎知識,展示用Direct3D來實現繪圖任務的基本概念與技術,如渲染流水線、紋理貼圖、混合、曲面細分等。第三部分則利用Direct3D來實現各種有趣的特效,如實例化與視錐體剔除、陰影貼圖、環境光遮蔽等。 本書適合希望通過Direct3D來學習3D編程的C++中級程序員閱讀,也可供已對Direct3D有一定了解或具有非DirectX API使用經驗的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.1 2D向量的偽叉積 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.7 Setter函數 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.3 DirectXMath矩陣示例程序 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.6 DirectXMath庫提供的變換函數 69 3.7 小結 70 3.8 練習 71
第二部分 Direct3D基礎
第4章 Direct3D的初始化 77 4.1 預備知識 77 4.1.1 Direct3D 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.10 DirectX圖形基礎結構 89 4.1.11 功能支持的檢測 92 4.1.12 資源駐留 93 4.2 CPU與GPU間的交互 94 4.2.1 命令隊列和命令列表 94 4.2.2 CPU與GPU間的同步 98 4.2.3 資源轉換 100 4.2.4 命令與多線程 101 4.3 初始化Direct3D 102 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.1 D3DApp類 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.1 3D視覺即錯覺? 140 5.2 模型的表示 141 5.3 計算機色彩基礎 142 5.3.1 顏色運算 143 5.3.2 128位顏色 143 5.3.3 32位顏色 144 5.4 渲染流水線概述 145 5.5 輸入裝配器階段 147 5.5.1 頂點 147 5.5.2 圖元拓撲 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.1 Light結構體 307 8.13.2 常用輔助函數 308 8.13.3 實現方向光源 310 8.13.4 實現點光源 310 8.13.5 實現聚光燈光源 311 8.13.6 多種光照的疊加 312 8.13.7 HLSL主文件 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.1 DDS格式概述 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.6 alpha通道 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.3 HLSL文件 411 12.2.4 SV_PrimitiveID語義 416 12.3 紋理數組 417 12.3.1 概述 417 12.3.2 對紋理數組進行采樣 417 12.3.3 加載紋理數組 418 12.3.4 紋理子資源 418 12.4 alpha-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.2 SetLens方法 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.1 DirectXMath碰撞檢測庫 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.1 ddx函數與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.2 四元數代數 647 22.2.1 定義與基本運算 647 22.2.2 特殊乘積 648 22.2.3 性質 648 22.2.4 轉換 649 22.2.5 共軛與范數 649 22.2.6 四元數的逆 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.4 四元數插值 657 22.5 DirectX數學庫中與四元數有關的 函數 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.8 M3DLoader類 688 23.5 角色動畫演示程序 689 23.6 小結 692 23.7 練習 694 附錄A Windows編程入門 695 A.1 概述 696 A.1.1 資源 696 A.1.2 事件、消息隊列、消息以及 消息循環 696 A.1.3 圖形用戶界面 698 A.1.4 Unicode 698 A.2 基本的Windows應用程序 699 A.3 講解基本Windows應用程序的 工作流程 702 A.3.1 程序中的頭文件、全局變量 以及函數聲明 702 A.3.2 WinMain 703 A.3.3 WNDCLASS結構體與 實例注冊 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.6 typedef關鍵字 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.1 DirectX數學庫中平面的表示 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
|
序: |
|