Простой счетчик частоты кадров?

Я снимаю шутер от первого лица, и раньше я видел такие вопросы, но ответ слишком сложный или они используют SDL, GLFW, GLUT или что-то еще. Я не использую ничего из этого. OpenGL, C ++ и GLEW для меня.

Я немного запутался в том, как делать счетчик частоты кадров, поэтому, если бы я мог получить псевдокод или некоторые фрагменты кода, которые указывали бы мне в правильном направлении, это помогло бы.

5 голосов | спросил ezio160324 9 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 09 Sep 2014 18:44:12 +0400 2014, 18:44:12

2 ответа


5

Чтобы измерить частоту кадров, вам понадобятся два счета:

  • Сколько кадров ( не рисовать вызовы) прошло, и
  • Сколько прошло времени.

Ваша частота кадров рассчитывается так:

frames / time

В этом есть несколько тонких сложностей.

Прежде всего, вам нужен хороший, точный таймер с высоким разрешением. Вы не говорите, на какой платформе вы работаете, поэтому я не буду делать никаких предположений:

  • У вас есть такой таймер, и
  • Вы используете не , используя вызовы сна для управления частотой кадров (если вы, остановите его сейчас ).

Предположим, что вы храните время в переменной, называемой «timepassed». Это двойной, и он начинается с 0 и подсчитывает время (в секундах) с начала игры. Наш счетчик частоты кадров начинается следующим образом:

static int frames = 0;
static double starttime = 0;
static bool first = TRUE;
static float fps = 0.0f;

Первое, что мы делаем, это проверить, действительно ли это первый раз, когда мы прошли через счетчик и установили некоторые вещи:

if (first)
{
    frames = 0;
    starttime = timepassed;
    first = FALSE;
    return;
}

Затем мы увеличиваем количество пройденных кадров; Я предполагаю, что вы обновляете счетчик частоты кадров только один раз за кадр:

frames++;

И здесь мы оцениваем фактический номер FPS.

if (timepassed - starttime > 0.25 && frames > 10)
{
    fps = (double) frames / (timepassed - starttime);
    starttime = timepassed;
    frames = 0;
}

Здесь мы обновляем счет FPS каждые 0,25 секунды. Это не является строго необходимым, но в противном случае, если у вас есть переменная частота кадров, вы будете получать цифры, которые ярко мигают на вашем экране, и вы не сможете прочитать их слишком хорошо. (Также важно, чтобы timepassed - время запуска больше 0.) После вычисления FPS мы затем обновляем наши статические переменные для следующего прохода.

Это prety, мой стандартный счетчик FPS (это показывает C-наследие в некотором коде), и я перекрестно проверил его со значениями, предоставленными FRAPS, и нашел его очень точным.

ответил Maximus Minimus 10 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 10 Sep 2014 03:50:30 +0400 2014, 03:50:30
0

Поскольку вы используете SLD, первое, что нужно сделать, это найти SDL_GetTicks ();

Очевидно, что очень легко понять, что отображать на вашем счетчике, но вам также нужно отображать его тоже.

Как правило, вы хотите использовать что-то вроде FreeType, чтобы вы могли загружать все наборы шрифтов. Это дает вам много информации о каждом «глифе», который представляет собой один символ; и дополнительно позволяет создавать текстуры или текстуры, полные ваших глифов.

http://www.learnopengl.com/#!In-Practice/Текст-Rendering

В этом руководстве вы узнаете об основных принципах.

ответил Yudrist 5 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 05 Sep 2016 22:25:37 +0300 2016, 22:25:37

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132