Compartir a través de


Estructura D3DXMATRIXA16 (D3DX10Math.h)

Nota

La biblioteca de utilidades D3DX está en desuso. Se recomienda usar DirectXMath en su lugar.

Matriz alineada con 4x4, 16 bytes que contiene métodos y sobrecargas de operador.

Sintaxis

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

Miembros

_Ij

Tipo: FLOAT

El componente (i, j) de la matriz, donde i es el número de fila y j es el número de columna. Por ejemplo, _34 significa lo mismo que [a₃₄], el componente de la tercera fila y la cuarta columna.

Comentarios

Una matriz alineada de 16 bytes, cuando la usan las funciones matemáticas D3DX, se ha optimizado para mejorar el rendimiento en procesadores Intel Pentium 4. Las matrices se alinean independientemente de dónde se crean: en la pila del programa, en el montón o en el ámbito global. La alineación se realiza mediante __declspec(align(16)), que funciona con Visual C++ .NET y con Visual C++ 6.0 solo cuando se instala el paquete de procesador. Desafortunadamente, no hay ninguna manera de detectar el paquete de procesador, por lo que la alineación de bytes está activada de forma predeterminada solo con Visual C++ .NET.

Los vectores y los cuaterniones no están alineados por bytes en D3DX. Al usar vectores y cuaterniones con funciones matemáticas D3DX, use _declspec(align(16)) para generar vectores alineados de bytes y cuaterniones, ya que funcionarán significativamente mejor. Aquí se muestra la definición de _declspec.

#define D3DX_ALIGN16 __declspec(align(16))

Otros compiladores interpretan D3DXMATRIXA16 como D3DXMATRIX. El uso de esta estructura en un compilador que no alinea realmente la matriz puede ser problemático porque no expondrá errores que omiten la alineación. Por ejemplo, si un objeto D3DXMATRIXA16 está dentro de una estructura o clase, un memcpy podría realizarse con un empaquetado ajustado (ignorando los límites de 16 bytes). Esto provocaría interrupciones de compilación si el compilador fuera a agregar en algún momento la alineación de matrices.

Extensiones D3DXMATRIXA16

D3DXMATRIXA16 tiene las siguientes extensiones de 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;

Requisitos

Requisito Value
Encabezado
D3DX10Math.h

Consulte también