我正在尝试为 PhysX 应用程序中的物理模拟定义一个时间步长,以便物理在所有机器上以相同的速度运行。我希望物理以 60FPS 的速度更新,所以每次更新应该有 1/60 秒的增量时间。
我的应用程序必须使用 GLUT。目前,我的循环设置如下。
空闲功能:
void GLUTGame::Idle()
{
newElapsedTime = glutGet(GLUT_ELAPSED_TIME);
deltaTime = newElapsedTime - lastElapsedTime;
lastElapsedTime = newElapsedTime;
glutPostRedisplay();
}
在这种情况下,帧速率并不重要——只有我的物理更新速度才是真正重要的。
我的渲染函数包含以下内容:
void GLUTGame::Render()
{
// Rendering Code
simTimer += deltaTime;
if (simTimer > m_fps)
{
m_scene->UpdatePhys(m_fps);
simTimer = 0;
}
}
在哪里:
Fl32 m_fps = 1.f/60.f
但是,这会导致一些非常缓慢的更新,因为 deltaTime 在大多数循环上似乎等于 0(这实际上是不可能的......)我已经尝试将我的 deltaTime 计算移动到我的渲染函数的底部,因为我认为空闲回调可能被调用太频繁,但这并没有解决问题。有什么想法我在这里做错了吗?