"Thời gian delta" được sử dụng là thời gian trôi qua giữa hai lần cập nhật khung hình (nhưng nó cũng có thể được sử dụng trong các bối cảnh khác; đây thường là kết quả của phép trừ thời gian).
Bạn có thể lấy thời gian delta trong glut bằng phương pháp glutGet và tham số GLUT_ELAPSED_TIME, cùng với một số thao tác.
Dòng sau trả về số mili giây kể từ khi glutInit được gọi (hoặc cuộc gọi đầu tiên đến glutGet (GLUT_ELAPSED_TIME)):
int timeSinceStart = glutGet(GLUT_ELAPSED_TIME);
Vì vậy, nếu bạn đăng ký timeSinceStart hiện tại ở mỗi vòng kết xuất, bạn có thể biết deltaTime bằng cách trừ cái cũ sang cái mới.
int oldTimeSinceStart = 0;
while( ... )
{
int timeSinceStart = glutGet(GLUT_ELAPSED_TIME);
int deltaTime = timeSinceStart - oldTimeSinceStart;
oldTimeSinceStart = timeSinceStart;
//... stuff to update using deltaTime
}
Bạn cũng có thể thực hiện gần như cùng một cách, sử dụng thư viện ctime C / C ++ với clock () và biểu thức hằng số macro CLOCKS_PER_SEC chỉ định mối quan hệ giữa dấu đồng hồ và giây.
Về cơ bản, bạn có thể sử dụng deltaTime để cập nhật tỷ lệ chuyển động của mình theo thời gian đã trôi qua thay vì sử dụng giá trị thời gian cố định. Bằng cách này, tốc độ di chuyển của nhân vật của bạn sẽ gần như giống nhau nếu chương trình của bạn chạy ở tốc độ 60 khung hình / giây hoặc nếu nó chạy ở tốc độ 10 khung hình / giây.
Đây là một ví dụ nhỏ: giả sử bạn muốn di chuyển thứ gì đó 10 đơn vị mỗi giây trên trục x. Bạn có thể làm một cái gì đó như thế này (nếu deltaTime thực sự sử dụng mili giây).
Position.x += 10/1000 * deltaTime;
Bằng cách này, cho dù chương trình của bạn cập nhật 2 lần hay 100 lần, 1 giây sau, vị trí sẽ gần như giống nhau và trò chơi sẽ ít bị ảnh hưởng bởi khung hình / giây thấp của máy tính nhỏ hơn nếu nó sử dụng các giá trị cố định.
Cuối cùng, bạn nên đọc Bước thời gian cố định so với bước thời gian biến trên gamedev.stackexchange.