在阅读红皮书时,我发现:
glutDisplayFunc(void(* func)(void))是 第一个也是最重要的事件 你会看到回调函数。 每当GLUT确定时 窗口的内容需要 重新显示,回调函数 由glutDisplayFunc()注册 执行。因此,你应该把 您需要重绘的所有例程 显示回调中的场景 功能
如果您的程序更改了内容 窗户,有时你会有 调用glutPostRedisplay(),哪个 给glutMainLoop()一个轻微的调用 其注册的显示回调 下次机会
应该调用glutPostRedisplay()的次数是多少?从这一段开始,我不明白为什么需要它的功能。
答案 0 :(得分:16)
什么时候需要重绘窗口?
但是如果你的显示功能在x位置画一个三角形呢?y在x; y;是由鼠标位置决定的?在这种情况下,只要鼠标向右移动,您就必须要求系统重绘窗口?这就是你从MouseFunc()调用glutPostRedisplay的原因。实际上,当您调用glutPostRedisplay时,重绘事件会与其他窗口事件(如鼠标单击ets)一起排队。基本上你的mainLoop会从该队列中选择事件并调用它们的处理程序
答案 1 :(得分:3)
传递给glutDisplayFunc
的函数仅在需要时调用:这意味着调整窗口大小时,或者另一个窗口隐藏它时。例如,如果您使用glutMouseFunc
,您可能希望根据该clic更新(重绘)您的窗口内容。此外,如果您绘制动画,则需要从空闲功能中调用glutPostRedisplay
。