Hay al menos dos maneras de hacerlo:
La primera es aquella que otros han mencionado aquí antes que yo. Creo que es la forma más simple y preferida.Que acaba de realizar un seguimiento de
- cn: contador del número de fotogramas si ha interpretado
- TIME_START: el tiempo desde que ha comenzado a contar
- TIME_NOW: la hora actual
Calcular el fps en este caso es tan simple como evaluar esta fórmula:
- FPS = cn/(time_now - time_start).
Luego está la manera fresca súper que le gustaría utilizar algunos días:
Digamos que usted tiene 'i' marcos a considerar. Usaré esta notación: f [0], f [1], ..., f [i-1] para describir el tiempo que tardó en renderizar el fotograma 0, fotograma 1, ..., fotograma (i-1) respectivamente.
Example where i = 3
|f[0] |f[1] |f[2] |
+----------+-------------+-------+------> time
Entonces, definición matemática de fps después de que los marcos sería
(1) fps[i] = i /(f[0] + ... + f[i-1])
Y la misma fórmula, pero sólo teniendo en cuenta i-1 fotogramas.
(2) fps[i-1] = (i-1)/(f[0] + ... + f[i-2])
Ahora el truco aquí es modificar el lado derecho de la fórmula (1) de tal manera que contendrá el lado derecho de la fórmula (2) y sustituirlo por su lado izquierdo.
Al igual que (debería ver con más claridad si se escribe en un papel):
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)
Así que de acuerdo a esta fórmula (mis matemáticas derivadas de habilidad son un poco oxidado sin embargo), para calcular el nuevo fps necesita conocer los fps del fotograma anterior, la duración que tardó en representar el último fotograma y la cantidad de fotogramas que ha procesado.
Luego de tonto-impermeabilidad y tidyness, usted probablemente querrá algo así como flotador weightRatio = 0,1; y time = time * (1.0 - weightRatio) + last_frame * weightRatio – korona
Suena bien y simple en principio, pero en realidad el suavizado de este enfoque es apenas perceptible. No es bueno. – Petrucio
@Petrucio si el suavizado es demasiado bajo, solo suba la constante de tiempo (pesoRatio = 0.05, 0.02, 0.01 ...) –