Quel est le bon ordre pour multiplier les matrices d'échelle, de rotation et de translation pour une matrice mondiale appropriée?

62

Supposez DirectX comme plate-forme, si cela est important. (À peu près sûr que ce n'est pas le cas)

En supposant que je dispose d’une matrice d’échelle, de rotation et de traduction appropriée, dans quel ordre les multiplie-t-on pour obtenir une matrice mondiale appropriée et pourquoi?

Par "correct", je veux dire "je pourrais les jeter directement dans DirectX et obtenir le cadre 3D le plus utilisé."

Narf la souris
la source
6
Voici une explication de "faire pivoter puis traduire" (rotation) vs "traduire puis faire pivoter" (orbite)
bobobobo
le lien est bon, mais avec une petite erreur. son effet doit être un effet de roulement et non de rotation, car la sphère a tendance à s’éloigner de sa position (en restant sur l’axe) par translation.
Infoclogged

Réponses:

77

Habituellement, c'est l'échelle, puis la rotation et enfin la traduction. Avec une dénotation de matrice (T pour la matrice de traduction, R pour la matrice de rotation et S pour la matrice de mise à l'échelle):

T * R * S

Toutefois, si vous souhaitez faire pivoter un objet autour d'un certain point, il s'agit d'une échelle, d'une translation de point, d'une rotation et enfin d'une traduction d'objet.

Pourquoi: Tout d'abord, vous souhaitez redimensionner l'objet pour que les traductions fonctionnent correctement. Ensuite, vous faites pivoter les axes pour que la translation se fasse sur les axes ajustés. Enfin, vous traduisez l'objet à sa position.

Dans OpenGL, vous pouvez utiliser gluLookAt pour obtenir une transformation complète de la caméra en un seul appel. Il existe probablement un appel similaire pour DirectX.

Raphael R.
la source
11
Et rappelez-vous, si vous souhaitez transformer le centre, vous devez d'abord traduire pour compenser le centre afin qu'il corresponde à l'origine, puis procédez comme indiqué par user392858, puis traduisez-le de nouveau du même montant. En règle générale, cela n’est nécessaire que dans la 2D, où vous avez un sprite qui est en haut à gauche à l’origine.
Ingénieur
Génial. :) Maintenant, je dois juste comprendre pourquoi mon modèle s’invertit maintenant dans une vue horizontale et a besoin du produit scalaire sur la lumière directionnelle inversée dans une vue verticale. Ce n’était pas le cas, puis j’ai corrigé quelques calculs ...
Narf the Mouse
Laissez-le juste être noté, je déteste les signes négatifs mal placés. Quoi qu'il en soit, merci, et vous pouvez examiner cette question avec. :)
Narf the Mouse
Pas de problème, toujours heureux d'aider.
Raphael R.
2
@ Matthias Pour autant que je sache, cela dépend de la façon dont vous multipliez ensuite par le vecteur que vous souhaitez transformer. Si vous multipliez M * v, la réponse est inversée.
Bialpio
-4

rotation de rotation et mise à l'échelle est la séquence pour effectuer l'opération

néant
la source
-5

Je crois que c’est la rotation et la numérotation de la traduction

Jimmy
la source
2
Cela ne fournit pas plus d'explication que les réponses existantes.
DMGregory