2011-08-18 3 views
-3

문을 움직이려 고 버튼을 누르면 문이 열리려고합니다. 현재 컴파일 중이고 버튼을 누르면 카메라가 움직이며 더 이상 카메라를 제어 할 수 없습니다. 코드에 어떤 문제가 있습니까? OpenGL은 장면 그래프 아니다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

, glTranslate, glRotate 주위 물체를 이동하지 않는 유사한들은 스크린에 그려 삼각형에 적용되는 변환을 변경. 따라서 이벤트 처리기에서 행렬 조작 함수를 호출하는 것은 의미가 없습니다. 사실 행렬 조작을 포함하는 대부분의 OpenGL 함수는 디스플레이 함수에서 호출해야합니다. 이 규칙의 유일한 예외는 텍스처 또는 버퍼 객체 데이터와 같은 데이터 업로드입니다.

이벤트 처리기에서 설정 한변수를 기준으로 디스플레이 기능 내에서 문을 움직이게 해보십시오.