D3DX(Direct3D Extension)是一個已不推薦使用的高層API庫,它旨在補充微軟Direct3D圖形API。D3DX庫在Direct3D 7中被引入,並在之後的Direct3D 9中得到改進。它為常見的在矢量、矩陣和顏色上計算外觀和投影矩陣、樣條插值以及其他一些更複雜的任務(諸如編譯或組合用於3D圖形編程的着色器、壓縮骨架動畫存儲和矩陣堆棧)提供了類。它還為3D網格的複雜操作提供了函數,如切線空間計算、網格簡化、預計算輻射傳輸、頂點緩存友好性優化和條帶重排序,以及3D文本網格的生成器。2D特性包括繪製屏幕空間線條、基於文本和精靈的粒子系統的類。空間函數包括各種交叉例程、轉換重心坐標和邊界框/球生成器。

D3DX庫包含眾多預先編寫的例程,適用於大多數2D/3D應用程序(例如遊戲)所需的常見操作。因為Direct3D API相對底層,所以使用D3DX庫通常簡單許多。

微軟於2012年宣布,D3DX將在Windows 8 SDK以及其他開發框架(例如XNA)中不推薦使用英語Deprecation。着色器效果、紋理管理、幾何優化和網格模型可作為單獨來源通過CodePlex發布。[1]D3DX的數學結構,例如向量矩陣,將與XNAMath併入DirectXMath[2],球面諧波數學將以單獨來源提供。

接口 編輯

D3DX庫遵循COM面向對象程序設計模型。函數採用類C++接口訪問。

ID3DXEffect 編輯

ID3DXEffect接口用於編譯和綁定FX着色器(.fx)。它支持將命名着色器參數自動映射到硬件常量寄存器、參數池,將紋理映射到可用採樣器,指定「技術」和修改渲染狀態。

ID3DXFont 編輯

ID3DXFont接口可以用於繪製2D文本。另見D3DXCreateText,它可以創建文本的3D網格。

ID3DXLine 編輯

ID3DXLine接口可用於繪製特定模式的抗鋸齒屏幕空間線。

ID3DXMesh 編輯

ID3DXMesh接口用於存儲網格,和為頂點緩存友好性進行網格優化和條帶化重排序。D3DX中的部分函數在此接口上操作。例如用於為正常和視差映射等效果創建切線空間框架的D3DXComputeTangentFrame。這個類的一個後代是可以進行幾何簡化的ID3DXPMesh。

ID3DXPRTEngine 編輯

它用於預計算輻射傳輸英語Precomputed Radiance Transfer——一種類似球面諧波照明的技術,用於預計算的全局照明和軟環境照明。

ID3DXSprite 編輯

ID3DXSprite接口是一個C++類,用於繪製一個2D圖像到計算機圖形學中被稱為精靈的屏幕。在DirectX 7中,這通常使用DirectDraw API完成,而這已不推薦使用。

程序員通常只需要調用ID3DXSprite對象的Begin()方法來設置2D繪圖的渲染狀態和世界變換,調用Draw()方法將紋理添加到要繪製的列表,最後調用End()方法將圖像繪製到屏幕並恢復原始圖形狀態。

對D3DXSprite的一個常見批評是它比較緩慢,但這個問題已在Direct3D 9中得到解決。

函數 編輯

D3DXComputeTangentFrame 編輯

計算用於像正常/凹凸貼圖、視差映射和各向異性照明模型等效果的網格的切線空間框架。它通過重複處理解決切線空間不連續性的毛球問題。它不會處理反面的UV面,具有鏡像紋理映射的模型可能會因此遇到照明問題。

參考資料 編輯

  1. ^ Living without D3DX. MSDN. [2017-05-02]. (原始內容存檔於2013-09-20). 
  2. ^ Microsoft. Where is the DirectX SDK?. MSDN. [18 October 2012]. (原始內容存檔於2017-07-03). 

外部連結 編輯