glRotateFに問題があります。問題は次のとおりです。glRotatefが中心に戻る
デカルト座標系を表す3本の線は、カメラの視点を表しています。
このカメラは、その視点を回転させることができます。回転すると、回転した角度と軸のメッセージが送信されます。
私のアプリは、このメッセージを取得し、メソッドに送信し、この方法は、回転させた軸とその角度を取得し、このメソッドに送信します:
これまでのところ、すべてが働いている、問題はこの後に開始されます。
どの角度でも角度と角度Zで角度Xを回転するようにメッセージを送信すると、z軸だけ回転します。
デバッグでは、最初にX角度を与えられた角度で回転させたことに気付きましたが、角度でZを回転させると元の位置に戻ってからZを回転してXの回転を失います。この例のように :
初期位置:90°で
ローテートX:90°で
ローテートZ(あるべき姿):
90°の回転のZ(実際に何が起こっている):
私が欲しいものは、xを回転させ、その後、失うのx回転せずにZです。
これは私が軸を回転させるために呼び出す方法です:
openGl.rotateX((float) x);
openGl.rotateZ((float) z);
方法回転Xおよび回転Z
public void rotateX(float grau) {
mCubeRotation = grau;
eixoX = 1.0f;
eixoY = 0.0f;
eixoZ = 0.0f;
surfaceView.requestRender(); // line to call onDrawFrame
}
public void rotateZ(float grau) {
mCubeRotation = grau;
eixoX = 0.0f;
eixoY = 0.0f;
eixoZ = 1.0f;
surfaceView.requestRender(); // line to call onDrawFrame
}
これは回転のコードです:
@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -8.0f);
// When i rotate x eixoX equal 1 and the other axis is 0.
// When i rotate z eixoZ equal 1 and the other axis is 0.
gl.glRotatef(mCubeRotation, eixoX, eixoY, eixoZ);
mCube.draw(gl);
gl.glLoadIdentity();
lock = false;
}
誰かが助けている場合私、私は感謝します。