D3DXMATRIXA16 结构 (D3dx9math.h)
注意
D3DX 实用工具库已弃用。 建议改用 DirectXMath 。
一个 4x4、16 字节对齐的矩阵,其中包含方法和运算符重载。
语法
typedef struct D3DXMATRIXA16 {
FLOAT _ij;
} D3DXMATRIXA16, *LPD3DXMATRIXA16;
成员
-
_Ij
-
类型: FLOAT
-
矩阵 (i,j) 分量,其中 i 是行号,j 是列号。 例如,_34 与 [a₃₄]相同,第三行和第四列中的组件。
备注
D3DX 数学函数使用时,16 字节对齐矩阵已经过优化,以提高 Intel Pentium 4 处理器的性能。 矩阵与它们的创建位置无关:在程序堆栈上、在堆中或在全局范围内对齐。 对齐是使用 __declspec (align (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;
要求
要求 | 值 |
---|---|
标头 |
|
另请参阅