3

数日以来、Android OpenGL ES の四元数回転を実装しようとしています。input で関数を取得したいと思いますquaternion(x,y,z,w)。この関数は、GL10オブジェクトの回転を設定します。gl.glRotatef(y, 1.0f, 0.0f, 0.0f)GL10 オブジェクトには、オイラー角で位置を設定する機能しかありません。そのクラスhttps://github.com/TraxNet/ShadingZen/blob/master/library/src/main/java/org/traxnet/shadingzen/math/Quaternion.javaを試してマトリックスを作成しましたが、それでも機能しません。パラメータとしてGL10オブジェクトの位置を設定する方法を誰かが示す/書くことができればありがたいですquaternion(GL10setRotation(Quaternion q)).

4

1 に答える 1

3

glRotatef現在の行列と回転行列の単純な乗算 (および関連する境界チェック) です。

OpenGL 1 でこれを行う 1 つの方法 (リンクされた Quaternion クラスを使用) は次のとおりです。

Matrix rotation = new Matrix();
quaternion.toMatrix(rotation);
glMultMatrixf(rotation.getAsArray(), 0);

glRotateとは、行列の計算を自分で行ってを使用するよりglTranslateも遅いことに注意してください。一般に、パフォーマンスが重要な場合は、OpenGL 1 を完全に使用しないことをお勧めします。glLoadMatrix

于 2013-04-15T13:10:42.070 に答える