2011-08-18 36 views
-3

我正在嘗試使門動畫,以便如果我按下按鈕,門就會打開。在編譯的那一刻,當我按下按鈕時,它會移動相機,然後我無法再控制相機。代碼有什麼問題?OpenGL門動畫

glPushMatrix; 
glTranslatef (door_Xpos,0.0, 0.0); 
glRotatef (door_Angle, 1,0,0); 

glBegin(GL_QUADS); 

//Door left 
glColor3f(0.2f, 0.2f, 0.2f); 
glVertex3f(-10.0, 0.0, -25.0); 
glColor3f(0.4f, 0.4f, 0.4f); 
glVertex3f(-10.0, 15.0, -25.0); 
glColor3f(0.6f, 0.6f, 0.6f); 
glVertex3f(0.0, 15.0, -25.0); 
glColor3f(0.8f, 0.8f, 0.8f); 
glVertex3f(0.0, 0.0, -25.0); 

//door right 
glColor3f(0.2f, 0.2f, 0.2f); 
glVertex3f(10.0, 0.0, -25.0); 
glColor3f(0.4f, 0.4f, 0.4f); 
glVertex3f(10.0, 15.0, -25.0); 
glColor3f(0.6f, 0.6f, 0.6f); 
glVertex3f(0.0, 15.0, -25.0); 
glColor3f(0.8f, 0.8f, 0.8f); 
glVertex3f(0.0, 0.0, -25.0); 

glPopMatrix; 

void keyboard(unsigned char key, int x, int y) 
{ 
    switch (key) 
    { 
     case 'a': 
     case 'A': 
      glTranslatef(5.0, 0.0, 0.0); 
      break; 

     case 'd': 
     case 'D': 
      glTranslatef(-5.0, 0.0, 0.0); 
      break; 

     case 'w': 
     case 'W': 
      glTranslatef(0.0, 0.0, 5.0); 
      break; 

     case 's': 
     case 'S': 
      glTranslatef(0.0, 0.0, -5.0); 
      break; 

     case 't': 
     case 'T': 
      if (is_depth) 
      { 
       is_depth = 0; 
       glDisable(GL_DEPTH_TEST); 
      } 
      else 
      { 
       is_depth = 1; 
       glEnable(GL_DEPTH_TEST); 
      } 

     #Fall-through... 
     case 'o': 
     case 'O': 
      door_Xpos += 90.0; 
      break; 
    } 
    display(); 
} 

回答

4

OpenGL是不是一個場景圖,glTranslateglRotate和類似的不走動的對象,他們改變應用到繪製到屏幕上的三角形的轉變。因此,在事件處理程序中調用矩陣操作函數是沒有意義的。實際上,大多數OpenGL函數(包括矩陣操作)都將從顯示屏函數中調用。這條規則的唯一例外是數據上傳,如紋理或緩衝區對象數據。

嘗試根據由事件處理程序設置的變量在顯示功能中設置動畫。