Array ( )
Вход:




Главная | OpenGL | GLSL | AI | Сеть | Примеры | Библиотека

OpenGL: Подсчет FPS






В этом уроке мы научимся вычислять FPS и выведем их на экран.
Код для урока взят из предыдущего, "шрифты FTGL".

Все файлы, кроме main.cpp остаются без изменений.
Изменяем main.cpp:

// Добавляем библиотеку, необходимую для использования timeGetTime():
#pragma comment(lib, "winmm.lib")

// Далее, после обьявления шрифта обьявим глобальную переменную
// для хранения FPS:
float FPS;

// Теперь напишем функцию, вычисляющую FPS каждый кадр:
///////////////////////////////// CALCULATE FRAMES PER SECOND \\\\*
/////
/////   Эта функция рассчитывает FPS и выводит их
/////
///////////////////////////////// CALCULATE FRAMES PER SECOND \\\\*

void CalculateFrameRate()
{
    //Ниже мы создадим несколько статичных переменных, т.к. хотим, чтобы они сохраняли своё
    //значение после завершения работы ф-ии. Мы могли бы сделать их глобальными, но это будет
    //излишним.

    static float framesPerSecond = 0.0f;    //наши фпс
    static float lastTime = 0.0f;           //Тут хранится время, прошедшее с последнего кадра
    static char strFrameRate[50] = {0};     //Строка для вывода

    //Тут мы получаем текущий tick count и умножаем его на 0.001 для конвертации из миллисекунд в секунды.
    float currentTime = timeGetTime() * 0.001f;

    //Увеличиваем счетчик кадров
    ++framesPerSecond;

    //Теперь вычтем из текущего времени последнее запомненное время. Если результат больше единицы,
    //это значит, что секунда прошла и нужно вывести новый FPS.
    if(currentTime - lastTime > 1.0f)
    {
        //Устанавливаем lastTime в текущее время. Теперь оно будет использоватся как предидущее время
        //для след. секунды.
        lastTime = currentTime;

        // Установим FPS для вывода:
        FPS=framesPerSecond;

        //Сбросим FPS
        framesPerSecond = 0;
    }
}



// Теперь изменим функцию RenderScene(). Добавим вызов CalculateFrameRate() и
// Участок кода, в котором в прошлом уроке выводилось
// слово "Тест" заменим на следующий:

//*************************************************************************

    CalculateFrameRate();

    glDisable(GL_DEPTH_TEST);
        glColor3f(1.0f,1.0f,1.0f);

        // Сформируем строку для вывода:
        wchar_t buf[256];  
        swprintf(buf, sizeof(buf), L"Текущие FPS: %f", FPS);

        Font->Print(10,20, buf);  // Выводим текст
    glEnable(GL_DEPTH_TEST);


//*************************************************************************


Просто, не так ли? Теперь после компиляции в левом верхнем углу
рендерится надпись "Текущие FPS: x"
Красота %)







Исходные коды к уроку




Комментарии:

Войдите, чтобы оставить комментарий:












Яндекс.Метрика
 Яндекс цитирования.