我正在尝试计算我的游戏的FPS,但是值不稳定,所以我想实现线性插值以使显示的文本平滑..问题是我得到1.#INF值,我试过谷歌搜索,但无法找到解释。
这是插值函数:
float Lerp(float from, float to, float t)
{
return (from*(1 - t) + to*t);
}
我如何计算FPS:
void CalculateTime()
{
deltaTime = (float)(SDL_GetTicks() - lastFrameTime) / 1000.0f; // this is around 0.02 each frame
fps = 1.0f / deltaTime; // this is 50-60 every frame
lastFps = Lerp(fps, lastFps, 0.5f); // lastFps is initialized at 60.0
printf("%2.4f\n", lastFps);
}
一切似乎都很好.. deltaTime,fps,lastFps都是浮点数(我试过双倍但没有区别)但是当printf执行时我得到1.#INF
有什么想法吗?
答案 0 :(得分:1)
最有可能的是,deltaTime
在一个点上为零(由于帧占用的时间不到一毫秒)。这为fps = 1.0f / deltaTime;
提供了无穷大的值。由于你进行插值的方式,一旦无穷大的值进入系统,lastFps
将永远是无限的。