2012-12-05 31 views
0

我創建了一個網格來表示地面走路。沒有gluLookAt的旋轉相機NOT場景

我有我的方向鍵連接起來旋轉/移動視圖:

switch(currentKey) 
     { 
     case sf::Key::Up: 
      z_trans+=1; 
      break; 

     case sf::Key::Down: 
      z_trans-=1; 
      break; 

     case sf::Key::Left: 
      y_angle-=0.5; 
      break; 

     case sf::Key::Right: 
      y_angle+=0.5; 
      break; 
     } 

隨着z_trans是在z上的翻譯,y_angle是在glRotatef在y軸的旋轉()。

我可以讓我的角色向前走,然後左右轉,然後繼續沿着他所面對的方向行走。唯一的問題是,當我離開原點(0,0,0)時,旋轉發生在原點周圍,而不是相機。所以如果我距離原點100個單位,我的角色基本上是遵循100個半徑圓的路徑。

沒有使用gluLookAt,沒有人有任何想法如何實現這個?完全難住,在這裏坐了好兩個小時試圖找出答案。

的完整代碼:

float elapsedTime=Clock.GetElapsedTime(); 
    if(elapsedTime>REFRESH_RATE){ 
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 


     glMatrixMode(GL_MODELVIEW); 
     glLoadIdentity(); 
     glTranslatef(x_trans, y_trans, z_trans); // y_trans == -25.f to keep us above the plane 
     glRotatef(x_angle,1,0,0); 
     glRotatef(y_angle,0,1,0); 
     glRotatef(z_angle,0,0,1); 

     currentKey=sf::Key::Num9; 

     if (Event.Type == sf::Event::KeyPressed) currentKey = Event.Key.Code; 
     switch(currentKey) 
     { 
     case sf::Key::Up: 
      z_trans+=1; 
      break; 

     case sf::Key::Down: 
      z_trans-=1; 
      break; 

     case sf::Key::Left: 
      y_angle-=0.5; 
      break; 

     case sf::Key::Right: 
      y_angle+=0.5; 
      break; 
     } 
     drawGrid(); 

     Clock.Reset(); 
    } 

回答

0

旋轉拳頭,然後翻譯第二?

編輯: 我剛剛檢查了一些我現有的代碼。

glLoadIdentity(); 
// Rotate around origin first 
glRotatef(RotY,-1.0f ,0.0f, 0.0f); 
glRotatef(RotX, 0.0f, 1.0f, 0.0f); 
// Then move the camera 
glTranslatef(-Player.x, -Player.y, -Player.z); 
+0

我得到的問題,那個軸不旋轉。如同,我可以面對我的右側90度,我會按向上移動'前進',我會移動到我的左側。 – Dezachu

+0

如果我調整RotY,RotX和Player變量..我得到正確的結果。 這就是正確的操作順序。 – JohnD

+0

嗨,JohnD,我正在尋找Android中的平移功能,如移動GLSurfaceview,而不是對象[我需要使用觸摸事件來移動GLSurfaceview]。如果你現在有任何想法,請給出任何示例代碼。對我來說完成我的任務會有所幫助。我在這裏奮鬥。我的示例代碼在這裏.http://www.mediafire.com/?09f9q51xnqhq2l7.which – harikrishnan