我刚开始使用 OpenGL,似乎很难理解glutMainLoop()
那里到底发生了什么?在任何函数调用响应之前,它会一直呆在那里什么都不做吗?
4 回答
它一遍又一遍地调用你的显示回调,调用 idle 以便它可以在可能的情况下保持特定的帧速率,并在必要时调用其他的(例如,如果你调整窗口大小或触发输入事件)。
本质上,在这个函数中是主程序循环,GLUT 为您完成大部分工作,并允许您在这些回调中简单地设置特定的程序逻辑。自从我使用 GLUT 以来已经有一段时间了,一开始肯定会感到困惑。
在您的显示回调中显然应该是您绘制应该发生的任何事情的主要逻辑。在空闲回调中应该是一些非常轻量级的操作,以确定从上次调用显示到下一次的状态变化应该是什么。例如,如果您正在制作动画,这将是您更改其位置或方向的地方。
glutMainLoop 进入 GLUT 事件处理循环。该例程在 GLUT 程序中最多应调用一次。一旦被调用,这个例程将永远不会返回。它将根据需要调用已注册的任何回调。
取自这里
一起使用 opengl 和 glut 意味着您将编写一个在回调函数中使用 opengl 命令的“过剩”程序。main 包含 glut 函数。许多过剩函数需要注册回调函数。这些回调函数通常包含 opengl 命令。
谈到你的问题,现在很明显你主要是在编写一个 glut 程序,还应该考虑到 glutMainLoop 函数调用实际上会在需要时执行回调函数,而回调函数又会执行 opengl 命令。
glutMainLoop 是保持调用和调用显示函数的主要函数,它也保持你的窗口实际打开。你会发现 opengl 并没有那么可怕。