У меня возникла проблема, связанная с таймерами, когда я обманываю объекты в своем игровом движке. Лерпинг почти правильный, и когда я применяю привязку к объекту, движущемуся или вращающемуся, это нормально, но каждые несколько секунд он выглядит так, как будто объект быстро мигает к предыдущей позиции, прежде чем продолжать плавно перемещаться.Проблема с прошивкой с таймерами
Запуск двигателя в оконном режиме дает мне 1500 ~ fps, но если я буду работать в полноэкранном режиме с помощью vsync-зажима до 60 кадров в секунду, глюк произойдет намного чаще.
Я пытаюсь найти либо хороший ресурс, либо объяснение по поводу lerping, и как я могу улучшить то, что у меня есть.
Для разработки разрыва клеща я использую:
float World::GetTickGap()
{
float gap = (float) (TimeMs() - m_lastTick)/m_tickDelay;
return gap > 1.f ? 1.f : gap;
}
Моя функция обновления:
m_currentTick = TimeMs();
if(m_currentTick > m_lastTick+m_tickDelay)
{
m_lastTick = m_currentTick;
//Update actors
}
Тогда при рендеринге каждого актера я даю разрыв клеща для них Lerp между их позициями.
Моя lerping функция:
float math::Lerp(float a, float b, float t)
{
return a + t*(b-a);
}
И пример функции lerping называют:
renderPosition.x = (math::Lerp(m_LastPosition.x, m_Position.x, tickDelay));
Я не уверен, где начать пытаться исправить эту проблему. Насколько мне известно, это проблемы времени с функциями. Хотя может ли что-нибудь еще вызвать небольшое падение производительности с постоянной скоростью?
Любая помощь с этой проблемой была бы принята с благодарностью. :)
1500 или 150? Я не знаю многих дисплеев с частотой обновления, достаточно высокой, чтобы правильно отображать 1500 кадров в секунду, а тем более такой уровень воспринимается человеческим глазом. – JAB
является 'tickDelay' в последней строке так же, как' TickGap' с первого? – AShelly
Сам монитор способен только на 60, но движок говорит мне, когда не под vsync он способен нарисовать мир 1500 раз в секунду. Я ожидаю, что число будет уменьшаться, когда я начну рендерить несколько объектов. – Crabbo