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
标头
D3DX10Math.h

另请参阅