Страница 18 |
Введение в OpenGl. Учебник |
||
Главная Страница 1 Страница 2 Страница 3 Страница 4 Страница 5 Страница 6 Страница 7 Страница 8 Страница 9 Страница 10 Страница 11 Страница 12 Страница 13 Страница 14 Страница 15 Страница 16 Страница 17 Страница 18 Страница 19 Страница 20 Страница 21 Скачать учебник |
|||
---|---|---|---|
, поскольку не нельзя переключить буферы при первой возможности. То же происходит, если время рисования, затрачиваемое на каждый кадр, перешагивает порог в 1/30 долю секунды – быстродействие снижается до 20 fps. Если сложность сцены близка к одному из волшебных чисел (1/60 секунды, 1/30 секунды, 1/20 секунды и так далее), то из-за некоторых вариаций некоторые кадры могут рисоваться чуть быстрее, а некоторые немного не укладываться в график. В этом случае скорость анимации непостоянна, что может вести к неприятному внешнему виду. В таких случаях, если не удается упростить медленные кадры, возможно, стоит добавить небольшую паузу в быстрые, чтобы сохранять скорость анимации постоянной. Если различные кадры вашей анимации драматически отличаются друг от друга по сложности, может потребоваться более изощренный подход. 1.12 Движение = Перерисовка + ПереключениеСтруктура реальных программ анимации не слишком отличается от описания, приведенного в заголовке этого раздела. Обычно намного легче перерисовать весь буфер, чем выяснять какие его части нужно изменить. Это особенно верно для таких приложений как симуляторы полетов, где даже небольшое изменение в ориентации самолета ведет к масштабным изменениям вида за окнами кабины. В большинстве анимационных программ объекты сцены просто перерисовываются с учетом различных трансформаций – изменяется точка обзора или положение наблюдателя, или машина немного проезжает по дороге, или объект немного поворачивается. Если требуются обширные вычисления не связанные с рисованием, то они могут ощутимо понизить быстродействие в целом и скорость анимации в частности. Имейте в виду однако, что часто пауза после вызова Переключить_буферы() может быть использована для таких операций. В OpenGL нет функции Переключить_буферы(), так как данная возможность может не обеспечиваться отдельными аппаратными средствами и, в любом случае, она сильно зависит от оконной системы. Например, при использовании системы X Window (и работе без дополнительных библиотек) можно использовать следующую GLX функцию:
В аналогичном случае для системы Microsoft Windows функция будет выглядеть следующим образом:
|
|||