3Dシーンで球の周りをカメラが周回できるようにしようとしています。クォータニオンのルートに行くことにしました。しかし、どこから始めればよいのか理解するのに少し苦労しています。正しく設定する方法と、カメラに適用する方法がわかりません。その後、画面上の仮想ジョイスティックでカメラを制御する方法がわかりません。私はクォータニオンについてたくさん読んだことがありますが、ほとんどの例では、3Dプログラミングでクォータニオンを使用する方法の例を示していません。何か案は?
1 に答える
簡単な答えを出そうとすると、最後に、OpenGL ESで使用できるように、クォータニオンをマトリックスに変換する必要があります。クォータニオンを使用して回転を保存し、チェーンします。シーンをレンダリングする準備ができたら、その「エンコードされた」回転をクォータニオンから(マトリックスとして)取得し、ビューマトリックスとしてパイプラインに渡します。
このソースコードをチェックして、Android対応のクイッククォータニオンクラスを確認してください(便利なtoMatrixメソッドがあります)。
例:
Quaternion camera_quat = new Quanternion(); // This creates an identity quaternion
camera_quat.setRotation(new Vector3(0.f, 1.f, 0.f), PI/2); // generate a 90 degrees rotation around the given vector
float [] matrix = camera_quat.toMatrix().getAsArray();
この時点で、ビューマトリックスとして使用できる回転マトリックスができました。
編集:あなたはOpengGL ES 1.xまたは2.0をターゲットにしていますか?対象のバージョンに応じて、そのマトリックスをどうするかについての指示を与えることができます。OpenGL 2.0(org.traxnet.ShadingZen.core.Cameraクラス)の詳細については、ShadingZenリポジトリを参照することもできます。
EDIT2:クォータニオンの優れた点の1つは、任意の軸を中心に簡単に回転できることです。上記の私のコードは(0,1,0)を中心に回転します。このアイデアを活用できます。1つはジョイスティックの軸用、もう1つはもう一方の軸用の2つのクォータニオンを定義します。両方のクォータニオンを乗算すると、両方の回転があります。マトリックスとビオラに変換してください!お役に立てば幸いです。