D3DXMATRIXA16 结构 (D3DX10Math.h)
注意
D3DX 实用工具库已弃用。 建议改用 DirectXMath 。
包含方法和运算符重载的 4x4、16 字节对齐矩阵。
语法
typedef struct D3DXMATRIXA16 {
FLOAT _ij;
} D3DXMATRIXA16, *LPD3DXMATRIXA16;
成员
-
_Ij
-
类型: FLOAT
-
(i, j) 矩阵的组件,其中 i 是行号,j 是列号。 例如,_34 与 [a₃₄]相同,第三行和第四列中的组件。
注解
D3DX 数学函数使用时,16 字节对齐矩阵已经过优化,以提高 IntelPentium 4 处理器的性能。 矩阵与创建位置无关:在程序堆栈、堆中或全局范围内对齐。 对齐是使用 __declspec (对齐 (16) ) 来完成的,它仅适用于 Visual C++ .NET 和 Visual C++ 6.0,前提是安装了处理器包。 遗憾的是,无法检测处理器包,因此默认情况下,仅使用 Visual C++ .NET 启用字节对齐。
向量和四元数在 D3DX 中不是字节对齐的。 将向量和四元数与 D3DX 数学函数配合使用时,请使用_declspec (对齐 (16) ) 生成字节对齐向量和四元数,因为它们的性能会明显更好。 此处显示了_declspec的定义。
#define D3DX_ALIGN16 __declspec(align(16))
其他编译器将 D3DXMATRIXA16 解释为 D3DXMATRIX。 在实际上不对齐矩阵的编译器上使用此结构可能会有问题,因为它不会公开忽略对齐的 bug。 例如,如果 D3DXMATRIXA16 对象位于结构或类中,则 memcpy 可能是使用紧密打包 (忽略 16 字节边界) 。 如果编译器有时要添加矩阵对齐,这将导致生成中断。
D3DXMATRIXA16 扩展
D3DXMATRIXA16 具有以下 C++ 扩展。
typedef struct _D3DXMATRIXA16 : public D3DXMATRIX
{
_D3DXMATRIXA16();
_D3DXMATRIXA16( CONST FLOAT * f);
_D3DXMATRIXA16( CONST D3DMATRIX& m);
_D3DXMATRIXA16( FLOAT _11, FLOAT _12, FLOAT _13, FLOAT _14,
FLOAT _21, FLOAT _22, FLOAT _23, FLOAT _24,
FLOAT _31, FLOAT _32, FLOAT _33, FLOAT _34,
FLOAT _41, FLOAT _42, FLOAT _43, FLOAT _44 );
void* operator new(size_t s);
void* operator new[](size_t s);
// The two operators below are not virtual operators. If you cast
// to D3DXMATRIX, do not delete using them
void operator delete(void* p);
void operator delete[](void* p);
struct _D3DXMATRIXA16& operator=(CONST D3DXMATRIX& rhs);
} _D3DXMATRIXA16;
typedef D3DX_ALIGN16 _D3DXMATRIXA16 D3DXMATRIXA16, *LPD3DXMATRIXA16;
要求
要求 | Value |
---|---|
标头 |
|