freeglut中glutidlefunc()的重点是什么?

Jim*_*nes 7 c++ opengl glew freeglut

我得到了glutdisplayfunc()如何使显示循环和Iv在一些地方读取你应该把游戏机制放在glutidle而不是显示; 为什么你不能把它们放在一段时间(游戏运行)循环?

rad*_*al7 22

在事件驱动编程中,就像在交互式OpenGL应用程序中一样,主应用程序循环通常做三件事:

  1. 检查当前事件队列,并处理自上次检查以来发生的任何事件(例如,鼠标移动,按键等)
  2. 更新应用程序状态 - 诸如播放器和对象位置,游戏物理等等 - 准备下一个渲染帧
  3. 渲染当前帧.

GLUT glutMainLoop()为您隐含地执行这些步骤.几乎所有过剩的回调您注册(如glutKeyboardFunc(),glutReshapeFunc()等)采取1.照顾,并打电话给你设立想必做2功能.

现在,如果您注册了一个空闲函数glutIdleFunc(),则会在处理完所有当前事件后调用它.通常程序员实现他们的空闲功能只是调用他们用于渲染场景的例程(即他们传递的例程glutDisplayFunc()).如果渲染"需要一段时间"(比如接近所有时间渲染帧),这种方法可能会有问题,因为您可能没有时间完成渲染,然后处理下一帧的事件.如果你要插入你提到的while循环,你就会这样做,这会绕过GLUT的本机事件处理机制.与GLUT良好配合的更好方法是将空闲函数实现为仅调用glutPostRedisplay(),这告诉GLUT在处理完所有事件之后和调用空闲函数之前调度对显示函数的调用.