Struktur D3DXMATRIXA16 (D3DX10Math.h)

Catatan

Pustaka utilitas D3DX tidak digunakan lagi. Kami menyarankan agar Anda menggunakan DirectXMath sebagai gantinya.

Matriks selaras 4x4, 16 byte yang berisi metode dan kelebihan beban operator.

Sintaks

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

Anggota

_Ij

Jenis: FLOAT

Komponen (i, j) dari matriks, di mana i adalah nomor baris dan j adalah nomor kolom. Misalnya, _34 berarti sama dengan [a₃₄], komponen di baris ketiga dan kolom keempat.

Keterangan

Matriks selaras 16 byte, ketika digunakan oleh fungsi matematika D3DX, telah dioptimalkan untuk meningkatkan performa pada prosesor Intel Pentium 4. Matriks selaras terlepas dari tempat matriks dibuat: pada tumpukan program, dalam tumpukan, atau dalam cakupan global. Perataan dicapai menggunakan __declspec(align(16)), yang berfungsi dengan Visual C++ .NET dan dengan Visual C++ 6.0 hanya ketika paket prosesor diinstal. Sayangnya, tidak ada cara untuk mendeteksi paket prosesor, sehingga perataan byte diaktifkan secara default hanya dengan Visual C++ .NET.

Vektor dan kuaternion tidak diratakan byte dalam D3DX. Saat menggunakan vektor dan kuaternion dengan fungsi matematika D3DX, gunakan _declspec(align(16)) untuk menghasilkan vektor dan kuaternion sejajar byte, karena akan berkinerja jauh lebih baik. Definisi _declspec ditampilkan di sini.

#define D3DX_ALIGN16 __declspec(align(16))

Pengkompilasi lain menginterpretasikan D3DXMATRIXA16 sebagai D3DXMATRIX. Menggunakan struktur ini pada pengompilasi yang sebenarnya tidak menyelaraskan matriks bisa bermasalah karena tidak akan mengekspos bug yang mengabaikan perataan. Misalnya, jika objek D3DXMATRIXA16 berada di dalam struktur atau kelas, memcpy mungkin dilakukan dengan pengemasan yang ketat (mengabaikan batas 16 byte). Ini akan menyebabkan hentian build jika pengkompilasi kadang-kadang menambahkan penyelarasan matriks.

Ekstensi D3DXMATRIXA16

D3DXMATRIXA16 memiliki ekstensi C++berikut.

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;

Persyaratan

Persyaratan Nilai
Header
D3DX10Math.h

Lihat juga