Il "delta time" era il tempo trascorso tra due aggiornamenti di frame (ma può essere utilizzato anche in altri contesti, di solito è il risultato di una sottrazione di tempo).
Puoi ottenere il delta time in glut usando il metodo glutGet e il parametro GLUT_ELAPSED_TIME, oltre ad alcune operazioni.
La seguente riga restituisce il numero di millisecondi da quando è stato chiamato glutInit (o la prima chiamata a glutGet (GLUT_ELAPSED_TIME)):
int timeSinceStart = glutGet(GLUT_ELAPSED_TIME);
Quindi, se registri l'ora corrente, dal momento in cui inizia ad ogni ciclo di rendering, puoi conoscere il deltaTime sottraendo quello vecchio a quello nuovo.
int oldTimeSinceStart = 0;
while( ... )
{
int timeSinceStart = glutGet(GLUT_ELAPSED_TIME);
int deltaTime = timeSinceStart - oldTimeSinceStart;
oldTimeSinceStart = timeSinceStart;
//... stuff to update using deltaTime
}
Puoi anche farlo quasi allo stesso modo, usando la libreria ctime C / C ++ con clock () e l'espressione della costante macro CLOCKS_PER_SEC che specifica la relazione tra un tick di clock e un secondo.
Fondamentalmente, puoi usare deltaTime per aggiornare i tuoi movimenti in rapporto a questo tempo trascorso invece di usare un valore di tempo fisso. In questo modo, la velocità di movimento del tuo personaggio dovrebbe essere quasi la stessa se il tuo programma funziona a 60 fps o se funziona a 10 fps.
Ecco un piccolo esempio: supponiamo di voler spostare qualcosa di 10 unità al secondo sull'asse x. Potresti fare qualcosa del genere (se deltaTime usa davvero i millisecondi).
Position.x += 10/1000 * deltaTime;
In questo modo, indipendentemente dal fatto che il tuo programma sia aggiornato 2 volte o 100 volte, 1 secondo dopo, la posizione dovrebbe essere quasi la stessa e il gioco è meno influenzato dai bassi fps di un piccolo computer che se utilizza valori fissi.
Infine, dovresti leggere il passo del tempo fisso contro il passo del tempo variabile su gamedev.stackexchange.