所以我试图从IMU读取传感器数据并相应地更新角度。我打开传感器数据文件,逐行读取,将四元数转换为旋转,然后更新我的模型。问题是当从while循环调用glutPostRedisplay()时,循环继续,而glutPostRedisplay()在并行操作。这使得一切都会立即发生。我想要做的是强制程序停止,直到显示更新。
我无法想到另一种方法,因为我不想经常打开和关闭文件或跟踪我目前在文件中的位置。如果我能读取该行,处理它,然后强制OpenGL渲染,然后读取下一行等,将会更容易。
有人有任何建议吗?
注意:目前,while循环在我能够渲染时完全执行。我尝试在glutPostRedisplay()
之后直接使用glutSwapBuffers()答案 0 :(得分:1)
GLUT无法正常工作。您必须停止循环并从您想要的任何函数返回,以便GLUT发出渲染命令。一般来说,你把这种东西放在空闲的功能中。
或者您可以使用GLFW,它允许您拥有渲染循环的所有权。或者您可以使用FreeGLUT的glutMainLoopEvent
,它允许您拥有渲染循环的所有权(尽管您需要进行一些代码重写才能使其工作)。
答案 1 :(得分:1)
当GLUT不忙于glutIdleFunc时,您可以注册要调用的函数,而不是使用while循环。在此空闲函数中从IMU读取,并在需要强制重新显示时调用glutPostRedisplay。