Как правильно обновить сцену в Win32 OpenGL? - PullRequest
3 голосов
/ 13 февраля 2012

Прямо сейчас у меня есть два таймера. Один для физики и один для отображения.

Таймер дисплея прикреплен к главному окну. Он примерно раз в 5 мс отправляет сообщение WM_PAINT, и обработчик сообщений WM_PAINT говорит, что нужно запустить код отображения opengl, а затем выполнить SwapBuffers ().

Физический таймер прикреплен к вторичному окну (ни по какой другой причине, кроме единственного способа, которым я знаю, как реализовать оконный таймер, - это прикрепить его к окну). Обработчик обновляет мой физический код.

Однако я заметил, что иногда дисплей "spazzy". Это едва заметно, возможно, один крошечный спаз в секунду, но я подозреваю, что происходит что-то, что заставляет физику двигаться медленнее или быстрее за короткий промежуток времени.

1 Ответ

3 голосов
/ 13 февраля 2012

Правильный метод для интерактивного моделирования (например, вашего) состоит в том, чтобы вызывать функцию рисования как простое действие:

... idle_action(...)
{
    redraw();
}

... event_loop(...)
{
    while(!quit) {
       event e = PeekEvent();
       if( e != NO_EVENT ) {
           process_event();
       } else {
           idle_action();
       }
    }
}

Вместо использования таймеров вы должны измерить время, необходимое для рисования кадра.

Кроме того, ради точности физического моделирования вы также не должны использовать таймер для этого.Вместо этого вы должны перемещать его с меньшими временными шагами постоянной длины, чтобы иметь несколько временных шагов к одному визуализированному кадру.Так, например, для частоты обновления 60 Гц у вас есть интервал кадров ~ 16 мс.Если вы выполняете физическое моделирование с шагом в 1 мс, вы рассчитаете 16 промежуточных шагов.* Обратите внимание, что большинство, если не все пакеты физического моделирования делают это внутренне.Т.е. вы устанавливаете интервал шага, а затем вызываете симуляцию физики только в то время, в которое вы хотите, чтобы она прогрессировала.

На практике это означает, что вы продвинете симуляцию физики к тому времениВы измерили чертеж кадра, чтобы взять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...