OpenGLでオブジェクト(惑星)を現在のカメラの回転に対して相対回転させるのに問題があります。最初はうまくいくようですが、ちょっと回転させた後、回転はカメラではなくなりました。OpenGLのカメラに対する相対的なオブジェクトの回転
私は画面上のmouseXとmouseYの動きのデルタ(差)を計算しています。回転は 'planetRotation'と呼ばれるVector3Dに格納されます。ここで
がplanetRotationに相対回転を計算するために私のコードです:理論的には
Vector3D rotateAmount;
rotateAmount.x = deltaY;
rotateAmount.y = deltaX;
rotateAmount.z = 0.0;
glPushMatrix();
glLoadIdentity();
glRotatef(-planetRotation.z, 0.0, 0.0, 1.0);
glRotatef(-planetRotation.y, 0.0, 1.0, 0.0);
glRotatef(-planetRotation.x, 1.0, 0.0, 0.0);
GLfloat rotMatrix[16];
glGetFloatv(GL_MODELVIEW_MATRIX, rotMatrix);
glPopMatrix();
Vector3D transformedRot = vectorMultiplyWithMatrix(rotateAmount, rotMatrix);
planetRotation = vectorAdd(planetRotation, transformedRot);
- これが何をされ、「rotateAmount」変数で回転を設定します。次に、このベクトルに逆モデル変換行列(rotMatrix)を乗算することで、これをモデル空間に入れます。
この変換された回転は、現在の回転に追加されます。これは設定されて変換されてレンダリングするために
:周りのウォブルのカメラの並べ替え、私が実行しようとしている回転
glPushMatrix();
glRotatef(planetRotation.x, 1.0, 0.0, 0.0);
glRotatef(planetRotation.y, 0.0, 1.0, 0.0);
glRotatef(planetRotation.z, 0.0, 0.0, 1.0);
//render stuff here
glPopMatrix();
、現在の変換に関連していないようです。
私は間違っていますか?