User interface 获取wxWidgets中更新之间的运行时间
我正在Windows上使用最新的wxWidgets(3.0.1)和OpenGL(3.3)构建一个交互式应用程序。我已经到了一个地步,我有一个wxGLcanvas渲染到一个wxPanel上,它工作得很好。渲染在该画布的绘制事件中完成。但是,我现在希望使用更新之间的精确增量时间来执行模拟 所以本质上我想要一些功能,让我有一个像User interface 获取wxWidgets中更新之间的运行时间,user-interface,wxwidgets,User Interface,Wxwidgets,我正在Windows上使用最新的wxWidgets(3.0.1)和OpenGL(3.3)构建一个交互式应用程序。我已经到了一个地步,我有一个wxGLcanvas渲染到一个wxPanel上,它工作得很好。渲染在该画布的绘制事件中完成。但是,我现在希望使用更新之间的精确增量时间来执行模拟 所以本质上我想要一些功能,让我有一个像 void Update(float dt) { // Update simulation with accurate time-step } 我曾遇到过计时器,但我不确
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毫秒的刷新速度,但问题不在于计时器的准确性,而在于场景渲染的速度。所以,再一次,这不是问题。我正在使用windows。我编辑了这个问题以显示问题中的操作系统我希望在更新之间有一个16-17毫秒的间隔,所以60帧基本上可以在16毫秒内渲染场景?是的,我可以。。这是一个创建计时器并调用timer.Start(16)的问题吗?是的。计时器事件处理程序将每16毫秒+/-5毫秒调用一次。