2011-12-06 172 views
0

我有一個平面對象,我希望它能夠向前移動和左右旋轉。我希望飛機能夠朝着它所面對的方向前進。OpenGL旋轉和翻譯問題

這是我的代碼,但它不工作,我哪裏錯了?

directionX=sin(heading*M_PI/180.0); 
    directionZ=-cos(heading*M_PI/180.0); 

    if(keys['W']){ 
     eyeX += directionX; 
     eyeZ += directionZ; 
    } 
    if(keys['S']){ 
     eyeX -= directionX; 
     eyeZ -= directionZ; 
    } 
    if(keys[VK_LEFT]) 
     heading -= 1; 
    if(keys[VK_RIGHT]) 
     heading += 1; 

飛機使用航向旋轉,並且使用eyeX & EYEZ平移。

//Aircraft 
     glPushMatrix(); 
      glRotatef(-heading, 0,1,0); 
      glTranslatef(eyeX,eyeY,eyeZ); 
      model.speedDisplayFaceNormals(); 
      //model.drawBoundingBox(); 
      //model.drawOctreeLeaves(); 
     glPopMatrix(); 
+1

你應該更清楚地描述它是如何工作的。描述你如何選擇定位你的座標軸也是有意義的。 – unwind

+0

另外,請發佈您的glRotate/glTranslate代碼,或代碼,這些東西實際上影響您的矩陣。 –

+0

我添加了它如何使用它.. – user195257

回答

2

這有點在黑暗中拍攝不知道你得到的實際行爲,但你可以嘗試調用的順序切換到glRotatefglTranslatef

+0

這幾乎肯定是問題所在。在他的代碼中,它將首先將對象移動到「眼睛」,然後圍繞居住在(0,0,0)的Y軸旋轉,如果「眼睛」遠離原點,則會將對象移動到一個巨大的弧。 –

0

在OpenGL中,眼睛位於0,0,0處,向下看負Z軸。所以,如果你想使用基於眼睛/相機協調的系統,那麼你需要在開始時按照以下順序做兩件事:

1 - 根據系統中相機的方向旋轉場景 2 - glTranslatef(-EyeX,-EyeY,-EyeZ)這會將您帶到場景座標系中的0,0,0。

然後,您可以轉換爲您的對象的位置,相應地旋轉和渲染它們。幾年前,我在這方面做了一些筆記,這就是當我看着表示玩家位置第一人稱風格的眼球座標時的情況。