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

0.9.2  создание изображения

Модуль генерации изображений растрового дисплея (см. рис. 0.9.1), часто называемый в литературе "image creation system" (ICS), имеет то же назначение что и дисплейный генератор для векторного дисплея. Важнейшее отличие от генератора изображений для векторного дисплея состоит в том, что в растровом дисплее генератор изображения в произвольное время заносит его представление в видеопамять (т.н. функционально-растровое преобразование).

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

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

С этим несомненным достоинством связаны два основных недостатка растровых дисплеев по сравнению с векторными:

 непосредственное взаимодействие с изображением затруднено, так как временного соответствия между "указанием" объекта на экране и его генерацией не существует, поэтому в растровых системах используется программное моделирование сцены для определения совпадения координат объекта и положения того или иного устройства указания;

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

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

Набор команд для растровых дисплеев, соответственно дополнительным возможностям, шире. Он включает команды задания яркостей или цвета, определения закрашенных поверхностей, команды копирования блоков пикселов, известные как Bitblt (Bit Boundary Block Transfer) или RasterOp (растровые операции) и выполнения логических операций над кодами пикселов.

В общем, команда пересылки блока пикселов имеет вид: приемник:= источник ОП приемник, где ОП - арифметическая или логическая операция над кодами пикселов.

Практически используются следующие операции:

Очистка

приемник:= константа

Узор

приемник:= постоянный узор

Копирование

приемник:= источник

Инвертирование

приемник:= NOT приемник

Логическое И

приемник:= источник AND приемник

Логическое ИЛИ

приемник:= источник OR приемник

Исключающее ИЛИ

приемник:= источник XOR приемник

Особенный интерес представляет операция XOR (Exclusive OR), позволяющая после двойного ее применения с одним и тем же источником восстановить исходное значение пиксела. В частности, эта операция может использоваться для генерации курсоров графического ввода: (Приемник XOR Источник) XOR Источник = Приемник XOR (Источник XOR Источник) = Приемник XOR 0 = Приемник

Кодирование данных в видеопамяти

До сих пор рассматривались растровые дисплеи, у которых один пиксел соответствует одному элементу видеопамяти (т.н. Bit-Map дисплеи). Очевидно, что при этом требуются большие размеры видеопамяти, так для изображения 1024×1024 пикселов при одном байте на пиксел требуется видеопамять в 1 Мбайт. Во многих случаях отличие двух соседних пикселов в строке и двух соседних строк мало, что в принципе позволяет сэкономить память. Мы здесь рассмотрим два наиболее простых способа кодирования - кодирование длин серий, заключающееся учете повторения кодов пикселов вдоль строки и клеточное кодирование, представляющее изображение разбитым на отдельные фрагменты.

Кодирование длин серий

К одному из простейших методов кодирования относится кодирование длин серий (run length encoding), заключающееся в том, что группа повторяющихся значений пикселов кодируется в виде пар из значения пиксела и числа его повторений.

С помощью такого кодирования достигается сокращение занимаемого объема в 10 и более раз. Так в задачах численного моделирования (см. п. *) средняя степень сжатия составляла 29 раз. Но для некоторых случаев возможно и увеличение объема, например, если изображение имеет вид шахматного поля из отдельных пикселов.

Ясно, что при таком способе кодирования утрачивается соответствие между координатой пиксела на экране и адресом в памяти изображения. Доступ к строкам возможен путем их последовательного просмотра. Для сокращения времени доступа можно использовать списочную структуру, как это показано на рис. 0.9.8.

Рисунок 57

Рис. 0.2.8: Кодирование изображения длинами серий в виде списка

Легко видеть, что у метода кодирования длинами серий, особенно при интерактивной работе, имеются следующие недостатки:

 объем занимаемой памяти сильно зависит от изображения и резко возрастает при сокращении длины повторения;

 изменение изображения требует исключения и создания элементов списка;

 определение длины серии требует просмотра. Для каждой строки нужно все описание картины для определения возможного вклада.

В целом, этот метод кодирования используется не для интерактивной работы, а для хранения изображения на диске или для передачи. В частности, кодирование длин серий используется в описании изображения для растровых дисплеев фирмы Tektronix, и в графическом редакторе Paintbrusch на IBM PC для оперативного хранения изображения.

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

Клеточное кодирование

В таком дисплее экран разбит на прямоугольные ячейки (знакоместа). Содержимое ячейки кодируется и размещается в видеопамяти по адресу знакоместа. Сокращение занимаемого объема памяти достигается за счет меньшей длины кодового слова, по сравнению с количеством пикселов в ячейке. Этот метод пригоден для алфавитно-цифровых дисплеев и примитивной графики. Так, например, при размере ячейки 8×8 и 8-ми битовом кодовом слове для дисплея со знакоместами достигается восьмикратная экономия памяти по сравнению с Bit-Map дисплеем. Наряду с символами и знаками в таком дисплее можно представлять и элементарные вектора. Функционально-растровое преобразование для векторов в таком дисплее выполняется подбором подходящей комбинации знакомест.

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

Использование знакомест для простого текстового дисплея разрешением 512×512 точек при размере знакоместа 8×8 и размере матрицы символа 5×7 показано на рис. 0.9.9. Такая матрица символов позволяет представить три вида шрифта:  большие + маленькие символы латиницы,  большие + маленькие символы кириллицы,  большие символы латиницы + кириллицы.

Рисунок 58

Рис. 0.2.9: Простой текстовый дисплей. Выдается строка из трех символов СНГ. Луч находится на 5-й строке развертки очередной строки символов. Значки · отмечают возможные позиции пикселов. Значки  отмечают позиции требуемых пикселов.

Кроме аппаратного использования для алфавитно-цифровых режимов, этот метод кодирования используется и в программной реализации для сокращения объема изображения при передаче или запоминании на диске. В частности, клеточное представление изображения используется в растровых дисплеях фирмы Tektronix и графических стандартах GKS (Graphical Kernel System) и CGI (Computer Graphics Interface).

Повышение быстродействия подсистемы визуализации

Одним из возможных методов повышения быстродействия системы визуализации является растрирование в реальном времени, при котором, как и в векторных дисплеях, промежуточное хранение изображения в видеопамяти отсутствует. В этом случае для каждого пиксела экрана требуется просканировать описание всего изображения, чтобы определить вклад различных объектов картины. Насколько трудна эта задача видно из таблицы 0.9.1, когда для дисплеев с разрешением 1024×768 это надо проделать за 16.5 нс! При введении буфера строки на обработку описания сцены требуется уже 20.9 мкс, что все равно слишком мало.

В какой-то мере решить эту задачу можно распараллеливанием. Можно усмотреть два способа распараллеливания:

 "процессор на геометрический элемент" - распараллеливание на уровне объектов, когда каждому примитиву описания изображения соответствует свой генератор (генераторы для векторов, кривых, поверхностей и т.д.),

 "процессор на пиксел" - распараллеливание на уровне пикселов, когда описание сцены "пропускается" сквозь пикселы и они решают что и как видимо.

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

На рис. 0.9.10 приведен сравнительный анализ методов распараллеливания.

Рисунок 59

Объекты :

Параллельно

Последовательно

Пикселы :

Последовательно

Параллельно

Больше объектов :

Больше процессоров

Ускорение процессоров

Больше пикселов :

Ускорение процессоров

Больше процессоров

Пример :

Системы реального

Системы с Z-буфером.

 

времени

 

Рис. 0.2.10: Сравнение двух подходов к мультипроцессированию

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