Partilhar via


Transformar 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 visão localiza o espectador no espaço do mundo, transformando vértices em espaço de câmera. No espaço da câmera, a câmera, ou espectador, 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 visão desloca os objetos no mundo em torno da posição de uma 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 alguma posição lógica e orientação no espaço do mundo que é usado como ponto de partida para criar uma matriz de visão que será aplicada aos modelos em uma cena. A matriz de visão traduz 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, aplica-se a seguinte equação matricial geral.

equação da transformação de vista

Nesta fórmula, V é a matriz de visão que está sendo criada, T é uma matriz de translação que reposiciona objetos no mundo, e Rₓ através de Rz são matrizes de rotação que giram objetos ao longo dos eixos x, y e z. As matrizes de translação e rotação são baseadas na posição lógica da câmera e orientação no espaço do mundo. Assim, se a posição lógica da câmera no mundo é <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 fora de alinhamento com o espaço do mundo. Por exemplo, se a câmera mencionada anteriormente estiver apontando para baixo, seu eixo z está 90 graus (pi/2 radianos) fora de alinhamento com o eixo z do espaço mundial, como mostrado na ilustração a seguir.

ilustração do espaço de visão da câmara em comparação com o espaço mundial

As matrizes de rotação aplicam rotações de magnitude igual, mas oposta, aos modelos em cena. A matriz de visão para esta câmara 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 visão que ajusta a posição e orientação dos objetos na cena para que seu topo esteja voltado para a câmera, dando a aparência de que a câmera está acima do modelo.

Configurando uma matriz de exibição

O D3DXMatrixLookAtLH e D3DXMatrixLookAtRH funções auxiliares criam uma matriz de visualização com base na localização da câmara e num ponto de observaçã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 visualização para configurar várias estruturas de dados internas. Cada vez que você define uma nova matriz de mundo ou visão, o sistema recalcula as estruturas internas associadas. Definir essas matrizes com frequência é computacionalmente demorado. Você pode minimizar o número de cálculos necessários concatenando suas matrizes de mundo e exibição em uma matriz de visão de mundo que você define como a matriz de mundo e, em seguida, definindo a matriz de exibição para a identidade. Mantenha cópias em cache do mundo individual e visualize matrizes que você pode modificar, concatenar e redefinir a matriz mundial conforme necessário. Para maior clareza, as amostras raramente empregam essa otimização.

transforma