我是opengl.I的新手。在按下时旋转我的三角形。我的三角形没有显示。可能是代码中必须有很多错误,请查看它并给出正确的建议。下面是旋转代码。
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 'q':
exit(0);
break;
case 'a':
{
glPushMatrix();
glLoadIdentity();
glTranslatef(0,0,0);
glRotatef(90.0+rot, 0.0, 1.0, 0.0);
glBegin(GL_TRIANGLES);
glVertex3f( 1.0, 1.0, 0.0 );
glVertex3f( 3.0, 2.0, 0.0 );
glVertex3f( 3.0, 1.0, 0.0 );
glEnd();
glPopMatrix();
rot+=1;
}
break;
}
}
并且从MAIN FUNCTION这个函数通过下面的代码行调用。
...
glutKeyboardFunc(keyboard);
.......
答案 0 :(得分:2)
首先,你的控制器代码应该只处理递增旋转
case 'a':
rot += 1;
break;
您的主要显示功能应该处理其他所有事情。可能发生的是你的实现正在旋转并显示三角形,然后主循环然后立即改变你的视图。
答案 1 :(得分:1)
如果你坚持使用过剩(不是一个好主意,IMO,但这就是生活)你通常想把所有的绘图代码放在一个地方,并传递(指针)该功能(或称之为功能) )到glutDisplayFunc
。在键盘功能中,您只需执行以下操作:
rot+=1;
glutPostRedisplay();
glutPostRedisplay()
表示消息(至少在概念上)发布到队列中,表示需要更新显示。基于此,您传递给glutDisplayFunc
的任何函数都将被调用(虽然不一定立即)。
如果您已经完成了任何Windows API编程,那么这与通常的模式几乎相同:当您收到输入时,您会修改数据,并使Windows的矩形无效。为此,您将收到WM_PAINT消息,然后您的代码将更新显示。虽然细节不同,但您也可以看到与MacOS和X窗口系统类似的模式。