Il y a au moins deux façons de le faire:
La première est celle que les autres ont dit avant moi. Je pense que c'est la façon la plus simple et plus pratique.Vous venez de garder une trace de
- cn: compteur de nombre d'images que vous avez rendiez
- TIME_START: le temps écoulé depuis que vous avez commencé à compter
- TIME_NOW: l'heure actuelle
Le calcul du fps dans ce cas est aussi simple que l'évaluation de cette formule:
- FPS = cn/(temps_temps - temps_démarrage).
Ensuite, il y a la façon cool uber que vous aimeriez utiliser un jour:
Disons que vous avez « i » cadres à prendre en compte. Je vais utiliser cette notation: f [0], f [1], ..., f [i-1] pour décrire le temps qu'il a fallu pour rendre le cadre 0, le cadre 1, ..., le cadre (i-1) respectivement.
Example where i = 3
|f[0] |f[1] |f[2] |
+----------+-------------+-------+------> time
Ensuite, la définition mathématique de fps après i images serait
(1) fps[i] = i /(f[0] + ... + f[i-1])
Et la même formule, mais en ne considérant que les cadres i-1.
(2) fps[i-1] = (i-1)/(f[0] + ... + f[i-2])
maintenant est ici l'astuce de modifier le côté droit de la formule (1) de telle sorte qu'il contiendra le côté droit de la formule (2) et le substituer à son côté gauche.
Comme tant (vous devriez le voir plus clairement si vous écrivez sur un papier):
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)
Ainsi, selon cette formule (mes calculs provenant compétences sont un peu rouillé cependant), pour calculer la nouvelle fps vous avez besoin de connaître le fps de l'image précédente, la durée qu'il a fallu pour rendre la dernière image et le nombre d'images que vous avez rendu.
Alors pour fou-proofness et tidyness, vous voudrez probablement quelque chose comme flotteur = 0,1 rapport pondéral; et time = time * (1.0 - weightRatio) + last_frame * weightRatio – korona
Sonne bien et simple en principe, mais en réalité le lissage de cette approche est à peine perceptible. Pas bien. – Petrucio
@Petrucio si le lissage est trop bas, augmentez simplement la constante de temps (weightRatio = 0.05, 0.02, 0.01 ...) –