Post by Martin Groedldie komplette transformationsmatrix M (enthält model, view,
projektions-transformationen) wird von rechts mit jedem vertex
multipliziert, also vertex_transformiert = M * vertex;
wenn ich jetzt bei der modelling-transformation eine rotation/skalierung
von rechts zu M dazumultipliziere dann wirkt sich diese als erstes auf
die vertices aus, deshalb wird lokal gedreht/skaliert (objekt befindet
sich sicher noch im ursprung).
nehme ich aber die linksmultiplikation so werden rotation/skalierung
tatsächlich als letztes auf die vertices angewendet, d.h das objekt
befindet sich nicht unbedingt mehr im ursprung. rotiert/skaliert wird
aber mit ursprung als referenz-punkt.
wie kann ich mir das bei einer translation vorstellen und wie
funktioniert die dritte transformations-methode leftTranslate?
Bei der Translation ist es genauso... im Prinzip kommt es nur auf die
"Vorstellung" an (wie im OpenGL Red Book beschrieben). Ich tu mir am
leichtesten, wenn ich mir die Modellingtransformation als "in umgekehrter
Reihenfolge als wie es auf den Vertex wirkt" vorstelle, die umgekehrte
Variante wäre "sich vorstellen, man transformiert ein Koordinatensystem",
funktioniert aber auch.
Nehmen wir T als Translationsmatrix, und M als irgendeine beliebige andere
(sagen wir mal Modelling-Transformation, also Rotieren, Translieren, Scalen
usw.):
T * M * vertex
führt zuerst M auf den Vertex aus, dann T.
M * T * vertex
führt zuerst T auf den Vertex aus, dann M.
Beim LEFTTRANSLATE Modus soll einfach nur vor der Transformation das Objekt
auf den Ursprung transliert werden, dann die Operation darauf
linksmultipliziert, dann darauf wieder die Translation rückgängig gemacht
werden.
Also, wenn M die Transformation ist, die man ausführen soll (z.B. Scaling),
und T die Translation in den Ursprung (also um -X, -Y, -Z, wenn X, Y, Z die
Objekt-Position ist... überleg dir, welche Elemente der aktuellen
Transformationsmatrix das sind), und T^-1 die Translation zurück vom
Ursprung (also um X, Y, Z), dann sollte die Matrix im LEFTTRANSLATE Modus so
aussehen:
T^-1 * M * T * aktuelleMatrix
Ciao,
Christoph
***@cg.tuwien.ac.at