Partilhar via


Transformação de exibição (Direct3D 9)

Esta seção apresenta os conceitos básicos da transformação de exibição e fornece detalhes sobre como configurar uma matriz de transformação de exibição em um aplicativo Direct3D.

A transformação de exibição localiza o visualizador no espaço do mundo, transformando vértices em espaço da câmera. No espaço de câmera, a câmera ou visualizador está na origem, olhando na direção z positiva. Lembre-se de que o Direct3D usa um sistema de coordenadas canhoto, portanto, z é positivo em uma cena. A matriz de exibição realoca os objetos no mundo ao redor de uma posição de câmera - a origem do espaço da câmera - e orientação.

Há muitas maneiras de criar uma matriz de exibição. Em todos os casos, a câmera tem algumas posições e orientações lógicas no espaço do mundo que são usadas como ponto de partida para criar uma matriz de exibição que será aplicada aos modelos em uma cena. A matriz de visualização é convertida e gira objetos para colocá-los no espaço da câmera, onde a câmera está na origem. Uma maneira de criar uma matriz de exibição é combinar uma matriz de translação com matrizes de rotação para cada eixo. Nesta abordagem, a seguinte equação de matriz geral se aplica.

equação de transformação de exibição

Nessa fórmula, V é a matriz de visualização que está sendo criada, T é uma matriz de tradução que reposiciona objetos no mundo e Rₓ por Rz são matrizes de rotação que giram objetos ao longo do eixo x, y e z. As matrizes de translação e rotação se baseiam na posição e orientação lógicas da câmera no espaço do mundo. Portanto, se a posição lógica da câmera no mundo for <10,20,100>, o objetivo da matriz de translação é mover objetos -10 unidades ao longo do eixo x, -20 unidades ao longo do eixo y e -100 unidades ao longo do eixo z. As matrizes de rotação na fórmula são baseadas na orientação da câmera, em termos de quanto os eixos do espaço da câmera são girados para fora do alinhamento com o espaço do mundo. Por exemplo, se a câmera mencionada anteriormente estiver apontando diretamente para baixo, o seu eixo z é de 90 graus (pi/2 radianos) desalinhado com o eixo z do espaço do mundo, conforme mostrado na ilustração a seguir.

Ilustração do espaço de exibição da câmera em comparação com o espaço do mundo

As matrizes de rotação aplicam rotações de magnitude igual, porém oposta, aos modelos na cena. A matriz de visualização de câmera inclui uma rotação de -90 graus em torno do eixo x. A matriz de rotação é combinada com a matriz de translação para criar uma matriz de exibição que ajusta a posição e a orientação dos objetos na cena para que sua parte superior fique voltada para a câmera, dando a impressão de que a câmera está acima do modelo.

Configurando uma matriz de exibição

As funções auxiliares D3DXMatrixLookAtLH e D3DXMatrixLookAtRH criam uma matriz de exibição com base no local da câmera e em um ponto de visão.

O exemplo a seguir cria uma matriz de exibição para coordenadas canhotas.

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

O Direct3D usa as matrizes de mundo e modo de exibição para configurar várias estruturas de dados internas. Cada vez que você define um novo mundo ou uma matriz de exibição, o sistema recalcula as estruturas internas associadas. Definir essas matrizes com frequência é algo computacionalmente demorado. Você pode minimizar o número de cálculos necessários concatenando as matrizes de mundo e modo de exibição em uma matriz de exibição de mundo que você define como matriz de mundo, e, em seguida, definindo a matriz de visualização para a identidade. Mantenha cópias em cache das matrizes individuais de mundo e modo de exibição para que você possa modificar, concatenar e restaurar a matriz de mundo conforme necessário. Para maior clareza, os exemplos raramente empregam essa otimização.

Transformações