【发布时间】:2014-01-07 15:04:10
【问题描述】:
我正在尝试在 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 计算移动到底部我的渲染函数,因为我认为空闲回调可能被调用得太频繁,但这并没有解决问题。有什么想法我在这里做错了吗?
【问题讨论】: