Compartir a través de


Transformación de vista (Direct3D 9)

En esta sección se presentan los conceptos básicos de la transformación de vista y se proporcionan detalles sobre cómo configurar una matriz de transformación de vista en una aplicación direct3D.

La transformación de vista localiza el visor en el espacio del mundo, lo que transforma los vértices en el espacio de la cámara. En el espacio de la cámara, la cámara o el visor, está en el origen, mirando en la dirección z positiva. Recuerde que Direct3D usa un sistema de coordenadas a la izquierda, por lo que z es positivo en una escena. La matriz de vista reubica los objetos del mundo alrededor de la posición de una cámara ( el origen del espacio de la cámara) y la orientación.

Hay muchas maneras de crear una matriz de vistas. En todos los casos, la cámara tiene cierta posición lógica y orientación en el espacio mundial que se usa como punto de partida para crear una matriz de vista que se aplicará a los modelos de una escena. La matriz de vista traduce y gira los objetos para colocarlos en el espacio de la cámara, donde la cámara está en el origen. Una manera de crear una matriz de vista es combinar una matriz de traducción con matrices de rotación para cada eje. En este enfoque, se aplica la siguiente ecuación de matriz general.

ecuación de la transformación de vista

En esta fórmula, V es la matriz de vista que se va a crear, T es una matriz de traducción que cambia la posición de los objetos del mundo y Rₓ a través de Rz son matrices de rotación que giran objetos a lo largo del eje x, y-y-z. Las matrices de traslación y rotación se basan en la posición lógica y la orientación de la cámara en el espacio mundial. Por lo tanto, si la posición lógica de la cámara en el mundo es <de 10.20.100>, el objetivo de la matriz de traducción es mover objetos -10 unidades a lo largo del eje X, -20 unidades a lo largo del eje Y y -100 unidades a lo largo del eje Z. Las matrices de rotación de la fórmula se basan en la orientación de la cámara, en términos de cuánto se giran los ejes del espacio de la cámara fuera de la alineación con el espacio mundial. Por ejemplo, si la cámara mencionada anteriormente apunta directamente hacia abajo, su eje z es de 90 grados (pi/2 radianes) fuera de la alineación con el eje z del espacio mundial, como se muestra en la ilustración siguiente.

ilustración del espacio de vista de la cámara en comparación con el espacio mundial

Las matrices de rotación aplican rotaciones iguales, pero opuestas, a los modelos de la escena. La matriz de vista de esta cámara incluye un giro de -90 grados alrededor del eje X. La matriz de rotación se combina con la matriz de traducción para crear una matriz de vista que ajuste la posición y la orientación de los objetos de la escena para que su parte superior esté orientada a la cámara, lo que da la apariencia de que la cámara está por encima del modelo.

Configuración de una matriz de vistas

Las funciones auxiliares D3DXMatrixLookAtLH y D3DXMatrixLookAtRH crean una matriz de vistas basada en la ubicación de la cámara y un punto de vista.

En el ejemplo siguiente se crea una matriz de vista para las coordenadas izquierdas.

D3DXMATRIX out;
D3DXVECTOR3 eye(2,3,3);
D3DXVECTOR3 at(0,0,0);
D3DXVECTOR3 up(0,1,0);
D3DXMatrixLookAtLH(&out, &eye, &at, &up);

Direct3D usa las matrices de mundo y vista para configurar varias estructuras de datos internas. Cada vez que establece una nueva matriz de mundo o vista, el sistema vuelve a calcular las estructuras internas asociadas. Establecer estas matrices con frecuencia consume mucho tiempo en el cálculo. Puede minimizar el número de cálculos necesarios mediante la concatenación de las matrices de mundo y vista en una matriz de vista global establecida como matriz de mundo y, a continuación, estableciendo la matriz de vista en la identidad. Mantenga copias almacenadas en caché de matrices individuales de mundo y vista que puede modificar, concatenar y restablecer la matriz mundial según sea necesario. Para mayor claridad, las muestras rara vez emplean esta optimización.

Transformaciones