Ci sono almeno due modi per farlo:
Il primo è quello che altri hanno menzionato qui prima di me. Penso che sia il modo più semplice e preferito. Devi solo tenerne traccia
- cn: contatore di quanti fotogrammi hai renderizzato
- time_start: il tempo trascorso da quando hai iniziato a contare
- time_now: l'ora corrente
Calcolare gli fps in questo caso è semplice come valutare questa formula:
- FPS = cn / (time_now - time_start).
Poi c'è il modo super cool che potresti voler usare un giorno:
Diciamo che devi considerare i frame "i". Userò questa notazione: f [0], f [1], ..., f [i-1] per descrivere il tempo impiegato per il rendering del fotogramma 0, fotogramma 1, ..., fotogramma (i-1 ) rispettivamente.
Example where i = 3
|f[0] |f[1] |f[2] |
+----------+-------------+-------+------> time
Quindi, la definizione matematica di fps dopo i frame sarebbe
(1) fps[i] = i / (f[0] + ... + f[i-1])
E la stessa formula ma considerando solo i frame i-1.
(2) fps[i-1] = (i-1) / (f[0] + ... + f[i-2])
Ora il trucco qui è modificare il lato destro della formula (1) in modo tale che conterrà il lato destro della formula (2) e sostituirlo con il lato sinistro.
In questo modo (dovresti vederlo più chiaramente se lo scrivi su un foglio):
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)
Quindi, secondo questa formula (le mie capacità di derivazione matematica sono un po 'arrugginite però), per calcolare i nuovi fps devi conoscere gli fps del fotogramma precedente, la durata necessaria per il rendering dell'ultimo fotogramma e il numero di fotogrammi che hai reso.