0

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

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

有没有人有什么建议?

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

4

2 回答 2

1

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

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

于 2012-04-26T23:19:39.020 回答
1

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

于 2012-04-26T23:30:19.507 回答