【问题标题】:OpenGL: Calling glutPostRedisplay() from a while loop that reads a fileOpenGL:从读取文件的 while 循环中调用 glutPostRedisplay()
【发布时间】:2012-04-26 22:57:00
【问题描述】:

所以我正在尝试从 IMU 读取传感器数据并相应地更新角度。我打开传感器数据文件,逐行读取,将四元数转换为旋转,然后更新我的模型。问题是当从 while 循环调用 glutPostRedisplay() 时,循环继续,而 glutPostRedisplay() 并行运行。这使得一切看起来都是瞬间发生的。我想要做的是强制程序停止,直到显示更新。

我想不出另一种方法来做到这一点,因为我不想经常打开和关闭文件或跟踪我当前在文件中的位置。如果我可以只读取该行,处理它,然后强制 OpenGL 渲染,然后读取下一行等,那就更容易了。

有人有什么建议吗?

注意: 目前,当我能够渲染时,while 循环已完全执行。我尝试在 glutPostRedisplay() 之后直接使用 glutSwapBuffers()

【问题讨论】:

  • 为什么不睡觉呢?依靠视频驱动程序的阻止不是一个好主意。

标签: c opengl glut


【解决方案1】:

GLUT 不是这样工作的。您必须停止循环并从您想要的任何功能返回,以便 GLUT 发出渲染命令。通常你把这种东西放在一个空闲的函数中。

或者您可以使用 GLFW,它允许您拥有渲染循环的所有权。或者您可以使用 FreeGLUT 的 glutMainLoopEvent,它允许您拥有渲染循环的所有权(尽管您需要一些代码重写才能使其工作)。

【讨论】:

  • 我最终没有使用文件并实时读取 IMU 传感器。如果我要使用一个文件,我只需要一直保持打开状态,并将指向打开文件的指针作为全局变量保存。这样我就可以跟踪行位置并不断调用读取和处理功能。谢谢!
【解决方案2】:

您可以注册一个函数以在 GLUT 不忙于 glutIdleFunc 时调用,而不是使用 while 循环。在此空闲函数中从 IMU 读取,并在需要强制重新显示时调用 glutPostRedisplay。

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 2021-04-05
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 2017-10-12
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多