Машинная графика - Учебное пособие (П.В.Вельтмандер)

0.9.1  видеоконтроллер

Видеоконтроллер формирует изображение на экране монитора путем его построчного вывода. При этом точно соблюдает время развертки строки, либо соответствующее телевизионным нормам, либо предопределенным параметрам (ширина полосы, частота строк и кадров и т.д.). Некоторые мониторы для сокращения полосы пропускания используют т.н. чересстрочную развертку (Interlacing), при которой две картинки имеют половинное вертикальное разрешение и выдаются на экран по двум вложенным в друг друга гребенкам строк (рис. 0.9.2). Вначале выдаются строки 1-го полукадра, затем 2-го. Таким образом, при частоте кадров 50 Гц полная смена изображения на экране выполняется с частотой 25 Гц. Такой способ используется в телевещании. Для синтезированных изображений он мало пригоден (при частоте кадров 50 Гц), так как одиночные горизонтальные линии, занимающие ровно одну строку, неприятно и очень утомляюще мерцают.

Рисунок 51

Рис. 0.2.2: Чересстрочная развертка

Время, требуемое для вывода картинки на монитор, определяется частотой строк и кадров, а также временами обратного хода строчной и кадровой разверток (рис. 0.9.3). Например, для телевизионного стандарта в 625 строк длительность строки составляет 64 мкс, из которых 12 мкс (почти 20\%) - время обратного хода строчной развертки. Из времени картинки должно забираться время на обратный ход кадровой развертки. В этом случае длительностью в 25 строк.

Рисунок 52

Рис. 0.2.3: Потери на обратный ход строчной и кадровой разверток

Важнейшим параметром не только для монитора, но и для растровой системы в целом является время, требуемое на обработку одного пиксела. Время, требуемое на обработку строки аппаратурой дисплея, составляет:

ts =

1/частота  кадров - tобратного  хода  кадровой  развертки

число  видимых  строк  в  картине

 

Причем для чересстрочной развертки обратный ход кадровой развертки за полную прорисовку картинки выполняется, естественно, дважды.

Так как часть времени строчной развертки тратится на перемещение луча к началу следующей строки (обратный ход строчной развертки, horizontal retrace), то время на обработку одного пиксела составит:

tn =

ts - tобратного  хода  строчной  развертки

число  пикселов  в  строке

 

В таблице 0.9.1. приведены времена для некоторых мониторов.

Таблица 0.9.1: Характерные времена для некоторых мониторов

 

f

t полн.

t обр.

t обр.

Черес-

tп на

Разрешение

кадр.

строки

строки

кадров

строч-

пиксел

X×Y

Гц

мкс

мкс

мкс

ность

нс

512×512

30

60.4

10.9

1203

да

96.7

768×576

50

64

12

1612

да

70.3

1024×768

60

20.92

4

600

нет

16.52

1024×1024

60

15.69

4

600

нет

11.42

1280×1024

60

15.69

4

600

нет

9.13

В мониторах используются кинескопы с прямоугольной областью отображения с соотношением сторон обычно 4:3, что соответствует особенностям зрения человека. Если же для дисплея отношение числа пикселов в строке к числу строк отличается от 4:3, например, 512:512, то для занятия под изображение всей поверхности экрана потребуется сформировать не квадратные, а прямоугольные пикселы. Чтобы картинка выглядела на экране правильно (круг как круг и т.д.) ее потребуется предварительно искажать. Поэтому все современные дисплеи либо имеют соотношение 4:3 (640:480, 768:576, 1280:960 и т.д.), либо занимают под изображение не всю поверхность экрана.

После этих замечаний относительно представления растровых изображений легко сформулировать назначение видеоконтроллера:

 адресация и чтение данных из видеопамяти;

 формирование синхроимпульсов разверток по горизонтали и вертикали, соответствующих формату изображения. Эти синхроимпульсы используются монитором для формирования отклоняющих напряжений;

 управление монитором для задания требуемых цветов и интенсивностей, цифро-аналоговое преобразование.

Кроме этого, из таблицы 0.9.1. видно, что времена на обработку пиксела существенно меньше, чем времена доступа к динамической полупроводниковой памяти, составляющие 100 нс и более, поэтому видеопамять обычно организована специальным образом, так что из нее читается сразу не один пиксел.

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

Таким образом блок-схема простого видеоконтроллера имеет вид:

Рисунок 53

Рис. 0.2.4: Блок-схема простого видеоконтроллера

Полноцветные дисплеи и дисплеи с таблицей цветности (ТЦ)

