Matrix-Reihenfolge
-
Hi!
Also OpenGL benutzt ja transponierte Matrizen. Will man Skalieren, Rotieren und Translaieren(wird das so geschrieben?!) macht man folgendes:glTranslatef(X, Y, Z)
glRotatef(Angle, X, Y, Z)
glScalef(X, Y, Z)also werden Matrizen so berechnet:
MT = TT * RT * STWobei doch (A * T = BT * AT gilt ?oder
Jetzt habe ich mir ein Mathemodule geschrieben, das mit normalen Matrizen arbeiten kann die nicht transponiert sind.
Theoretisch müsste doch M = S * R * T gelten. Also genau umgekehrt.
Zum schluss lade ich die Matrix M transponiert so:
M.Transpose(R) ; R = MT
glLoadMatrixf(R.Components)Jedoch muss ich feststellen, das ich die Matrizen wieder in der Reihenfolge T * R * S multiplizieren muss, damit das gewünschte Ergebnis herauskommt. Bin ich zu blöd dafür?
mfg olli
-
Kann es sein, daß OpenGL die Vektoren von Links als Zeilenvektor dranmultipliziert?
-
OK, anscheinend verwendet OpenGL für glScalef, glRotatef usw. nicht transponierte Matrizen. Nur die resultierende ModelViewMatrix wird transponiert, so das sich die Multiplikationsreihenfolge umkehrt.
mfg olli
-
Das mit der Translation ist ansichtssache. Es kommt darauf an, ob man das Objekt verschieben will, oder das Koordinatensystem zum Objekt verschieben will. Dementsprechend ändert sich die Multiplikationsreihenfolge.