Вертикальная развертка и двойная буферизация

Принципы формирования изображения на экране

Формирование изображений средствами современных видеосистем. Графические интерфейсы и стандарты программирования графики

Лекция 17

Дисплей персонального компьютера включает в себя экран с электронно-лучевой трубкой (Cathode Rate Tube, CRT), а также комплекс оптических и электронных средств, обеспечивающих формирование изображения.

Изнутри экран монитора покрыт специальным веществом – люминофором, который освещается электронным лучом (потоком частиц, исходящих из электронной пушки). Каждый элемент люминофора состоит из трех точек разного цвета: красного, зеленого и синего. Свойства люминофора таковы, что он изменяет свою окраску и яркость при бомбардировке электронами и сохраняет этот цвет в течение некоторого времени (даже если луч на него уже не направлен).

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

Электронный луч обегает экран слева направо и сверху вниз с определенной скоростью, последовательно формируя множество пикселов, которые, сливаясь друг с другом, воспринимаются глазом как единое целое. Происходит это так быстро, что люминофор в первой зажженной точке не успевает "забыть" свой цвет даже к тому моменту, когда луч находится уже в самом дальнем от точки углу монитора. Физически луч начинает свое движение с левого верхнего угла экрана, прорисовывает самую верхнюю строку пикселов, затем переходит ко второй строке и т.д. Заканчивается маршрут в правом нижнем углу. Длительность прорисовки всего экрана определяется настройками видеоадаптера, точнее, частотой обновления экрана. При частоте обновления 120 Гц длительность прорисовки кадра равна 1/120 с.

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

Если данные видеопамяти изменились в момент прорисовки кадра, то луч сначала "дорисовывает" кадр на основе старых данных и только при новом проходе отображает измененные данные. Вследствие этого возникают (хотя и кратковременные) дефекты изображения, так называемое "мерцание" экрана. Одно из решений этой проблемы заключается в том, чтобы обновлять данные видеопамяти в тот момент, когда луч находится в правом нижнем углу экрана, но это не всегда возможно. Поэтому применяется метод двойной буферизации (double buffering), который заключается в следующем.

Создается невидимый "виртуальный" экран, и изображение рисуется только на нем. На основной экран содержимое виртуального экрана копируется в тот самый момент, когда луч находится в правом нижнем углу. Операция блокового копирования обычно производится очень быстро - для ее выполнения бывает достаточно даже сотой доли секунды.

Любая современная библиотека (например, DirectX для Windows) позволяет переназначать указатель видеопамяти на любой виртуальный экран, и указанный экран становится основным. Тогда никакого копирования вообще не происходит и механизм работает очень быстро. В этом случае, если требуется внести изменения в изображение (например, передвинуть объект), нет необходимости стирать что-то и рисовать в новой позиции, новый кадр рисуется с нуля и копируется поверх предыдущего на основной экран.

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




double arrow
Сейчас читают про: