„Czas delta” to czas, który upłynął między dwiema aktualizacjami ramek (ale można go również wykorzystać w innych kontekstach; jest to zwykle wynik odejmowania czasu).
Czas delty można uzyskać w glut za pomocą metody glutGet i parametru GLUT_ELAPSED_TIME oraz niektórych operacji.
Poniższy wiersz zwraca liczbę milisekund od wywołania glutInit (lub pierwszego wywołania glutGet (GLUT_ELAPSED_TIME)):
int timeSinceStart = glutGet(GLUT_ELAPSED_TIME);
Jeśli więc zarejestrujesz bieżący timeSinceStart w każdej pętli renderowania, możesz poznać wartość deltaTime, odejmując starą od nowej.
int oldTimeSinceStart = 0;
while( ... )
{
int timeSinceStart = glutGet(GLUT_ELAPSED_TIME);
int deltaTime = timeSinceStart - oldTimeSinceStart;
oldTimeSinceStart = timeSinceStart;
//... stuff to update using deltaTime
}
Możesz to zrobić prawie w ten sam sposób, używając biblioteki ctime C / C ++ z clock () i wyrażeniem stałym makro CLOCKS_PER_SEC, które określa relację między taktowaniem zegara a sekundą.
Zasadniczo możesz użyć deltaTime, aby zaktualizować swoje ruchy w stosunku do tego czasu, który upłynął, zamiast używać stałej wartości czasu. W ten sposób prędkość ruchu twojej postaci powinna być prawie taka sama, jeśli twój program działa przy 60 fps lub jeśli działa przy 10 fps.
Oto mały przykład: załóżmy, że chcesz przesunąć coś o 10 jednostek na sekundę na osi x. Możesz zrobić coś takiego (jeśli deltaTime rzeczywiście używa milisekund).
Position.x += 10/1000 * deltaTime;
W ten sposób, bez względu na to, czy Twój program aktualizuje się 2 razy, czy 100 razy, 1 sekundę później pozycja powinna być prawie taka sama, a na grę wpływa mniejszy fps małego komputera niż przy użyciu stałych wartości.
Przy stałych wartościach ==> niskie fps = mniej aktualizacji = powolne ruchy, podczas gdy wysokie fps = więcej aktualizacji = bardzo szybkie ruchy.
Z deltaTime ==> „prawie” te same ruchy.
Na koniec powinieneś przeczytać Krok o stałym czasie vs Zmienny o czasie na gamedev.stackexchange.