Qual é a ordem correta para multiplicar as matrizes de escala, rotação e conversão para uma matriz mundial adequada?

62

Assuma o DirectX como plataforma, se isso for importante. (Certeza que não é)

Supondo que possuo uma matriz de escala, rotação e translação adequada, em que ordem as multiplico para resultar em uma matriz mundial adequada e por quê?

Por "adequado", quero dizer "eu poderia jogá-los diretamente no DirectX e obter o quadro 3D mais usado".

Narf, o rato
fonte
6
Aqui está uma explicação de "girar então traduzir" (fiação) vs "traduzir em seguida, gire" (órbita)
bobobobo
o link está bom, mas com um pequeno erro. deve ter efeito rolante e não girar, porque a esfera tende a se afastar de sua posição (permanecendo no eixo) ao traduzir.
Infoclogged

Respostas:

77

Geralmente é escala, rotação e, finalmente, tradução. Com a denotação da matriz (ou seja, T para a matriz de translação, R para a matriz de rotação e S para a matriz de escala), seria:

T * R * S

No entanto, se você deseja girar um objeto em torno de um determinado ponto, são escala, conversão de pontos, rotação e, finalmente, conversão de objetos.

Motivo: primeiro você deseja dimensionar o objeto para que as traduções funcionem corretamente. Em seguida, você gira os eixos para que a translação ocorra nos eixos ajustados. Finalmente, você traduz o objeto para sua posição.

No OpenGL, você pode usar o gluLookAt para obter uma transformação completa da câmera em uma chamada. Provavelmente, existe uma chamada semelhante para o DirectX.

Raphael R.
fonte
11
E lembre-se, se você deseja transformar em torno do centro, primeiro é necessário converter para compensar o centro para estar na origem, faça o que o usuário 392858 declarou, depois traduza-o novamente para longe da origem na mesma quantidade. Geralmente, porém, isso só é necessário em 2D, onde você tem algum sprite que tem o topo esquerdo na origem.
coordenador
Ótimo. :) Agora só tenho que descobrir por que meu modelo está invertendo agora em uma vista horizontal e precisa do produto escalar na luz direcional invertida em uma vista vertical. Ele não costumava fazer isso, então eu fixo um pouco de matemática ...
Narf o rato
Apenas deixe-se notar, eu odeio sinais negativos mal colocados. De qualquer forma, obrigado, e você pode considerar esta questão encerrada. :)
Narf the Mouse
Não tem problema, sempre feliz em ajudar.
Raphael R.
2
@ Matthias Até onde eu sei, isso depende de como você se multiplica pelo vetor que deseja transformar. Se você multiplicar M * v, então sim, a resposta inverteu a ordem.
Bialpio
-4

rotação e escala de conversão é a sequência para executar a operação

nada
fonte
-5

Eu acredito que é Rotação e Discagem de Tradução

Jimmy
fonte
2
Isso não fornece mais explicações do que as respostas existentes.
DMGregory