«Дельта-время» - это время, прошедшее между обновлениями двух кадров (но оно также может использоваться в других контекстах; обычно это результат вычитания времени).
Вы можете получить дельта-время в избытке, используя метод glutGet и параметр GLUT_ELAPSED_TIME, а также некоторые операции.
Следующая строка возвращает количество миллисекунд с момента вызова glutInit (или первого вызова glutGet (GLUT_ELAPSED_TIME)):
int timeSinceStart = glutGet(GLUT_ELAPSED_TIME);
Поэтому, если вы регистрируете текущее время timeSinceStart в каждом цикле рендеринга, вы можете узнать deltaTime, вычитая старое значение в новое.
int oldTimeSinceStart = 0;
while( ... )
{
int timeSinceStart = glutGet(GLUT_ELAPSED_TIME);
int deltaTime = timeSinceStart - oldTimeSinceStart;
oldTimeSinceStart = timeSinceStart;
//... stuff to update using deltaTime
}
Вы также можете сделать это почти так же, используя библиотеку ctime C / C ++ с clock () и макрос-константное выражение CLOCKS_PER_SEC, которое определяет отношение между тактом и секундой.
По сути, вы можете использовать deltaTime для обновления ваших движений в соответствии с этим прошедшим временем вместо использования фиксированного значения времени. Таким образом, скорость движения вашего персонажа должна быть почти одинаковой, если ваша программа работает со скоростью 60 кадров в секунду или со скоростью 10 кадров в секунду.
Вот небольшой пример: предположим, что вы хотите перемещать что-то на 10 единиц каждую секунду по оси x. Вы можете сделать что-то вроде этого (если deltaTime действительно использует миллисекунды).
Position.x += 10/1000 * deltaTime;
Таким образом, независимо от того, обновлялась ли ваша программа 2 раза или 100 раз, через 1 секунду позиция должна быть почти такой же, и на игровой процесс меньше влияют низкие fps небольшого компьютера, чем если бы он использовал фиксированные значения.
С фиксированными значениями ==> низкие fps = меньше обновлений = медленные движения, тогда как высокие fps = больше обновлений = очень быстрые движения.
С deltaTime ==> «почти» те же движения.
Наконец, вы должны прочитать Фиксированный временной шаг по сравнению с переменным временным шагом в gamedev.stackexchange.