《DirectX 12 3D遊戲開發實戰》是2020年4月人民郵電出版社出版的圖書,作者是[美]弗蘭克·D·盧娜(Frank D·Luna)。
基本介紹
- 中文名:DirectX 12 3D遊戲開發實戰
- 作者:[美]弗蘭克·D·盧娜(Frank D·Luna)
- 出版時間:2020年4月
- 出版社:人民郵電出版社
- 頁數:742 頁
- ISBN:9787115479211
- 定價:148 元
- 開本:16 開
- 裝幀:平裝
內容簡介,適合人群,圖書目錄,
內容簡介
Direct3D是微軟公司DirectX SDK集成開發包中的重要組成部分,是編寫高性能3D圖形應用程式的渲染庫,適用於多媒體、娛樂、即時3D動畫等廣泛和實用的3D圖形計算領域。
本書圍繞互動式計算機圖形學這一主題展開,著重介紹Direct3D的基礎知識和著色器編程的方法,並介紹了如何利用Direct3D來實現各種有趣的技術與特效,旨在為讀者學習圖形技術奠定堅實的基礎。本書包括3部分內容。第一部分介紹數學知識,涵蓋向量代數、矩陣代數和變換等內容。這是貫穿全書的數學工具,是讀者需要掌握的基礎內容。第二部分重點介紹Direct3D的基礎知識,展示用Direct3D來實現繪圖任務的基本概念與技術,如渲染流水線、紋理貼圖、混合、曲面細分等。第三部分則利用Direct3D來實現各種有趣的特效,如實例化與視錐體剔除、陰影貼圖、環境光遮蔽等。
適合人群
本書適合希望通過Direct3D來學習3D編程的C++中級程式設計師閱讀,也可供已對Direct3D有一定了解或具有非DirectX API使用經驗的3D程式設計師參考。
圖書目錄
第 一部分 必備的數學知識
第 1章 向量代數
1.1 向量
1.1.1 向量與坐標系
1.1.2 左手坐標系與右手坐標系
1.1.3 向量的基本運算
1.2 長度和單位向量
1.3 點積
1.4 叉積
1.4.1 2D向量的偽叉積
1.4.2 通過叉積來進行正交化處理
1.5 點
1.6 利用DirectXMath庫進行向量運算
1.6.1 向量類型
1.6.2 載入方法和存儲方法
1.6.3 參數的傳遞
1.6.4 常向量
1.6.5 重載運算符
1.6.6 雜項
1.6.7 Setter函式
1.6.8 向量函式
1.6.9 浮點數誤差
1.7 小結
1.8 練習
第 2章 矩陣代數
2.1 矩陣的定義
2.2 矩陣乘法
2.2.1 定義
2.2.2 向量與矩陣的乘法
2.2.3 結合律
2.3 轉置矩陣
2.4 單位矩陣
2.5 矩陣的行列式
2.5.1 餘子陣
2.5.2 行列式的定義
2.6 伴隨矩陣
2.7 逆矩陣
2.8 用DirectXMath庫處理矩陣
2.8.1 矩陣類型
2.8.2 矩陣函式
2.8.3 DirectXMath矩陣示例程式
2.9 小結
2.10 練習
第3章 變換
3.1 線性變換
3.1.1 定義
3.1.2 矩陣表示法
3.1.3 縮放
3.1.4 旋轉
3.2 仿射變換
3.2.1 齊次坐標
3.2.2 仿射變換的定義及其矩陣
表示
3.2.3 平移
3.2.4 縮放和旋轉的仿射矩陣
3.2.5 仿射變換矩陣的幾何意義
3.3 變換的複合
3.4 坐標變換
3.4.1 向量的坐標變換
3.4.2 點的坐標變換
3.4.3 坐標變換的矩陣表示
3.4.4 坐標變換矩陣及其結合律
3.4.5 坐標變換矩陣及其逆矩陣
3.5 變換矩陣與坐標變換矩陣
3.6 DirectXMath庫提供的變換函式
3.7 小結
3.8 練習
第二部分 Direct3D基礎
第4章 Direct3D的初始化
4.1 預備知識
4.1.1 Direct3D 12概述
4.1.2 組件對象模型
4.1.3 紋理格式
4.1.4 交換鏈和頁面翻轉
4.1.5 深度緩衝
4.1.6 資源與描述符
4.1.7 多重採樣技術的原理
4.1.8 利用Direct3D進行多重採樣
4.1.9 功能級別
4.1.10 DirectX圖形基礎結構
4.1.11 功能支持的檢測
4.1.12 資源駐留
4.2 CPU與GPU間的互動
4.2.1 命令佇列和命令列表
4.2.2 CPU與GPU間的同步
4.2.3 資源轉換
4.2.4 命令與多執行緒
4.3 初始化Direct3D
4.3.1 創建設備
4.3.2 創建圍欄並獲取描述符的大小
4.3.3 檢測對4X MSAA質量級別的支持
4.3.4 創建命令佇列和命令列表
4.3.5 描述並創建交換鏈
4.3.6 創建描述符堆
4.3.7 創建渲染目標視圖
4.3.8 創建深度/模板緩衝區及其視圖
4.3.9 設定視口
4.3.10 設定裁剪矩形
4.4 計時與動畫
4.4.1 性能計時器
4.4.2 遊戲計時器類
4.4.3 幀與幀之間的時間間隔
4.4.4 總時間
4.5 應用程式框架示例
4.5.1 D3DApp類
4.5.2 非框架方法
4.5.3 框架方法
4.5.4 幀的統計信息
4.5.5 訊息處理函式
4.5.6 “初始化Direct3D演示”程式
4.6 調試Direct3D應用程式
4.7 小結
第5章 渲染流水線
5.1 3D視覺即錯覺·
5.2 模型的表示
5.3 計算機色彩基礎
5.3.1 顏色運算
5.3.2 128位顏色
5.3.3 32位顏色
5.4 渲染流水線概述
5.5 輸入裝配器階段
5.5.1 頂點
5.5.2 圖元拓撲
5.5.3 索引
5.6 頂點著色器階段
5.6.1 局部空間和世界空間
5.6.2 觀察空間
5.6.3 投影和齊次裁剪空間
5.7 曲面細分階段
5.8 幾何著色器階段
5.9 裁剪
5.10 光柵化階段
5.10.1 視口變換
5.10.2 背面剔除
5.10.3 頂點屬性插值
5.11 像素著色器階段
5.12 輸出合併階段
5.13 小結
5.14 練習
第6章 利用Direct3D繪製幾何體
6.1 頂點與輸入布局
6.2 頂點緩衝區
6.3 索引和索引緩衝區
6.4 頂點著色器示例
6.5 像素著色器示例
6.6 常量緩衝區
6.6.1 創建常量緩衝區
6.6.2 更新常量緩衝區
6.6.3 上傳緩衝區輔助函式
6.6.4 常量緩衝區描述符
6.6.5 根簽名和描述符表
6.7 編譯著色器
6.7.1 離線編譯
6.7.2 生成著色器彙編代碼
6.7.3 利用Visual Studio離線編譯著色器
6.8 光柵器狀態
6.9 流水線狀態對象
6.10 幾何圖形輔助結構體
6.11 立方體演示程式
6.12 小結
6.13 練習
第7章 利用Direct3D繪製幾何體(續)
7.1 幀資源
7.2 渲染項
7.3 渲染過程中所用到的常量數據
7.4 不同形狀的幾何體
7.4.1 生成柱體格線
7.4.2 生成球體格線
7.4.3 生成幾何球體格線
7.5 繪製多種幾何體演示程式
7.5.1 頂點緩衝區和索引緩衝區
7.5.2 渲染項
7.5.3 幀內資源和常量緩衝區視圖
7.5.4 繪製場景
7.6 細探根簽名
7.6.1 根參數
7.6.2 描述符表
7.6.3 根描述符
7.6.4 根常量
7.6.5 更複雜的根簽名示例
7.6.6 根參數的版本控制
7.7 陸地與波浪演示程式
7.7.1 生成柵格頂點
7.7.2 生成柵格索引
7.7.3 套用計算高度的函式
7.7.4 根常量緩衝區視圖
7.7.5 動態頂點緩衝區
7.8 小結
7.9 練習
第8章 光照
8.1 光照與材質的互動
8.2 法向量
8.2.1 計算法向量
8.2.2 變換法向量
8.3 參與光照計算的一些關鍵向量
8.4 朗伯餘弦定律
8.5 漫反射光照
8.6 環境光照
8.7 鏡面光照
8.7.1 菲涅耳效應
8.7.2 表面粗糙度
8.8 光照模型的概述
8.9 材質的實現
8.10 平行光源
8.11 點光源
8.12 聚光燈光源
8.13 光照的具體實現
8.13.1 Light結構體
8.13.2 常用輔助函式
8.13.3 實現方向光源
8.13.4 實現點光源
8.13.5 實現聚光燈光源
8.13.6 多種光照的疊加
8.13.7 HLSL主檔案
8.14 光照演示程式
8.14.1 頂點格式
8.14.2 計算法線
8.14.3 更新光照的方向
8.14.4 更新根簽名
8.15 小結
8.16 練習
第9章 紋理貼圖
9.1 紋理與資源的回顧
9.2 紋理坐標
9.3 紋理數據源
9.3.1 DDS格式概述
9.3.2 創建DDS檔案
9.4 創建以及啟用紋理
9.4.1 載入DDS檔案
9.4.2 著色器資源視圖堆
9.4.3 創建著色器資源視圖描述符
9.4.4 將紋理綁定到流水線
9.5 過濾器
9.5.1 放大
9.5.2 縮小
9.5.3 各向異性過濾
9.6 定址模式
9.7 採樣器對象
9.7.1 創建採樣器
9.7.2 靜態採樣器
9.8 在著色器中對紋理進行採樣
9.9 板條箱演示程式
9.9.1 指定紋理坐標
9.9.2 創建紋理
9.9.3 設定紋理
9.9.4 更新HLSL部分代碼
9.10 紋理變換
9.11 附有紋理的山川演示程式
9.11.1 生成柵格紋理坐標
9.11.2 鋪設紋理
9.11.3 紋理動畫
9.12 小結
9.13 練習
第 10章 混合
10.1 混合方程
10.2 混合運算
10.3 混合因子
10.4 混合狀態
10.5 混合示例
10.5.1 禁止顏色的寫操作
10.5.2 加法混合與減法混合
10.5.3 乘法混合
10.5.4 透明混合
10.5.5 混合與深度緩衝區
10.6 alpha通道
10.7 裁剪像素
10.8 霧
10.9 小結
10.10 練習
第11章 模板
11.1 深度/模板緩衝區的格式及其資源數據的清理
11.2 模板測試
11.3 描述深度/模板狀態
11.3.1 深度信息的相關設定
11.3.2 模板信息的相關設定
11.3.3 創建和綁定深度/模板狀態
11.4 實現平面鏡效果
11.4.1 鏡像概述
11.4.2 定義鏡像的深度/模板狀態
11.4.3 繪製場景
11.4.4 繞序與鏡像
11.5 實現平面陰影
11.5.1 平行光陰影
11.5.2 點光陰影
11.5.3 通用陰影矩陣
11.5.4 使用模板緩衝區防止雙重混合
11.5.5 編寫陰影部分的代碼
11.6 小結
11.7 練習
第12章 幾何著色器
12.1 編寫幾何著色器
12.2 以公告牌技術實現森林效果
12.2.1 概述
12.2.2 頂點結構體
12.2.3 HLSL檔案
12.2.4 SV_PrimitiveID語義
12.3 紋理數組
12.3.1 概述
12.3.2 對紋理數組進行採樣
12.3.3 載入紋理數組
12.3.4 紋理子資源
12.4 alpha-to-coverage技術
12.5 小結
12.6 練習
第 13章 計算著色器
13.1 執行緒與執行緒組
13.2 一個簡單的計算著色器
13.3 數據的輸入與輸出資源
13.3.1 紋理輸入
13.3.2 紋理輸出與無序訪問視圖
13.3.3 利用索引對紋理進行採樣
13.3.4 結構化緩衝區資源
13.3.5 將計算著色器的執行結果複製到系統記憶體
13.4 執行緒標識的系統值
13.5 追加緩衝區與消費緩衝區
13.6 共享記憶體與執行緒同步
13.7 圖像模糊演示程式
13.7.1 圖像模糊理論
13.7.2 渲染到紋理技術
13.7.3 圖像模糊的實現概述
13.7.4 計算著色器程式
13.8 拓展資料
13.9 小結
13.10 練習
第 14章 曲面細分階段
14.1 曲面細分的圖元類型
14.2 外殼著色器
14.2.1 常量外殼著色器
14.2.2 控制點外殼著色器
14.3 鑲嵌器階段
14.3.1 四邊形面片的曲面細分示例
14.3.2 三角形面片的曲面細分示例
14.4 域著色器
14.5 對四邊形進行鑲嵌化處理
14.6 三次貝塞爾四邊形面片
14.6.1 貝塞爾曲線
14.6.2 三次貝塞爾曲面
14.6.3 計算三次貝塞爾曲面的相關代碼
14.6.4 定義面片的幾何形狀
14.7 小結
14.8 練習
第三部分 主 題 篇
第 15章 構建第 一人稱視角的攝像機與動態索引
15.1 重溫取景變換
15.2 攝像機類
15.3 攝像機類中的方法實現選講
15.3.1 返回XMVECTOR類型變數的方法
15.3.2 SetLens方法
15.3.3 推導視錐體信息
15.3.4 與攝像機相關的變換操作
15.3.5 構建觀察矩陣
15.4 攝像機演示程式的若干註解
15.5 動態索引
15.6 小結
15.7 練習
第 16章 實例化與視錐體剔除
16.1 硬體實例化
16.1.1 繪製實例數據
16.1.2 實例數據
16.1.3 創建實例緩衝區
16.2 包圍體與視錐體
16.2.1 DirectXMath碰撞檢測庫
16.2.2 包圍盒
16.2.3 包圍球
16.2.4 視錐體
16.3 視錐體剔除
16.4 小結
16.5 練習
第 17章 拾取
17.1 螢幕空間到投影視窗的變換
17.2 位於世界空間與局部空間中的
拾取射線
17.3 射線與格線的相交檢測
17.3.1 射線與軸對齊包圍盒的
相交檢測
17.3.2 射線與球體的相交檢測
17.3.3 射線與三角形的相交檢測
17.4 套用例程
17.5 小結
17.6 練習
第 18章 立方體貼圖
18.1 什麼是立方體貼圖
18.2 環境貼圖
18.3 繪製天空紋理
18.4 模擬反射
18.5 動態立方體圖
18.5.1 動態立方體圖輔助類
18.5.2 構建立方體圖資源
18.5.3 分配額外的描述符堆空間
18.5.4 構建描述符
18.5.5 構建深度緩衝區
18.5.6 立方體圖的視口與裁剪矩形
18.5.7 設定立方體圖攝像機
18.5.8 對立方體圖進行繪製
18.6 用幾何著色器繪製動態立方體圖
18.7 小結
18.8 練習
第 19章 法線貼圖
19.1 使用法線貼圖的動機
19.2 什麼是法線貼圖
19.3 紋理空間/切線空間
19.4 頂點切線空間
19.5 在切線空間與物體空間之間進行轉換
19.6 法線貼圖的著色器代碼
19.7 小結
19.8 練習
第 20章 陰影貼圖
20.1 渲染場景深度
20.2 正交投影
20.3 投影紋理坐標
20.3.1 代碼實現
20.3.2 視錐體之外的點
20.3.3 正交投影
20.4 什麼是陰影貼圖
20.4.1 算法描述
20.4.2 偏移與走樣
20.4.3 百分比漸近過濾
20.4.4 構建陰影圖
20.4.5 陰影因子
20.4.6 陰影圖檢測
20.4.7 渲染陰影圖
20.5 過大的PCF核
20.5.1 ddx函式與ddy函式
20.5.2 較大PCF核問題的解決方案
20.5.3 較大PCF核問題的另一種解決方案
20.6 小結
20.7 練習
第 21章 環境光遮蔽
21.1 通過投射光線實現環境光遮蔽
21.2 螢幕空間環境光遮蔽
21.2.1 法線與深度值的渲染過程
21.2.2 環境光遮蔽的渲染過程
21.2.3 模糊過程
21.2.4 使用環境光遮蔽圖
21.3 小結
21.4 練習
第 22章 四元數
22.1 複數回顧
22.1.1 定義
22.1.2 複數的幾何意義
22.1.3 極坐標表示法與旋轉操作
22.2 四元數代數
22.2.1 定義與基本運算
22.2.2 特殊乘積
22.2.3 性質
22.2.4 轉換
22.2.5 共軛與範數
22.2.6 四元數的逆
22.2.7 極坐標表示法
22.3 單位四元數及其旋轉操作
22.3.1 旋轉運算元
22.3.2 將四元數旋轉運算元轉換為矩陣形式
22.3.3 將旋轉矩陣變換為四元數旋轉運算元
22.3.4 複合
22.4 四元數插值
22.5 DirectX數學庫中與四元數有關的函式
22.6 旋轉演示程式
22.7 小結
22.8 練習
第 23章 角色動畫
23.1 框架層次
23.2 蒙皮格線
23.2.1 定義
23.2.2 重新推導將骨骼變換至根坐標系的公式
23.2.3 偏移變換
23.2.4 驅動骨架運動
23.2.5 計算最終變換
23.3 頂點混合
23.4 從檔案中載入動畫數據
23.4.1 檔案頭
23.4.2 材質
23.4.3 子集
23.4.4 頂點數據與三角形
23.4.5 骨骼偏移變換
23.4.6 層次結構
23.4.7 動畫數據
23.4.8 M3DLoader類
23.5 角色動畫演示程式
23.6 小結
23.7 練習
附錄A Windows編程入門
A.1 概述
A.1.1 資源
A.1.2 事件、訊息佇列、訊息以及訊息循環
A.1.3 圖形用戶界面
A.1.4 Unicode
A.2 基本的Windows應用程式
A.3 講解基本Windows應用程式的工作流程
A.3.1 程式中的頭檔案、全局變數以及函式聲明
A.3.2 WinMain
A.3.3 WNDCLASS結構體與實例註冊
A.3.4 創建並顯示視窗
A.3.5 訊息循環
A.3.6 視窗過程
A.3.7 訊息框函式
A.4 一種更靈活的訊息循環
A.5 小結
A.6 練習
附錄B 高級著色器語言參考
B.1 變數類型
B.1.1 標量類型
B.1.2 向量類型
B.1.3 矩陣類型
B.1.4 數組
B.1.5 結構體
B.1.6 typedef關鍵字
B.1.7 變數的修飾符
B.1.8 強制類型轉換
B.2 關鍵字與運算符
B.2.1 關鍵字
B.2.2 運算符
B.3 程式中的控制流
B.4 函式
B.4.1 用戶自定義函式
B.4.2 內置函式
B.4.3 常量緩衝區的封裝規則
附錄C 解析幾何學選講
C.1 射線、直線以及線段
C.2 平行四邊形
C.3 三角形
C.4 平面
C.4.1 DirectX數學庫中平面的表示
C.4.2 空間點與平面的位置關係
C.4.3 構建平面
C.4.4 對平面進行規範化處理
C.4.5 對平面進行變換
C.4.6 平面內離指定點最近的點
C.4.7 射線與平面的相交檢測
C.4.8 反射向量
C.4.9 反射點
C.4.10 反射矩陣
C.5 練習
附錄D 參考資料