我得到glutdisplayfunc()如何使显示器环和四世,你应该把游戏机制在glutidle而不是显示一些地方读取; 为什么你不能只是把它们在一段时间(gameisrunning)循环?
Answer 1:
在事件驱动编程,就像你在交互式OpenGL应用程序有,主要应用循环通常会做三两件事:
- 检查当前事件队列,并处理任何事件(例如,鼠标移动,按键等)自上次检查以来发生的
- 更新应用程序的状态 - 比如玩家和物体的位置,游戏物理,等等 - 在准备下一个渲染帧
- 呈现当前帧。
GLUT确实隐含在这些步骤glutMainLoop()
为您服务。 几乎所有过剩的回调您注册(例如, glutKeyboardFunc()
glutReshapeFunc()
等),采取1照顾,并打电话给你设立想必做2功能。
现在,如果你注册一个空闲功能glutIdleFunc()
它是目前所有的事件被处理后调用。 程序员经常实现他们的空闲功能,只是叫他们所使用的程序渲染的场景(即他们通过纳入常规glutDisplayFunc()
这种方法是有问题的,如果渲染“需要一段时间”(如靠近所有的时间来渲染一帧),因为你可能没有时间完成渲染,然后下一帧处理事件。 如果你插入while循环你提到,你会被眼前这个,规避GLUT的本地事件处理机制做。 更好的方式与GLUT发挥很好的实现你的空闲功能,只调用glutPostRedisplay()
它告诉GLUT安排到你的显示功能,一旦所有的事件被处理,你的空闲函数被调用之前的调用。
文章来源: What's the point of glutidlefunc() in freeglut