获取wxWidgets中更新之间的运行时间



我正在使用Windows上最新的wxWidgets(3.0.1)和OpenGL(3.3)构建一个交互式应用程序。我已经到了一个点,我有一个wxGLcanvas渲染到一个wxPanel,它工作得很好。渲染是在该GLcanvas的paint事件中完成的。但是,我现在希望在更新之间执行精确的增量时间模拟。

所以本质上我想要一些功能允许我有一个像 这样的方法
void Update(float dt)
{
  // Update simulation with accurate time-step
}

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

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

请注意,您仍然不能保证使用正常的GUI框架定期刷新窗口。

你用的是什么操作系统?在Windows中没有办法保证一个事件的准确时间。然而,Unix是一个实时操作系统(RTOS),可以保证事件时间。

你关心的时间范围是什么?RTOS和Windows之间的区别只在2到3毫秒的时间内起作用(除非Windows超载),因为任何有价值的3D场景都需要3毫秒以上的时间来渲染,所以这可能不是问题!

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

最新更新