我有一個對象,我想要使用下面的機制來移動:左右箭頭更改其旋轉,上箭頭增加其位置。 我的問題是,我無法繞着自身旋轉物體,或者我無法將其移向被查看的方向。圍繞自身旋轉對象
繪製函數如下:
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);
}
而且也,我的繪圖功能:
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glScalef(SCALE, SCALE, SCALE);
glTranslatef(x, 0, 0);
glRotatef(rotationZ, 0, 0, 1);
// Draw the object...
glPopMatrix();
這樣,物體總是朝着它所面對的方向移動
從概念上講,你是想旋轉空間中的單個物體,還是試圖圍繞具有多個物體的場景旋轉相機? –
此外,順便說一句,注意gl矩陣操作後倍增,這意味着您的翻譯旋轉秤「發生」以相反的順序,你可以稱之爲這些功能。所以你要按順序翻譯-x,旋轉,翻譯+ x,然後縮放。這是你的意圖嗎? –
@JasonC我試圖在空間中移動我的個人物體,相機是靜態的。 關於第二條評論,我不知道。如果他面向正X軸,我希望他按照向上箭頭的方向移動。如果我將他旋轉90度,我希望他朝着Y軸移動。那有意義嗎? –