2017-06-27 3 views
0

Ich habe ein Objekt, das auf allen Achsen drehen kann, mein Problem ist, dass wenn Sie das Objekt auf der Y-Achse drehen (zB 90 °) die Drehung auf der Z-Achse falsch ist, weil es über das X dreht Achse, stattdessen funktioniert die Drehung auf der x-Achse weiterhin perfekt. Wenn die y-Achse auf 0 ° eingestellt ist, kehrt die Drehung der z-Achse wieder korrekt zurück.Lwjgl Rotation funktioniert nicht

zu drehen und zu übersetzen Objekt i verwende diesen Code:

public static Matrix4f createTransformationMatrix(Vector3f translation , float rx, float ry, float rz , float scale){ 
    Matrix4f matrix = new Matrix4f(); 
    matrix.setIdentity(); 
    Matrix4f.translate(translation,matrix,matrix); 
    Matrix4f.rotate((float) Math.toRadians(rx),new Vector3f(1, 0, 0) , matrix,matrix); 
    Matrix4f.rotate((float) Math.toRadians(ry),new Vector3f(0, 1, 0) , matrix,matrix); 
    Matrix4f.rotate((float) Math.toRadians(rz),new Vector3f(0, 0, 1) , matrix,matrix); 
    Matrix4f.scale(new Vector3f(scale, scale, scale), matrix, matrix); 
    return matrix;} 

Antwort

0

die in Euler-Winkel Drehungen eine intrinsische Singularität ist, Gimbal genannt arretieren. Verwenden Sie stattdessen Quaternionen für Rotationen (kann eine beliebige Achse angeben).

+0

Ich habe versucht, die Matrix mit Quaternionen zu generieren, aber das Ergebnis war in der Regel sehr wahrscheinlich, ich vermisse die Implementierung –

+0

@MaurizioTerreni was meinst du mit "Miss" die Umsetzung? – meowgoesthedog

+0

https://github.com/mauriziotrerreni/OpenGL/blob/master/src/com/unifi/ing/engine/utils/Maths.java Ich versuche, die Quaternion (siehe Zeile 34) zu implementieren, aber das Problem ist das gleiche. vielleicht stimmt meine Implementierung nicht –