¿Cuál es el orden correcto para multiplicar las matrices de escala, rotación y traslación para una matriz mundial adecuada?

62

Asuma DirectX como la plataforma, si eso es importante. (Estoy seguro de que no lo es)

Suponiendo que tengo una matriz de escala, rotación y traslación adecuada, ¿en qué orden las multiplico para obtener una matriz mundial adecuada y por qué?

Por "adecuado", quiero decir "podría lanzarlos directamente a DirectX y obtener el marco 3D más utilizado".

Narf the Mouse
fuente
66
Aquí hay una explicación de "rotar luego traducir" (girar) vs "traducir luego rotar" (en órbita)
bobobobo
El enlace es bueno, pero con un pequeño error. debería ser un efecto rodante y no giratorio, porque la esfera tiende a alejarse de su posición (permaneciendo en el eje) mediante la traducción.
infoclogged

Respuestas:

77

Usualmente es escala, luego rotación y finalmente traslación. Con la denotación matricial (es decir, T para la matriz de traducción, R para la matriz de rotación y S para la matriz de escala) eso sería:

T * R * S

Sin embargo, si desea rotar un objeto alrededor de un cierto punto, entonces es escala, traslación de punto, rotación y, por último, traslación de objeto.

Por qué: Primero desea escalar el objeto para que las traducciones funcionen correctamente. Luego gira los ejes para que la traslación tenga lugar en los ejes ajustados. Finalmente, traduces el objeto a su posición.

En OpenGL puede usar gluLookAt para obtener una transformación completa de la cámara en una sola llamada. Es probable que haya una llamada similar para DirectX.

Raphael R.
fuente
11
Y recuerde, si desea transformarse alrededor del centro, primero tiene que traducir para compensar el centro para que esté en el origen, luego haga lo que ha indicado el usuario 392858, luego vuelva a traducirlo lejos del origen en la misma cantidad. En general, esto solo es necesario en 2D, donde tienes un sprite que tiene su parte superior izquierda en el origen.
Ingeniero
Excelente. :) Ahora solo tengo que descubrir por qué mi modelo ahora está invirtiendo en una vista horizontal y necesita el producto de punto en la luz direccional invertida en una vista vertical. No solía hacer eso, luego arreglé algunas matemáticas ...
Narf the Mouse
Solo tenga en cuenta que odio los signos negativos mal colocados. De todos modos, gracias, y puedes considerar esta pregunta hecha con. :)
Narf the Mouse
No hay problema, siempre me alegro de ayudar.
Raphael R.
2
@Matthias Hasta donde yo sé, eso depende de cómo se multiplica por el vector que desea transformar. Si multiplica M * v entonces sí, la respuesta ha invertido el orden.
bialpio
-4

La rotación y escala de traslación es la secuencia para realizar la operación.

nulo
fuente
-5

Creo que es la rotación y la dialación de traducción

Palanqueta
fuente
2
Esto no proporciona más explicaciones que las respuestas existentes.
DMGregory