我得到了glutdisplayfunc()如何使显示循环和Iv在一些地方读取你应该把游戏机制放在glutidle而不是显示;为什么你不能把它们放在一段时间(游戏运行)循环?
答案 0 :(得分:18)
在事件驱动编程中,就像在交互式OpenGL应用程序中一样,主应用程序循环通常会做三件事:
GLUT为您glutMainLoop()
隐式执行这些步骤。您注册的几乎所有GLUT回调(例如glutKeyboardFunc()
,glutReshapeFunc()
等)都会处理1.,并且您调用的函数可能会设置为2.
现在,如果您使用glutIdleFunc()
注册空闲函数,则会在处理完所有当前事件后调用它。通常程序员实现他们的空闲功能只是调用他们用于渲染场景的例程(即,他们传递给glutDisplayFunc()
的例程)。如果渲染"需要一段时间,这种方法可能会出现问题。 (比如接近所有渲染帧的时间),因为您可能没有时间完成渲染,然后处理下一帧的事件。如果你要插入你提到的while循环,那么你就是这样做了,它绕过了GLUT的原生事件处理机制。使用GLUT更好的方法是将空闲函数实现为仅调用glutPostRedisplay()
,它告诉GLUT在处理完所有事件之后和调用空闲函数之前调度对显示函数的调用。