这对我来说没有意义。我看了GLFW和Three.js'示例和Cinder的实现实际上有this comment:
将所有窗口标记为准备绘制;这真的只对第一个很重要 时间,以确保第一次update()在draw()
之前触发
所有三个图书馆似乎都是这样做的,我不明白为什么。没有必要更新那些从未在屏幕上绘制过的东西的位置,或者在那里?
这是我的循环的样子:
这个命令对我来说更有意义,但也许我错过了一些东西。
答案 0 :(得分:1)
我认为首先更新对象然后绘制它们是完全合理的。
想象一下,你将一个球从屏幕的一侧移动到另一侧并像钟摆一样向后移动。想象一下,您还希望它能够真实地反映您计算机中的实时情况。如果您在更新球的位置之前绘制场景,那么您的球将位于第一帧中的哪个位置?除非你手动设置它的初始位置,否则它将处于场景的零点,这可能完全超出了它的预期轨迹。如果您决定在开始动画之前初始化它的位置,则可能会发生时间间隔导致它也处于错误的位置。
但是如果你总是在绘制前更新它的位置,它将在第一个渲染帧的正确位置。
但说实话 - 没有人会注意到第一帧,所以更多的逻辑意识是这样做而不是任何实际原因。我觉得在绘制场景之前准备场景更有意义,反之亦然。