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). 

外部連結