D3DXMATRIXA16-Struktur (D3dx9math.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, die von D3DX-Mathematischen Funktionen verwendet wird, wurde für eine verbesserte Leistung auf Intel Pentium 4-Prozessoren optimiert. Matrizen werden unabhängig davon ausgerichtet, wo sie erstellt werden: auf dem Programmstapel, im Heap oder im globalen Bereich. Die Ausrichtung erfolgt mit __declspec(align(16)), das mit Visual C++ .NET und visual C++ 6.0 funktioniert, nur 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 mathematischen D3DX-Funktionen verwenden, verwenden Sie _declspec(align(16)), um Byte ausgerichtete Vektoren und Quaternionen zu generieren, da sie deutlich 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 für einen 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 z. B. ein D3DXMATRIXA16-Objekt in einer Struktur oder Klasse befindet, kann ein Memcpy mit enger Verpackung erfolgen (16-Byte-Grenzen werden ignoriert). Dies würde zu Buildunterbrechungen führen, wenn der Compiler eine Matrix-Ausrichtung hinzufügen würde.

D3DXMATRIXA16

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
D3dx9math.h

Siehe auch

D3DX-Strukturen

D3DXMATRIX