Share via


D3DXMATRIXA16-Struktur (D3DX10Math.h)

Hinweis

Die D3DX-Hilfsprogrammbibliothek ist veraltet. Es wird empfohlen, stattdessen DirectXMath zu verwenden.

Eine 4x4-Matrix mit 16 Byte-Ausrichtung, die Methoden und Operatorüberladungen enthält.

Syntax

typedef struct D3DXMATRIXA16 {
  FLOAT _ij;
} D3DXMATRIXA16, *LPD3DXMATRIXA16;

Member

_Ij

Typ: FLOAT

Die (i, j) Komponente der Matrix, wobei i die Zeilennummer und j die Spaltennummer ist. Beispielsweise bedeutet _34 dasselbe wie [a₃₄], die Komponente in der dritten Zeile und der vierten Spalte.

Bemerkungen

Eine 16-Byte-ausgerichtete Matrix wurde bei Verwendung von D3DX-Mathematikfunktionen für eine verbesserte Leistung auf Intel Pentium 4-Prozessoren optimiert. Matrizen werden unabhängig davon ausgerichtet, wo sie erstellt werden: im Programmstapel, im Heap oder im globalen Bereich. Die Ausrichtung erfolgt nur mit __declspec(align(16)), die mit Visual C++ .NET und mit Visual C++ 6.0 funktioniert, wenn das Prozessorpaket installiert ist. Leider gibt es keine Möglichkeit, das Prozessorpaket zu erkennen, sodass die Byteausrichtung standardmäßig nur mit Visual C++ .NET aktiviert ist.

Vektoren und Quaternionen sind in D3DX nicht byte ausgerichtet. Wenn Sie Vektoren und Quaternionen mit D3DX-Mathematikfunktionen verwenden, verwenden Sie _declspec(align(16)), um byteorientierte Vektoren und Quaternionen zu generieren, da diese wesentlich besser funktionieren. Die Definition von _declspec wird hier gezeigt.

#define D3DX_ALIGN16 __declspec(align(16))

Andere Compiler interpretieren D3DXMATRIXA16 als D3DXMATRIX. Die Verwendung dieser Struktur auf einem Compiler, der die Matrix nicht tatsächlich ausrichtet, kann problematisch sein, da dadurch keine Fehler verfügbar gemacht werden, die die Ausrichtung ignorieren. Wenn sich beispielsweise ein D3DXMATRIXA16-Objekt in einer Struktur oder Klasse befindet, kann ein Memcpy mit engem Packen erfolgen (ohne 16-Byte-Grenzen). Dies würde zu Buildunterbrechungen führen, wenn der Compiler irgendwann die Matrix-Ausrichtung hinzufügen würde.

D3DXMATRIXA16-Erweiterungen

D3DXMATRIXA16 verfügt über die folgenden C++-Erweiterungen.

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;

Anforderungen

Anforderung Wert
Header
D3DX10Math.h

Weitere Informationen