2015-09-24 2 views
0

Я пытаюсь вычислить FPS моей игры, но значение нестабильно, поэтому я хотел реализовать линейную интерполяцию, чтобы сделать отображаемый текст гладким. Проблема в том, что я получив 1. # INF-значения, я попробовал поиск по Google, но не смог найти объяснения.C++ Получение 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, кадров в секунду, lastFps все поплавки (я пытался дважды слишком но никакой разницы), но когда printf выполняет, я получаю 1. # INF

Любые идеи?

+1

Ваш образец не является (вполне) компилируемым воспроизведением. Если бы вы могли исправить это, чтобы быть независимым примером, который компилируется и запускается, это было бы неплохо. А затем также используйте отладчик. – Puppy

+2

deltaTime как минимум один раз равен 0, возможно, в первый раз. Который порождает бесконечность. Вы никогда не избавитесь от него снова. –

ответ

1

Скорее всего, deltaTime был равен нулю в одной точке (из-за того, что рамка занимает менее миллисекунды, чтобы нарисовать). Это дало значение бесконечности для fps = 1.0f/deltaTime;. И благодаря тому, как вы делаете свою интерполяцию, когда значение бесконечности входит в систему, lastFps всегда будет бесконечным.

Смежные вопросы