D3DX

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）中。着色器效果、纹理管理、几何优化和网格模型可作为单独来源通过CodePlex发布。D3DX的数学结构，例如向量和矩阵，将与XNAMath并入DirectXMath，球面谐波数学将以单独来源提供。

 接口 
D3DX库遵循COM面向对象程序设计模型。函数采用类C++接口访问。

 ID3DXEffect 
ID3DXEffect接口用于编译和绑定FX着色器（.fx）。它支持将命名着色器参数自动映射到硬件常量寄存器、参数池，将纹理映射到可用采样器，指定“技术”和修改渲染状态。

 ID3DXFont 
ID3DXFont接口可以用于绘制2D文本。另见D3DXCreateText，它可以创建文本的3D网格。

 ID3DXLine 
ID3DXLine接口可用于绘制特定模式的抗锯齿屏幕空间线。

 ID3DXMesh 
ID3DXMesh接口用于存储网格，和为顶点缓存友好性进行网格优化和条带化重排序。D3DX中的部分函数在此接口上操作。例如用于为正常和视差映射等效果创建切线空间框架的D3DXComputeTangentFrame。这个类的一个后代是可以进行几何简化的ID3DXPMesh。

 ID3DXPRTEngine 
它用于——一种类似球面谐波照明的技术，用于预计算的全局照明和软环境照明。

 ID3DXSprite 
ID3DXSprite接口是一个C++类，用于绘制一个2D图像到计算机图形学中被称为精灵的屏幕。在DirectX 7中，这通常使用DirectDraw API完成，而这已不推荐使用。

程序员通常只需要调用ID3DXSprite对象的Begin()方法来设置2D绘图的渲染状态和世界变换，调用Draw()方法将纹理添加到要绘制的列表，最后调用End()方法将图像绘制到屏幕并恢复原始图形状态。

对D3DXSprite的一个常见批评是它比较缓慢，但这个问题已在Direct3D 9中得到解决。

 函数 

 D3DXComputeTangentFrame 
计算用于像正常/凹凸贴图、视差映射和各向异性照明模型等效果的网格的切线空间框架。它通过重复处理解决切线空间不连续性的毛球问题。它不会处理反面的UV面，具有镜像纹理映射的模型可能会因此遇到照明问题。

 参考资料 

 外部链接 
 D3DX documentation at MSDN
 Living Without D3DX (MSDN Blogs)

Category:DirectX
Category:微軟API