2017-09-23 7 views
0

私は3Dゲームエンジンを作成する手段としてJOMLが追加されたLWJGLを使用してきました。 私はJeffrey(YouTube)のチュートリアルをゆるやかに辿ってきたので問題に遭遇しましたが、彼が作成したミニ数学ライブラリの代わりにJOMLライブラリを使用しています。私は見つけることができるすべてはAxisAngle4fでMatrix4f.getRotationを使用している、JOMLのドキュメントからJOML(LWJGL付き) - rx、ry、およびrz値から回転行列を取得しますか?

import org.joml.Matrix4f; 
import org.joml.Vector3f; 

public class Transform { 
    public static Matrix4f getPerspectiveProjection(float fov, int width, int height, float zNear, float zFar) { 
     return new Matrix4f().setPerspective(fov, width/height, zNear, zFar); 
    } 

    public static Matrix4f getTransformation(Vector3f translation, float rx, float ry, float rz, float scale) { 
     Matrix4f translationMatrix = new Matrix4f().setTranslation(translation); 

     // The first problem: 
     Matrix4f rotationMatrix = new Matrix4f().getRotation(rx, ry, rz); 

     Matrix4f scaleMatrix = new Matrix4f().initScale(scale); 

     return translationMatrix.mul(rotationMatrix.mul(scaleMatrix)); 
    } 

    public static Matrix4f getViewMatrix(Camera camera) { 
     Vector3f pos = camera.getPosition(); 

     Matrix4f translationMatrix = new Matrix4f().setTranslation(-pos.x, -pos.y, -pos.z); 
     Matrix4f rotationMatrix = new Matrix4f().initRotation(camera.getForward(), camera.getUp()); 

     return rotationMatrix.mul(translationMatrix); 
    } 
} 

はジェフリーの数学ライブラリからコピーされている、と私はJOMLを使用するように翻訳されていますクラスを、トランスフォームIを作りました

問題の核心は、どのように私はAxisAngle4fRXRY、および角度RZ を翻訳しますか?

答えて

0

JOMLメソッドのJavaDocsをよく慎重に読んでください。 Matrix4f.getRotation()は(アファイン)行列の回転部分を検索し、その回転を同じ回転を表す軸の角度に変換します。その方法はではありません。/ビルド 3つのオイラー角からの回転行列。

あなたの質問を非常に正確に述べる/言い換えよう: "3つのオイラー角(それぞれX軸、Y軸、Z軸の周りの角度)を与えられた3D回転を表すアフィン4x4行列を作成するにはどうすればいいですか? X、Y、Zの順に?

そしてその答えは、Matrix4f.rotationXYZ()またはポストマルチプレイMatrix4f.rotateXYZ()です。 別の回転順序が必要な場合は、回転軸と角度が指定されている場合、他の「回転した」rotationYXZ/ZYXとrotateYXZ/ZYXメソッドを参照したり、Matrix4f.rotate()を3回呼び出すこともできます。

GitHubプロジェクトのWikiと、GitHubのjoml-lwjgl3-demosプロジェクトのソースも参照することをお勧めします。

関連する問題