2017-06-27 16 views
0

私はすべての軸で回転できるオブジェクトを持っていますが、y軸(たとえば90゜)でオブジェクトを回転させると、x軸を回転す​​るためz軸の回転が正しくない代わりに、x軸の回転は完全に機能し続けます。y軸が0°に設定されていると、z軸の回転が正しく機能するように戻ります。私はこのコードを使用してオブジェクトを回転および平行移動するLwjglの回転が動作しない

:オイラー角回転における真性特異すなわち

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;} 

答えて

0

は、ジンバルロックと呼ばれます。回転の代わりにクォータニオンを使用してください(任意の軸を指定できます)。

+0

私は四元数を使って行列を生成しようとしましたが、結果は通常、実装が間違っている可能性が非常に高いです。 –

+0

@MaurizioTerreni実装が「ミス」とはどういう意味ですか? – meowgoesthedog

+0

https://github.com/maurizioterreni/OpenGL/blob/master/src/com/unifi/ing/engine/utils/Maths.java私はクオータニオンを実装しようとしましたが(問題行34)、問題は同じです。多分私の実装は正しくありません –

関連する問題