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 * ST

    Wobei 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.


Anmelden zum Antworten