Как рассчитать время дельта с SDL?

Я слышал, что вы можете рассчитать дельта-время с помощью двух функций, называемых SDL_GetPerformanceCounter и SDL_GetPerformanceFrequency. Я не уверен, как они работают полностью, но я слышал, что это немного похоже на использование SDL_GetTicks ()

    Uint64 NOW, LAST;
    double deltaTime = 0;

    while (somebool)
    {
       LAST = SDL_GetPerformanceCounter();
       NOW = SDL_GetPerformanceCounter();
       LAST = NOW;

       deltaTime = (NOW - LAST) / (double)SDL_GetPerformanceFrequency();

       /**Rendering**/
    }

У меня есть этот код, но всякий раз, когда я печатаю deltaTime или пытаюсь его использовать, он всегда равен некоторым действительно случайным и безумным числам. Правильно ли это?

9 голосов | спросил surafel911 4 32015vEurope/Moscow11bEurope/MoscowWed, 04 Nov 2015 21:44:55 +0300 2015, 21:44:55

2 ответа


9

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

В основном это должно свести к следующему:

Uint64 NOW = SDL_GetPerformanceCounter();
Uint64 LAST = 0;
double deltaTime = 0;

while (somebool)
{
   LAST = NOW;
   NOW = SDL_GetPerformanceCounter();

   deltaTime = (double)((NOW - LAST)*1000 / (double)SDL_GetPerformanceFrequency() );

   /**Rendering**/
}

Примечание: в первом кадре всегда будет дельтатип 0 или что-то очень близкое к нему.

Это должно заполнить значение deltaTime в миллисекундах, это можно легко преобразовать в секунды, умножив конечный результат на 0,001.

Ссылка: https://wiki.libsdl.org/SDL_GetPerformanceFrequency

ответил Patrick le Duc 4 32015vEurope/Moscow11bEurope/MoscowWed, 04 Nov 2015 23:19:10 +0300 2015, 23:19:10
1

Как я уже говорил о вычислении времени дельты, это через SDL_GetTicks():

struct Clock
{
    uint32_t last_tick_time = 0;
    uint32_t delta = 0;

    void tick()
    {
        uint32_t tick_time = SDL_GetTicks();
        delta = tick_time - last_tick_time;
        last_tick_time = tick_time;
    }
};

Затем я просто отмечаю экземпляр Clock в основном цикле.

ответил Salajouni 15 J0000006Europe/Moscow 2016, 17:38:16

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

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

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