ДВОЙНАЯ БУФЕРИЗАЦИЯ

Один из методов получения анимации в реальном времени в растровой системе - это использовать два буфера регенерации. Изначально в одном буфере формируется кадр анимационной последовательности. Далее при обновлении экрана изображением из этого буфера в другом буфере строится следующий кадр. После завершения кадра роли двух буферов меняются, так что в процедурах обновления задействуется второй буфер, а в первом буфере в это время создается следующий кадр. Данный процесс чередования буферов продолжается до отображения всей анимации. Графические библиотеки, допускающие подобную работу, обычно имеют одну функцию для активизации процедур двойной буферизации и одну - для обмена ролей двух буферов.

Когда отдана команда переключить роли двух буферов, обмен может выполняться в различные моменты времени. Наиболее очевидная реализация - это поменять роли в конце текущего цикла обновления при обратном ходе кадровой развертки электронного луча. Если программа может построить кадр за время цикла обновления, скажем, секунды, все последовательности движения отображаются синхронно с частотой обновления экрана. Однако, если время построения кадра больше времени обновления, текущий кадр отображается за несколько циклов обновления, а при этом генерируется следующий кадр анимации. Например, если частота обновления экрана - 60 кадров в секунду, а построение кадра требует ^ секунды, каждый кадр отображается на экране дважды, и скорость анимации равна всего 30 кадрам в секунду. Таким образом, если время построения кадра равно ^ секунды, частота анимации снижается до 20 кадров в секунду, поскольку каждый кадр отображается трижды.

Если время построения кадра очень близко к величине, кратной времени обновления экрана, то при двойной буферизации могут возникать нерегулярные частоты анимации. Проиллюстрируем сказанное на примере. Допустим, частота обновления экрана - 60 кадров в секунду, а время построения кадра почти равно ^ с или ^ с, или ^си т.д. В этой ситуации возможна неравномерная частота отображения анимационных кадров. Из-за небольших изменений времени реализации процедур, генерирующих примитивы и их параметры, построение некоторых кадров может требовать несколько большего или меньшего времени. Следовательно, частота анимационных кадров может меняться резко и неравномерно. Для компенсации этого эффекта в программу можно вводить небольшую временную задержку Другое средство - изменить описание сцены движения, чтобы сократить время построения кадра.

Растровая анимация в реальном времени с использованием таблицы цветов

Рис. 13.1. Растровая анимация в реальном времени с использованием таблицы цветов СОЗДАНИЕ АНИМАЦИИ С ПОМОЩЬЮ РАСТРОВЫХ ОПЕРАЦИЙ

В небольшом числе приложений растровые анимации в реальном времени можно генерировать, используя блочную передачу прямоугольного массива значений пикселей. Данный метод анимации часто используется в игровых программах. Как было показано в разделе 5.6, чтобы просто транслировать объект из одной точки в другую на плоскости ху, можно передать группу значений пикселей, определяющих форму о&ьекта, в новое положение. Двухмерные повороты на угол, кратный 90°, также легко реализовать, хотя, используя процедуры сглаживания, прямоугольные блоки пикселей можно поворачивать и на другие углы. Для поворота, не кратного 90°, необходимо оценить процент площади, занятой пикселями, которые накладываются на поворачиваемый блок. Для анимации в реальном времени двух- или трехмерных объектов можно использовать последовательности растровых операций, если ограничить анимацию движением в проекционной плоскости (в таких случаях не нужно вызывать алгоритмы проектирования или определения видимых поверхностей).


⇐ вернуться назад | | далее ⇒