"Дельта-час" - це час, що минув між двома оновленнями кадру (але він може бути використаний і в інших контекстах; зазвичай це результат віднімання часу).
Ви можете отримати час дельти в глухоті за допомогою методу 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 ++ з тактовою частотою () та макроконстантним виразом CLOCKS_PER_SEC, яка визначає співвідношення між годинником та секундою.
В основному, ви можете використовувати deltaTime для оновлення своїх рухів у співвідношенні до цього минулого часу замість використання фіксованого значення часу. Таким чином, швидкість руху вашого персонажа повинна бути майже однаковою, якщо ваша програма працює зі швидкістю 60 кадрів в секунду або якщо вона працює в 10 кадрів в секунду.
Ось невеликий приклад: припустимо, ви хочете щось переміщувати на 10 одиниць щосекунди по осі x. Ви можете зробити щось подібне (якщо deltaTime дійсно використовує мілісекунди).
Position.x += 10/1000 * deltaTime;
Таким чином, незалежно від того, чи була ваша програма оновлена 2 або 100 разів, через 1 секунду позиція повинна бути майже однаковою, а на грі менш впливає низький кадр в секунду невеликого комп'ютера, ніж якщо вона використовує фіксовані значення.
З фіксованими значеннями ==> низький кадр в секунду = менше оновлень = повільні рухи, тоді як високий кадр в секунду = більше оновлень = дуже швидкі рухи.
З deltaTime ==> "майже" однакові рухи.
Нарешті, вам слід прочитати крок фіксованого часу та крок змінної часу на gamedev.stackexchange.