Мы, по сути дела, рассмотрели однобитовый растровый дисплей (дисплей с одной битовой плоскостью, одним битовым планом). Увеличивая количество плоскостей мы, естественно, увеличиваем количество отображаемых цветов. Можно выделить два класса цветных растровых дисплеев:

 полноцветные дисплеи, в которых для каждого пиксела сразу хранятся значения R, G, B. Обычно полноцветные дисплеи имеют по 1 байту на цвет. Т.е. объем видеопамяти составит почти 4 Мбайта при полной картинке 1280×1024 специально организованной, быстрой памяти. В таком дисплее на экране одновременно формально может присутствовать до 224яцветов (более 16 миллионов);

 дисплеи с таблицей цветности (ТЦ) (Look up table - LUT), в которых значение считанного пиксела не сразу передается на цифро-аналоговое преобразование, а используется как адрес в таблице цветности. По этому адресу выбираются значения яркостей по R, G, B и уже они определяют цвет точки. Таким образом, имея видеопамять в 1 байт на пиксел и таблицу цветности с тремя байтами на элемент, мы можем одновременно отобразить 256 оттенков из 224. Основное свойство этого дисплея, однако, состоит не в том, что экономится память, а в том, что изменяя всего 1-3 байта в таблице цветности, можно одновременно изменить цвет у всех точек изображения с одинаковым кодом пиксела, не изменяя содержимого видеопамяти. С помощью таблицы цветности реализуются не только различные динамические визуальные эффекты, но может быть реализована произвольная фильтрация, получены любые битовые срезы, выполнены преобразования гистограммы без изменения данных в видеопамяти, а также гамма-коррекция (см. п. 0.7.5)

Использование таблицы цветности поясняется на рис. 0.9.5.

Рисунок 54

Рис. 0.2.5: Использование таблицы цветности для дисплея с 6-ти битным пикселом. В данном примере на экране одновременно может присутствовать 64 оттенка из полной палитры в 4096 оттенков

Управление плоскостями изображения

В дисплее в N битами на пиксел можно запомнить N черно-белых, бинарных или же N/3 RGB картин. Каждая такая картина может отображаться с помощью соответствующей загрузки ТЦ. Если требуется, то их можно даже переключать с тактовой частотой! В случае черно-белого бинарного изображения ТЦ требуется загружать таким образом, чтобы ее элемент, соответствующий 1, содержал значения, дающее либо белый, либо черный оттенок.

Пусть, например, имеем дисплей с шестью битами на пиксел, с нумерацией плоскостей от нуля до пяти. Таблица цветности тогда должна иметь 64 элемента. Предположим, что надо включить изображение с зеленым цветом для плоскости номер ноль, а все остальные выключить. А затем включить красным цветом изображение в битовой плоскости номер один. Соответствующие этому раскраски таблицы цветности будут иметь вид:

Раскраска ТЦ для включения

 

Раскраска ТЦ для включения

зеленым цветом изображения

 

красным цветом изображения

в плоскости номер 0

 

в плоскости номер 1

 

Код пиксела

Значение

 

Код пиксела

Значение

дес.

двоичный

элемента ТЦ

 

дес.

двоичный

элемента ТЦ

0

000000

0 0 0

 

0

000000

0 0 0

1

000001

0 G 0

 

1

000001

0 0 0

2

000010

0 0 0

 

2

000010

R 0 0

3

000011

0 G 0

 

3

000011

R 0 0

4

000100

0 0 0

 

4

000100

0 0 0

 

. . .

. . .

 

 

. . .

. . .

62

111110

0 0 0

 

62

111110

R 0 0

63

111111

0 G 0

 

63

111111

R 0 0

Приоритет изображений

Во многих приложениях требуются изображения, объекты которых хотя и размещены в пространстве, но не имеют глубины. В этом случае не требуется решение общих задач пересечения поверхностей и удаления невидимых граней. Достаточно просто упорядочить объекты по глубине. К этому классу относятся, например, изображения слоев печатной платы, изображения слоев чертежа, окна системы управления окнами и т.д. Это упорядочение или приоритет может быть реализовано с использованием битовых плоскостей, закрашенных требуемым образом. Так как это не полное решение 3D задачи, то часто говорят об 2.5D изображениях. Если хотим получить эффект перекрытия отдельных прозрачных изображений, то заданному приоритету следует сопоставить соответствующий смешанный цвет в таблице цветности.

