2017-05-23 2 views
0

Ich habe dieses Bild zu bekommen, muß ich Position Haus links von rechts Position Hause bekommen: enter image description hereWie kann ich die Matrizen multiplizieren zu einem bestimmten Ort (T * R * S)

Nun, in OpenGL es ist einfach,

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

Aber ich versuche zu verstehen, wie es tatsächlich 'hinter den Kulissen' funktioniert. Nehme ich einen Punkt, sagen wir links unten, und arbeite von dort?

Zum Beispiel:

v1 = (0,1,0,1) und erste Matrix wäre die Übersetzung einer so durch Matrix Übersetzung I Multipliziere wobei x = 6, y = 0, z = 0. und einen neuen Punkt bekommen, der v2 = (6,1,0,1) ist und von dort mit Skalierungs- und Rotationsmatrix fortfahren?

Frage: Was ist die homogene Matrix, die ich dazu brauche?

Ich denke, es wird nur in dieser Reihenfolge T R S Matrizen wird multipliziert und es wird produziert mir diese Matrix ich brauche ..

Antwort

1

Matrix-Multiplikation nicht kommutativ ist. Das ist eine phantastische Art zu sagen, dass eine Translation gefolgt von einer Rotation nicht dasselbe ist wie die Rotation gefolgt von einer Translation. Wenn Sie ein Beispiel durcharbeiten, werden Sie schnell auf die Idee kommen.

Jetzt gibt es zwei Konventionen, die Sie verwenden können, vor-multiplizieren oder nach-multiplizieren. Die meisten Grafiksysteme verwenden die weniger intuitive Konvention, so dass die zuletzt angewendete Operation tatsächlich zuerst angewendet wird. Dies macht es einfacher, mit hierarchischen Systemen umzugehen, die hoch in der Hierarchie umgesetzt wurden und die nicht in Rotationen einfließen sollen, wodurch große Kurbelwellenbewegungen erzeugt werden. Das macht es etwas schwieriger herauszufinden, was passiert, wenn man eine Sequenz von Operationen von Hand programmiert. Rückwärts arbeiten und die letzten Rotationen anwenden ist die Regel.

+0

Thx Malcolm. sehr detailliert –

1

Was Malcom McLean sagte, ist wahr. Ich dachte nur, ich würde erwähnen, dass TRS ist die Matrix, die Sie brauchen, ist es nur, dass Sie die Matrizen zuerst multiplizieren müssen, bevor Sie sie an Vertices, z. TRS * v, was die Umkehrung von S * (R * (T * v)) ist, worüber Sie gesprochen haben, indem Sie übersetzen, dann rotieren und dann einen Punkt skalieren. TLDR; Transformationen, die in einer einzigen Matrix kombiniert sind, werden in der umgekehrten Reihenfolge ihrer Multiplikation angewendet. z.B. TRS * v => skalieren, drehen und übersetzen v.

+0

Danke rationalcoder! –

Verwandte Themen