2017-05-23 7 views
0

Je cette image, je dois obtenir de la maison de la position de droite à la maison de la position de gauche: enter image description hereComment puis-je multiplier les matrices pour se rendre à un certain endroit (T * R * S)

Eh bien, en OpenGL, il est simple,

glTranslated(6,0,0); 
    glRotated(30, 0, 0, 1); 
    glScaled(2, 2, 0); 

Mais j'essaie de comprendre comment cela fonctionne réellement dans les coulisses. Est-ce que je prends un point, disons celui de gauche en bas, et travaillons à partir de là?

Par exemple:

v1 = (0,1,0,1) et première matrice serait la traduction d'une manière I multiplier par la matrice de traduction où x = 6, y = 0, z = 0. et obtenir un nouveau point qui est v2 = (6,1,0,1) et continuer à partir de là avec la matrice d'échelle et de rotation?

Question: Quelle est la matrice homogène dont j'ai besoin pour faire cela?

Je suppose que ce sera juste des matrices T R multipliait S dans cet ordre et il va me produire cette matrice .. je besoin

Répondre

1

multiplication n'est pas commutative. C'est une manière de dire qu'une traduction suivie d'une rotation n'est pas la même chose que la rotation suivie d'une traduction. Si vous travaillez sur un exemple, vous aurez rapidement l'idée.

Il existe maintenant deux conventions que vous pouvez utiliser: pré-multiplier ou post-multiplier. La plupart des systèmes graphiques utilisent la convention la moins intuitive, de sorte que l'opération appliquée en dernier est en fait appliquée en premier. Cela facilite le traitement des systèmes hiérarchiques qui se traduisent en haut dans la hiérarchie que vous ne voulez pas alimenter en rotations, en créant de grands mouvements de vilebrequins. Cela rend un peu plus difficile de déterminer ce qui se passe lors de la programmation manuelle d'une séquence d'opérations. Travailler en arrière, et appliquer les rotations en dernier est la règle générale.

+0

Thx Malcolm. très détaillé –

1

Ce que Malcom McLean a dit est vrai. Je pensais juste que je mentionnerais que TRS est la matrice dont vous avez besoin, c'est juste que vous devez d'abord multiplier les matrices avant de les appliquer aux sommets, par exemple. TRS * v, qui est l'inverse de faire S * (R * (T * v)), ce dont vous parliez en traduisant, puis en tournant, puis en mettant à l'échelle un point. TLDR; les transformations combinées en une seule matrice sont appliquées dans l'ordre inverse de leur multiplication. par exemple. TRS * v => redimensionner, faire pivoter, puis traduire v.

+0

Merci rationalcoder! –