Для простоты рассмотрим трехбитовый дисплей. В старшей битовой плоскости разместим изображение А с наибольшим приоритетом, в младшей битовой плоскости - изображение В с наименьшим приоритетом. Возможные значения раскраски таблицы цветности в зависимости от значений пикселов для слоев, перекрывающихся в соответствии с приоритетом и для случая прозрачных слоев приведены ниже:

 

Значение

Содержимое таблицы

Содержимое таблицы

 

пиксела

цветности при

цветности при

 

 

перекрытии слоев

прозрачных слоях

 

0 0 0

Цвет фона

черный

 

0 0 1

Цвет картинки В

синий

 

0 1 0

Цвет картинки Б

зеленый

 

0 1 1

Цвет картинки Б

изумрудный

 

1 0 0

Цвет картинки A

красный

 

1 0 1

Цвет картинки A

пурпурный

 

1 1 0

Цвет картинки A

коричневый

 

1 1 1

Цвет картинки A

белый

Картинка:

А Б В

Приоритет А > Б > В

Прозрачные слои

Эффекты перемещений с помощью ТЦ

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

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

Преобразования изображения "на лету"

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

При этом жесткое соответствие 1:1 между адресами пикселов в видеопамяти и их координатами на экране утрачивается и выполняется преобразование окно просмотра в видеопамяти - окно видимости на экране (Widow - Viewport transformation). Обычно это преобразование включает в себя масштабирование, сдвиг и иногда поворот. Масштабирование обычно выполняется в целое число раз (Zoom) и заключается в соответствующем дублировании пикселов в X и Y направлении.

Для реализации сдвига нужны регистр координат и быстрые компараторы, которые сравнивают текущую позицию луча с желаемой новой позицией объекта и управляют адресацией для видеопамяти. Аналогичным образом может выполняться отсечение и вращение на 90.

Иное техническое решение для выполнения плавного масштабирования, перемещения, переворотов и даже произвольных перестановок строк изображения относительно горизонтальной оси и зеркального отображения относительно вертикальной оси предложено и реализовано В.Г. Сизыхом в станциях Гамма-4 и Гамма-Т [10]. Идея состоит в использовании программно загружаемой таблицы, устанавливающей соответствие между строками изображения и адресами видеопамяти, - т.н. таблицы адресов (ТА). Для каждой строки экрана имеется один элемент таблицы, задающий, в частности, адрес видеопамяти, с которого надо начать отображение, и масштаб по Х. Увеличение по оси Y формируется повторением в очередной строке ТА предыдущего адреса видеопамяти. Уменьшение - пропуском очередного адреса. На рис. 0.9.6 приведен пример ТА для видеопамяти 1024×1024 при экранном разрешении 768×576 и выводе нижних 576 строк видеопамяти "вверх ногами" со смещением на 10 пикселов по оси X и единичными масштабами по осям. Начало видеопамяти - левый верхний угол.

Плавное, не целочисленное масштабирование выполняется путем выбрасывания/дублирования не всех, а части пикселов в строке и строк.

Рисунок 55

Рис. 0.2.6: Преобразование изображений в темпе разверток c использованием таблицы адресов

Также В.Г. Сизыхом предложен и реализован метод однотонной заливки многоугольников в темпе видеовывода, позволяющий повысить скорость раскраски по максимуму в 768 раз. Для обычных синтезированных сцен повышение скорости более чем в 100 раз. Идея состоит в том, что при выполнении видеовывода строки отличные от нуля коды пикселов "защелкиваются" на регистре и передаются на вывод до тех пока не прийдет код, отличный от установленного. Последовательность закраски следующая:

 кадровый буфер очищается (все пикселы получают значение 0);

 у однотонно закрашенных многоугольников кодом с требуемым цветом строятся только левые ребра;

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

На рис. 0.9.7 показано применение данного метода для закраски на белом фоне многоугольника ADCD красным цветом, ADEF - зеленым и EDCG - синим.

Рисунок 56

Записать элементы ТЦ

Построить отрезки

Но-

Байты ТЦ

AB кодом 2

мер

R

G

B

Пояснение

BC кодом 1

0

255

255

255

белый

CD кодом 4

1

255

255

255

белый

DA кодом 2

2

255

000

000

красный

DE кодом 4

3

000

255

000

зеленый

EF кодом 3

4

000

000

255

синий

FA кодом 3

 

 

 

 

 

CG кодом 1

 

 

 

 

 

GE кодом 1

Рис. 0.2.7: Закраска многоугольников "на лету". ADCD - красным, ADEF - зеленым и EDCG - синим.