我正在Windows上使用最新的wxWidgets(3.0.1)和OpenGL(3.3)构建交互式应用程序。我已经达到了将wxGLcanvas渲染到wxPanel并且工作正常的程度。渲染在GLcanvas的paint事件中完成。但是,我现在想要在更新之间执行准确的增量时间模拟。
所以基本上我想要一些能让我拥有像
这样的方法的功能void Update(float dt)
{
// Update simulation with accurate time-step
}
我遇到了计时器,但我不确定如何将其合并到我的应用程序中以获得准确的 dt 。有些人提到为该面板创建一个单独的线程,以便独立于应用程序的其余部分进行更新。这是一个选项,大致如果是这样的话,它是如何实现的?
答案 0 :(得分:0)
定时器精度应足够好,以达到至少~50 FPS,因此它们应足以满足您的需要。您需要使用计时器来定期调用计时器事件处理程序,然后可以使用更准确的方法(因为定时器不能保证完全正常)来确定是否需要更新,例如使用wxDateTime::UNow()
,并在这种情况下排队Refresh()
。
请注意,您仍然无法保证使用普通GUI框架进行常规窗口刷新。
答案 1 :(得分:0)
您使用的是哪种操作系统? Windows中无法保证事件的准确时间。然而,Unix是一个实时操作系统(RTOS),可以保证事件时间。
您关注的delta时间范围是多少? RTOS和Windows之间的区别仅限于2到3毫秒的时间(除非窗口变得非常过载)因为任何有价值的3D场景需要花费3毫秒以上的渲染时间,这可能不是问题! / p>
在这类问题中最重要的是人类视觉的反应时间。观看动态图如绘图,人们不知道任何刷新率超过300毫秒。如果你想尝试视频逼真效果,你可能需要接近25毫秒的刷新率 - 但是你的问题不是你的计时器的准确性,而是场景渲染的速度。所以,再一次,这不是问题。