我正在尝试为门设置动画,这样如果按下按钮,门就会打开。在它编译的那一刻,当我按下按钮时,它会移动相机,然后我再也无法控制相机了。代码有什么问题?
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();
}
答案 0 :(得分:4)
OpenGL不是场景图, glTranslate , glRotate 和类似的不移动对象,它们会改变应用于绘制到屏幕的三角形的转换。因此,在事件处理程序中调用矩阵操作函数是没有意义的。实际上,大多数OpenGL函数(包括矩阵操作)都是从 display 函数调用的。此规则的唯一例外是数据上传,如纹理或缓冲区对象数据。
根据事件处理程序设置的变量,尝试在显示功能中设置动画。