Сделать это можно как минимум двумя способами:
Первый - это тот, о котором говорили здесь до меня. Я считаю, что это самый простой и предпочтительный способ. Вы просто следите за
- cn: счетчик количества обработанных кадров
- time_start: время с момента начала отсчета
- time_now: текущее время
Вычислить частоту кадров в этом случае так же просто, как вычислить эту формулу:
- FPS = cn / (time_now - время_старт).
Тогда есть отличный способ, которым вы, возможно, захотите когда-нибудь воспользоваться:
Допустим, у вас есть «i» -фреймы для рассмотрения. Я буду использовать следующие обозначения: f [0], f [1], ..., f [i-1], чтобы описать, сколько времени потребовалось для визуализации кадра 0, кадра 1, ..., кадра (i-1 ) соответственно.
Example where i = 3
|f[0] |f[1] |f[2] |
+----------+-------------+-------+------> time
Тогда математическое определение fps после i кадров будет
(1) fps[i] = i / (f[0] + ... + f[i-1])
Формула та же, но только с учетом кадров i-1.
(2) fps[i-1] = (i-1) / (f[0] + ... + f[i-2])
Хитрость заключается в том, чтобы изменить правую часть формулы (1) таким образом, чтобы она содержала правую часть формулы (2), и заменила ее левой частью.
Вот так (вы должны увидеть это более ясно, если напишете на бумаге):
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)
Итак, согласно этой формуле (хотя мои навыки математического вывода немного устарели), чтобы вычислить новые кадры в секунду, вам нужно знать количество кадров в секунду из предыдущего кадра, продолжительность, затраченную на рендеринг последнего кадра, и количество кадров, которые вы получили. оказано.