opengl glutmainloop()
Posted
技术标签:
【中文标题】opengl glutmainloop()【英文标题】: 【发布时间】:2009-12-07 19:58:15 【问题描述】:我刚开始使用 OpenGL,似乎很难理解 glutMainLoop()
的工作原理@ 那里到底发生了什么?它会一直呆在那里直到任何函数调用响应吗?
【问题讨论】:
【参考方案1】:它一遍又一遍地调用您的显示回调,在两者之间调用空闲,以便在可能的情况下保持特定的帧速率,并在必要时保持其他帧速率(例如,如果您调整窗口大小或触发输入事件)。
本质上,在这个函数中是主程序循环,GLUT 为您完成大部分工作,并允许您在这些回调中简单地设置特定的程序逻辑。自从我使用 GLUT 以来已经有一段时间了,一开始肯定会感到困惑。
在你的显示回调中显然应该是你绘制应该发生的任何事情的主要逻辑。在空闲回调中应该是一些非常轻量级的操作,以确定从上次调用显示到下一次的状态变化应该是什么。例如,如果您正在制作动画,则可以在此处更改其位置或方向。
【讨论】:
GLUT 很痛苦,而且不好看……实际上,它让我对图形编程感到厌烦。 旋转对我来说太疯狂了,比如“wtf,有一个 z 坐标吗?”一旦我学了物理并学习了一些规则,一切就平静了 glutMainLoop 仅在 glut 事件触发显示回调时调用显示回调,例如调整窗口大小、打开窗口或调用 glutPostRedisplay。您必须在程序中添加代码以触发 glut 以适当的帧速率调用显示回调,从而在程序中生成动画。例如,您可以在空闲回调函数中调用 glutPostResdisplay,这样当 GLUT 空闲时,您的显示回调就会被调用。【参考方案2】:正是as StrixVaria has stated。
glutMainLoop 进入 GLUT 事件处理循环。该例程在 GLUT 程序中最多应调用一次。一旦被调用,这个例程将永远不会返回。它将根据需要调用已注册的任何回调。
取自here
【讨论】:
【参考方案3】:同时使用 opengl 和 glut 意味着您将编写一个在回调函数中使用 opengl 命令的“过剩”程序。 main 包含 glut 函数。许多过剩函数需要注册回调函数。这些回调函数通常包含 opengl 命令。
关于你的问题,现在当你很清楚你主要是在编写一个 glut 程序时,还应该注意 glutMainLoop 函数调用实际上会在需要时执行回调函数,而回调函数又会执行 opengl 命令。
【讨论】:
【参考方案4】:那么 glutMainLoop 是主函数,它不断调用和调用显示函数,它也让你的窗口实际打开。你会发现opengl并没有那么可怕。
【讨论】:
以上是关于opengl glutmainloop()的主要内容,如果未能解决你的问题,请参考以下文章
什么可能导致 glutMainLoop() 不调用传递给 glutDisplayFunc() 的函数?