获取wxWidgets中更新之间的时间

时间:2014-08-25 21:36:15

标签: user-interface wxwidgets

我正在Windows上使用最新的wxWidgets(3.0.1)和OpenGL(3.3)构建交互式应用程序。我已经达到了将wxGLcanvas渲染到wxPanel并且工作正常的程度。渲染在GLcanvas的paint事件中完成。但是,我现在想要在更新之间执行准确的增量时间模拟。

所以基本上我想要一些能让我拥有像

这样的方法的功能
void Update(float dt)
{
  // Update simulation with accurate time-step
}

我遇到了计时器,但我不确定如何将其合并到我的应用程序中以获得准确的 dt 。有些人提到为该面板创建一个单独的线程,以便独立于应用程序的其余部分进行更新。这是一个选项,大致如果是这样的话,它是如何实现的?

2 个答案:

答案 0 :(得分:0)

定时器精度应足够好,以达到至少~50 FPS,因此它们应足以满足您的需要。您需要使用计时器来定期调用计时器事件处理程序,然后可以使用更准确的方法(因为定时器不能保证完全正常)来确定是否需要更新,例如使用wxDateTime::UNow(),并在这种情况下排队Refresh()

请注意,您仍然无法保证使用普通GUI框架进行常规窗口刷新。

答案 1 :(得分:0)

您使用的是哪种操作系统? Windows中无法保证事件的准确时间。然而,Unix是一个实时操作系统(RTOS),可以保证事件时间。

您关注的delta时间范围是多少? RTOS和Windows之间的区别仅限于2到3毫秒的时间(除非窗口变得非常过载)因为任何有价值的3D场景需要花费3毫秒以上的渲染时间,这可能不是问题! / p>

在这类问题中最重要的是人类视觉的反应时间。观看动态图如绘图,人们不知道任何刷新率超过300毫秒。如果你想尝试视频逼真效果,你可能需要接近25毫秒的刷新率 - 但是你的问题不是你的计时器的准确性,而是场景渲染的速度。所以,再一次,这不是问题。