Я пытаюсь определить временной шаг для моделирования физики в приложении PhysX, чтобы физика работала с одинаковой скоростью на всех машинах. Я хочу, чтобы физика обновлялась со скоростью 60 кадров в секунду, поэтому каждое обновление должно иметь дельту времени 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 в нижнюю часть моей функции рендеринга. , так как я думал, что, возможно, простой обратный вызов вызывался слишком часто, но это не решило проблему. Любые идеи, что я делаю неправильно здесь?