Ich habe ein Problem mit der Matrixrotation in libgdx. Ich drehe es mit der Methode matrix.rotate (Vector3-Achse, Gleitwinkel), aber die Drehung erfolgt in der Modellorientierung und ich brauche sie in der Weltorientierung.
Zum Beispiel:
on create () Methode:
matrix.rotate (neuer Vektor3 (0,0,1), 45);
Das ist ok, aber danach:
on render () Methode:
matrix.rotate (neuer Vektor3 (0,1,0), 1);
Ich muss es in der Weltachse drehen.
Antworten:
Sie müssen zuerst die Weltachse in das Koordinatensystem Ihres Modells transformieren. Sie können dies tun, indem Sie die aktuelle Transformationsmatrix des Modells durch Multiplikation auf den Achsenvektor anwenden. wie so:
quelle
Sie müssen den Weltraumrotationsvektor in den Modellraum umwandeln, bevor Sie die Rotation anwenden. Vektoren werden mit inverser Transponierung der Matrix transformiert, dh v '= Transponierung (invers (M)) * v
Da Modelle im Allgemeinen Modell-> Weltmatrix definieren, müssen Sie diese invertieren, um Welt-> Modellmatrix zu erhalten. Sie müssen also v '= transponieren (invers (invers (model_to_world))) * v = transponieren (model_to_view) * v berechnen, bevor Sie die Drehung anwenden. Beachten Sie auch, dass die w-Komponente des Vektors 0 sein muss
quelle