Setidaknya ada dua cara untuk melakukannya:
Yang pertama adalah yang disebutkan orang lain di sini sebelum saya. Saya pikir itu cara yang paling sederhana dan disukai. Anda hanya untuk melacak
- cn: penghitung berapa banyak frame yang telah Anda render
- time_start: waktu sejak Anda mulai menghitung
- time_now: waktu saat ini
Menghitung fps dalam kasus ini semudah mengevaluasi rumus ini:
- FPS = cn / (time_now - time_start).
Lalu ada cara paling keren yang mungkin ingin Anda gunakan suatu hari:
Katakanlah Anda memiliki bingkai 'i' untuk dipertimbangkan. Saya akan menggunakan notasi ini: f [0], f [1], ..., f [i-1] untuk menjelaskan berapa lama waktu yang dibutuhkan untuk merender frame 0, frame 1, ..., frame (i-1 ) masing-masing.
Example where i = 3
|f[0] |f[1] |f[2] |
+----------+-------------+-------+------> time
Kemudian, definisi matematis dari fps setelah i frame akan menjadi
(1) fps[i] = i / (f[0] + ... + f[i-1])
Dan rumusnya sama tetapi hanya mempertimbangkan frame i-1.
(2) fps[i-1] = (i-1) / (f[0] + ... + f[i-2])
Sekarang triknya di sini adalah memodifikasi sisi kanan rumus (1) sedemikian rupa sehingga akan berisi sisi kanan rumus (2) dan menggantinya dengan sisi kirinya.
Suka begitu (Anda akan melihatnya lebih jelas jika Anda menulisnya di atas kertas):
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)
Jadi menurut rumus ini (keterampilan matematika saya agak berkarat), untuk menghitung fps baru Anda perlu mengetahui fps dari frame sebelumnya, durasi yang dibutuhkan untuk membuat frame terakhir dan jumlah frame yang Anda miliki. diberikan.