私は、次のメカニックを使用して移動したいオブジェクトを持っています。左右の矢印は回転を変え、上矢印はその位置を増やします。 私の問題は、自分自身の周りのオブジェクトを回転させることができないか、それを見ている方向に動かすことができないということです。オブジェクトの周りを回転する
ドロー機能は次のとおりです。
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glScalef(SCALE, SCALE, SCALE);
glTranslatef(x, 0, 0);
glRotatef(rotationZ, 0, 0, 1);
glTranslatef(-x, 0, 0);
// Draw the object...
glPopMatrix();
押し検出コード:
case GLUT_KEY_UP:
teclas.up = GL_TRUE;
glutPostRedisplay();
break;
case GLUT_KEY_LEFT:
teclas.left = GL_TRUE;
glutPostRedisplay();
break;
case GLUT_KEY_RIGHT:
teclas.right = GL_TRUE;
glutPostRedisplay();
break;
タイマー機能:
if (teclas.up) {
x++;
}
if (teclas.left) {
rotationZ++;
}
if (teclas.right) {
rotationZ--;
}
glutPostRedisplay();
私はこのことについて、複数のスレッドを見てきましたし、私はx
変数の信号を変更しようとしましたが、何も動作していないようです。
編集(解決):
if (estado.teclas.up) {
homer.x+= (float)cos(homer.rotationZ * M_PI/180);
homer.y+= (float)sin(homer.rotationZ * M_PI/180);
}
そしてまた、私のDraw関数:
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glScalef(SCALE, SCALE, SCALE);
glTranslatef(x, 0, 0);
glRotatef(rotationZ, 0, 0, 1);
// Draw the object...
glPopMatrix();
私はちょうどこれに前進する責任があるタイマー機能の一部を変更し
この方法では、オブジェクトは常に向いている方向に移動します
概念的には、宇宙で個々のオブジェクトを回転させようとしているのですか、複数のオブジェクトを持つシーンの周りをカメラで回転しようとしていますか? –
また、btwはgl行列演算がポスト乗算されていることに注意してください。つまり、あなたの変換は、それらの関数とは逆の順序でスケールが「起こります」回転します。つまり、xを平行移動し、回転させ、+ xを翻訳してから、その順序でスケールします。それはあなたの意図ですか? –
@JasonC私は空間内の私の個々のオブジェクトを移動しようとしています、カメラは静的です。 2番目のコメントについてはわかりません。彼が正のX軸を向いているなら、上向きの矢印を押すと、彼はそのように移動します。私が彼を90度回転させると、彼はY軸に向かって移動します。それは理にかなっていますか? –