Condividi tramite


Struttura D3DXMATRIXA16 (D3dx9math.h)

Nota

La libreria di utilità D3DX è deprecata. È consigliabile usare invece DirectXMath .

Matrice allineata a 4x4, 16 byte che contiene i metodi e gli overload degli operatori.

Sintassi

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

Members

_Ij

Tipo: FLOAT

Componente (i, j) della matrice, dove i è il numero di riga e j è il numero di colonna. Ad esempio, _34 indica lo stesso di [a₃₄], il componente nella terza riga e nella quarta colonna.

Commenti

Una matrice allineata a 16 byte, quando usata dalle funzioni matematiche D3DX, è stata ottimizzata per migliorare le prestazioni nei processori Intel Pentium 4. Le matrici sono allineate indipendentemente dalla posizione in cui vengono create: nello stack di programmi, nell'heap o nell'ambito globale. L'allineamento viene eseguito usando __declspec(align(16)), che funziona con Visual C++ .NET e con Visual C++ 6.0 solo quando il pacchetto di processori è installato. Sfortunatamente, non è possibile rilevare il pacchetto di processori, quindi l'allineamento di byte viene attivato solo per impostazione predefinita con Visual C++ .NET.

I vettori e i quaternioni non sono allineati a byte in D3DX. Quando si usano vettori e quaternioni con funzioni matematiche D3DX, usare _declspec(align(16)) per generare vettori allineati a byte e quaternioni, perché eseguiranno notevolmente meglio. La definizione di _declspec è illustrata qui.

#define D3DX_ALIGN16 __declspec(align(16))

Altri compilatori interpretano D3DXMATRIXA16 come D3DXMATRIX. L'uso di questa struttura in un compilatore che non allinea effettivamente la matrice può essere problematico perché non espone bug che ignorano l'allineamento. Ad esempio, se un oggetto D3DXMATRIXA16 si trova all'interno di una struttura o di una classe, un memcpy potrebbe essere eseguito con una compressione stretta (ignorando i limiti di 16 byte). In questo modo, le interruzioni di compilazione potrebbero causare interruzioni di compilazione se il compilatore avrebbe dovuto aggiungere in qualche momento l'allineamento della matrice.

D3DXMATRIXA16

D3DXMATRIXA16 include le estensioni C++ seguenti.

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;

Requisiti

Requisito Valore
Intestazione
D3dx9math.h

Vedi anche

Strutture D3DX

D3DXMATRIX