Có ít nhất hai cách để làm điều đó:
Đầu tiên là một trong những người khác đã đề cập ở đây trước tôi. Tôi nghĩ đó là cách đơn giản nhất và được ưa thích. Bạn chỉ cần theo dõi
- cn: bộ đếm số lượng khung hình bạn đã hiển thị
- time_start: thời gian kể từ khi bạn bắt đầu đếm
- time_now: thời gian hiện tại
Tính fps trong trường hợp này đơn giản như đánh giá công thức này:
- FPS = cn / (time_now - time_start).
Sau đó, có một cách tuyệt vời của uber mà bạn có thể muốn sử dụng vào một ngày nào đó:
Giả sử bạn có khung 'i' để xem xét. Tôi sẽ sử dụng ký hiệu này: f [0], f [1], ..., f [i-1] để mô tả mất bao lâu để hiển thị khung hình 0, khung hình 1, ..., khung hình (i-1 ) tương ứng.
Example where i = 3
|f[0] |f[1] |f[2] |
+----------+-------------+-------+------> time
Sau đó, định nghĩa toán học của fps sau khi tôi khung sẽ là
(1) fps[i] = i / (f[0] + ... + f[i-1])
Và công thức tương tự nhưng chỉ xét đến khung i-1.
(2) fps[i-1] = (i-1) / (f[0] + ... + f[i-2])
Bây giờ, mẹo ở đây là sửa đổi bên phải của công thức (1) theo cách nó sẽ chứa bên phải của công thức (2) và thay thế nó cho bên trái của nó.
Như vậy (bạn sẽ thấy nó rõ ràng hơn nếu bạn viết nó trên giấy):
fps[i] = i / (f[0] + ... + f[i-1])
= i / ((f[0] + ... + f[i-2]) + f[i-1])
= (i/(i-1)) / ((f[0] + ... + f[i-2])/(i-1) + f[i-1]/(i-1))
= (i/(i-1)) / (1/fps[i-1] + f[i-1]/(i-1))
= ...
= (i*fps[i-1]) / (f[i-1] * fps[i-1] + i - 1)
Vì vậy, theo công thức này (mặc dù kỹ năng tính toán của tôi hơi bị lỗi), để tính fps mới, bạn cần biết fps từ khung hình trước đó, khoảng thời gian cần thiết để hiển thị khung hình cuối cùng và số khung hình mà bạn kết xuất.