В данном разделе рассматривается архитектура дисплеев с произвольным и растровым сканированием луча, использующих ЭЛТ в качетве устройства отображения.
Вводятся понятия дисплейного файла, линейного дисплейного файла и структурированного дисплейного файла, дисплейного процессора.
Показывается, что дисплейный процессор состоит из дисплейного контроллера, блока преобразований и дисплейного генератора.
Рассматриваются два алгоритма работы генератора векторов - цифрового дифференциального анализатора и Брезенхема.
Анализируется процесс преобразования модели объекта в изображение,
рассматриваются целесообразные границы разделения функций между
центральным процессором и графической системой, описываются
альтернативные архитектуры дисплеев.
В настоящее время подавляющее распространение получили растровые дисплеи. Рассмотрение векторных дисплеев производится, в основном, из-за того что построение изображения на них осуществляется с использованием привычных понятий позиционирования и вычерчивания. На примере таких устройств формулируются общие понятия и выделяются принципиальные компоненты любой графической системы, назначением которой является представление модели объекта в изображение.
В векторных дисплеях изображение строится в виде совокупности
отдельно и достаточно точно выдаваемых отрезков. Основная проблема
большинства дисплеев, в частности дисплеев на обычных
электронно-лучевых трубках состоит в том, что если линия
прочерчивается один раз, то за время послесвечения она пропадет с
экрана. Решение этой проблемы заключается в том, что построение
изображения циклически повторяется (регенерируется) с требуемой
частотой (обычно с частотой сети - 50 Гц). Для такой регенерации
используется дисплейный файл, представляющий собой описание
изображения.
Дисплейный файл - набор команд дисплейного процессора. В очередном цикле регенерации команды последовательно выбираются из дисплейного файла и исполняются дисплейным процессором. Наряду с командами позиционирования луча и построения отрезков, обычно имеются команды построения символов, команды задания атрибутов построений таких как тип линии (сплошная, штриховая и т.п.), яркость подсветки, мерцание.
Линейный дисплейный файл - линейная последовательность команд описания изображения, может быть содержащая команды перехода для повторения процесса отображения файла. Линейный дисплейный файл может быть разбит на отдельные, независимо модифицируемые части. С использованием сегментов модификации изображения могут заключаться в изменении только требуемых частей. Такого сорта линейный дисплейный файл называется сегментированным.
Для сокращения объема дисплейного файла в составе команд дисплейного процессора могут предусматриваться не только графические команды формирования изображений и перехода, но и команды организации циклов и обращения к подпрограммам. Если описание изображения построено с использованием вложенных вызовов подпрограмм, то такого сорта дисплейный файл называется структурированным.
Легко видеть, что наличие механизма вложенных вызовов подпрограмм, в общем случае, требует наличия у дисплейного процессора средств геометрических преобразований и отсечения частей изображения, выходящих за пределы экрана. (Представьте себе изображение в перспективе улицы из типовых домов. Можно обойтись одной подпрограммой для построения дома, но каждый дом должен подвергаться индивидуальному преобразованию, а для некоторых домов потребуется отсечение).
Первые графические векторные дисплеи с регенерацией появились на зарубежном рынке в конце 60-х годов. В нашей стране серийные векторные дисплеи появились в середине 70-х годов.
Практически с самого начала векторные дисплеи имели разрешение 1024×1024 точки и могли без мерцания отображать от 1500 до 3000 векторов. Векторы могли быть нескольких типов (сплошные, штриховые, точечные, пунктирные и т.д.) с несколькими градациями яркости. Встроенные средства генерации символов обычно имели возможность строить символы двух фиксированных размеров нескольких ориентаций. В качестве средства диалога использовались буквенно-цифровая и символьная клавиатуры и световое перо.
Рассмотрим архитектуру простой графической системы. Далее будет
использоваться понятие "дисплейный процессор" широко
распространенное в литературе, но не имеющее точного определения.
Здесь под ним мы будем понимать (рис. 0.8.1) аппаратную часть
графической системы, которая:
· формирует изображение на дисплее из описания картины;
· обрабатывает графический ввод от пользователя.
Обе задачи весьма специальны и вычислительно интенсивны и могли бы значительно затруднить обычную работу ЦП.
В зависимости от требований приложений и используемых приборов вывода дисплейные процессоры имеют различную сложность и работают на различных принципах. По принципу формирования изображения различаются два основных класса дисплейных процессоров (см. рис. 0.8.1):
· каллиграфические или векторные устройства, называемые еще
устройствами с произвольным сканированием луча;
· растровые устройства.
Дисплейный процессор обязательно состоит из дисплейного контроллера и дисплейного генератора. Более мощные дисплейные процессоры оснащаются и собственными средствами преобразования и сохранения геометрических данных.
Рассмотрим назначение модулей дисплейного процессора справа-налево: дисплейный генератор, преобразования, дисплейный контроллер.
Задача дисплейного генератора - управление X,Y-отклонением и интенсивностью луча. Как уже отмечалось, дисплейный файл, хранящий описание изображения, представляет собой программу, циклически исполняемую дисплейным процессором. При частоте регенерации в 50 Гц одно исполнение программы должно занимать 20 мс. Если изображение слишком сложное, то дисплейный процессор не успевает его построить за 20 мсек и становится заметным мерцание. Для того, чтобы сложное изображение не мерцало требуется высокая скорость записи изображения дисплейным генератором, который работает на аналоговых, цифровых или смешанном принципах. В настоящее время используются чисто цифровые генераторы. Их основные преимущества: большая точность повторения построений (на аналоговых устройствах бывает заметен мелкомасштабный дребезг отрезков из-за недостаточной точности повторения со временем), температурная стабильность, легкая адаптируемость к разрешению и скорости прибора отображения.
Назначение генератора векторов - соединение двух точек отрезком
прямой. Все вектора картинки должны быть одинаково яркими, если иное
не задано специально. Это достигается (при неизменном токе луча) за
счет одинаковой скорости вычерчивания. Кроме задания X,Y-координат
должна управляться и интенсивность луча для построения видимого
отрезка при включенном луче и позиционирования при выключенном.
Рассмотрим генератор векторов, работающий на принципе ЦДА -
цифрового дифференциального анализатора (DDA - Digital Differential
Analyzer).
Так как для управления трубкой отклоняющие по X и Y напряжения должны формироваться независимо друг от друга, запишем выражение для координат вектора в следующей общей форме:
|
где V = [X,Y] и Pn,Pk - точки начала и конца вектора.
Параметр U имеет k+1 дискретное значение Ui = i/k; i = 0,1,ј,k. В этом случае точка Vi = V(Ui) есть:
|
Умножение, путем i-кратного сложения даст:
|
Начальная точка Pn = V0, конечная точка Pk = Vk.
Очередная точка вычисляется из соотношения:
|
Результат деления dP/k определяется, при представлении k в виде целой степени двойки k = 2 p, путем p-кратного сдвига dP. Вектор получается путем 2p кратного прибавления приращения dP/2p к исходной точке. Так как все вектора на экране должны иметь одинаковую яркость, то скорость построения должна быть одинаковой. Вследствие того что ЦДА работает с определенной тактовой частотой, количество точек должно быть пропорционально проекции длины вектора на экран. Для определения длины вектора достаточно соотношения:
|
Число адресуемых точек обычно выбирается так, что диаметр точки D = 1.41 ×R, где R точно единица растра. Это определяется необходимостью смыкания точек, стоящих в противоположных углах по диагонали квадратной растровой сетки.
Так как вектора на дисплее должны выглядеть непрерывными, то приращение | dP |/2p должно быть меньше чем элемент растра:
|
Чтобы по возможности уменьшить число сложений, p вычисляется таким образом, чтобы выполнялось:
|
При положительных относительных координатах dP из этого соотношения легко аппаратно определяется p. Для этого сдвигают значения dP в сторону уменьшения, пока в обоих регистрах не останутся нули перед двоичной точкой. При этом одновременно вычисляются и значения dP/2p. При отрицательных значениях вначале находится двоичнодополнительное число, а затем выполняется определение p.
Для того чтобы можно было отобразить больше векторов без мерцания одновременно выполняют построение вектора на экране и определение инкремента dP/2p для следующего. Этим способом можно выполнять в сумматоре без помех следующие сложения при начале нового вектора. При обработке коротких векторов можно, для повышения скорости вычислений, находить инкремент dP/2p в "барабанном сдвигателе" (это сдвиговый регистр, в котором решена проблема перехода через границы слов). При использовании быстрых переключающих схем удается достичь времени прорисовки диагонали дисплея за 20 мкс при разрешении 1024×1024 (тактовая частота 50 МГц).
На рис. 0.8.2 приведена структурная схема 10-ти разрядного генератора векторов (1024×1024 точки). Определенные вычислителем 10-ти разрядные значения 2p, используются затем для вычисления 10-ти разрядных же дробных значений dX/2p, dY/2p. Эти значения прибавляются к дробной части 20-ти разрядных сумматоров координат, в целую часть которых в начале построения загружаются начальные координаты точки. Результаты суммирований передаются на цифро-аналоговые преобразователи (ЦАП'ы) для формирования аналоговых значений отклоняющих напряжений.
Ясно, что при длине слова ЦАП'а равной разрешению дисплея (здесь 10×10 бит) отдельные фрагменты вектора будут отделены явно видимыми ступеньками в 1 дискрету. При увеличении разрядности ЦАП'а с захватом разрядов дробной части сумматора позиционирование будет более точным. Так при 11-битовых ЦАП'ах позиционирование будет с точностью до 1/2 пиксела, а при 12 разрядах - уточнение еще на 1/4. Это поясняется в таблицах на рис. 0.8.2, в которых:
Xn = Yn = 0, Xk = 6, Yk = 3 | в десятичной системе |
dX / 2p = 0.11 | в двоичной системе |
dY / 2p = 0.011 | в двоичной системе |
Другое улучшение может быть получено использованием округления. Для этого перед началом генерации вектора в оба сумматора надо загрузить 0.5. Отклонение вычерченной точки от точной позиции будет по максимуму равно половине растрового расстояния.
10-бит ЦАП 11-бит ЦАП 12-бит ЦАП
X Y X Y X Y
000. 000. 000.1 000.0 000.11 000.01
001. 000. 001.1 000.1 001.10 000.11
010. 001. 010.0 001.0 010.01 001.00
011. 001. 011.0 001.1 011.00 001.10
011. 001. 011.1 001.1 011.11 001.11
100. 010. 100.1 010.0 100.10 010.01
101. 010. 101.0 010.1 101.01 010.10
110. 011. 110.0 011.0 110.00 011.00
В растровых дисплеях ступеньки в одну дискрету возникают обязательно. Их устранение возможно не за счет уточнения позиционирования, как в векторных, а за счет корректировки изображений пикселов, что приводит к понижению пространственного разрешения. Более подробно борьба с лестничным эффектом в растровых дисплеях освещена во второй части курса.
Описанный выше генератор векторов имеет тот недостаток, что точки могут прописываться дважды и поэтому на дисплее с произвольным сканированием могут вызывать нежелательные колебания яркости. Кроме того из-за независимого вычисления обеих координат нет предпочтительных направлений.
Субъективно, однако, лучше смотрятся вектора с единичным шагом по большей относительной координате (несимметричный ЦДА). Для dX > dY (при dX,dY > 0) это означает, что координата по X направлению должна увеличиться на 1 dX раз, а координата по Y-направлению должна также dX раз увеличиться, но на dY/dX. Так как, как правило, dX не является степенью двойки, то требуется выполнения деления, что затруднено при аппаратной реализации.
Брезенхем предложил алгоритм, исключающий операцию деления, имеющуюся в ЦДА. Основная идея алгоритма состоит в том, что если угловой коэффициент прямой больше 1/2, то естественно точку, следующую за точкой (0,0), поставить в позицию (1,0) (рис. 0.8.3а), а если угловой коэффициент больше 1/2, то - в позицию (1,1) (рис. 0.8.3б). Построение отрезка из точки (0,0) в точку (4.2,1.7) показано на рис. 0.8.3в).
Программные реализации алгоритмов ЦДА и несимметричного ЦДА, а также алгоритма Брезенхема для генерации отрезков рассмотрен во второй части курса - "Основные алгоритмы".
Разработаны алгоритмы цифрового генератора векторов для окружностей и конических сечений.
Цифровой генератор векторов представляет собой специализированный, легко применимый процессор, встраиваемый в современные растровые системы как один из функционально-ориентированных процессоров. Его интеграция с приборами вывода различной точности и скорости показана на рис. 0.8.4.
Знаки (буквы, цифры, значки), наряду с векторами, являются наиболее широко употребимыми графическими примитивами. Они в общем представлены в закодированной форме, например, ASCII, КОИ-8 и т.д. Эти коды преобразуются знакогенератором в координатные значения для представления соответствующих знаков.
Используются два основных метода - векторный метод и метод матрицы точек.
Знаки запомнены в генераторе символов в виде приращений координат. Для формирования изображения знака вызывается генератор векторов для построения отрезков, составляющих знак. Для повышения эффективности кодирования используются короткие векторы в виде отрезков, соединяющих точки специального символьного растра. Знак кодируется как последовательность номеров растровых точек. Фактические относительные координаты, которые передаются генератору векторов, должны перед этим преобразоваться, чтобы, например, сохранить масштаб или направление вычерчивания знаков. При этом такое преобразование не влияет на качество знака. Генератор знаков, работающий таким образом, имеет высокое качество генерации знаков и пригоден для генерации определенных пользователем последовательностей символов.
При использовании такого метода знаки заданы как последовательности точек внутри точечной матрицы (например, 5×7 или 16×32 точек) и запомнены в генераторе знаков. При выводе знака матрица знака сканируется по строкам или по столбцам и используется для управления включением/выключением луча. Качество символов приемлемое только при отображении 1:1. Координатные преобразования, за исключением сдвига и поворота на углы, кратные 90, как правило, невозможны. Так как тогда каждая отдельная точка знака должна бы была преобразовываться и соответствующим образом выводиться, что приводило бы к затратам времени, неприемлемым для большинства приложений.
Наряду с управлением отклонением включением/выключением луча в некоторых реализациях знакогенератор формирует сигналы для управления межсимвольным расстоянием в строке. Знакогенераторы с матрицей точек обычно используются в дисплеях с растровым сканированием луча.
Наряду с генераторами векторов и знаков, многие дисплеи имеют генераторы кривых и плоскостей. Преимущество их использования в первую очередь состоит большей скорости вычерчивания а, кроме того, экономится память для хранения картины и требуется меньшее время для ее передачи. В основном, используются генераторы дуг окружностей и эллипсов.
Преобразование изображения заключается либо в его геометрическом, координатном преобразовании, либо в преобразовании видимости, заключающемся, в частности, в отсечении частей полной сцены, невидимых в заданном окне просмотра.
Дисплеи большой мощности обеспечивают выполнение геометрических преобразований (сдвиг, вращение, масштабирование, перспектива) в реальном времени с помощью аппаратуры перемножения матриц. При этом используются однородные координаты, позволяющие любое преобразование представить как умножение координат вектора на матрицу 4×4. На преобразование требуется 16 умножений и 12 сложений. При перспективных преобразованиях дополнительно требуются 2 деления. Аппаратура преобразований, в основном, реализуется на СБИС. На обычных стандартных чипах достигнуты времена преобразования в 3 мкс (без делений).
Если изображение выходит за пределы экрана, то на части дисплеев увеличивается время построения за счет того, что изображение строится в "уме". В некоторых дисплеях выход за пределы экрана приводит к искажению картины, так как координаты просто ограничиваются при достижении ими граничных значений, а не выполняется точный расчет координат пересечения (эффект "стягивания" изображения). Некоторые, в основном, простые дисплеи просто не допускают выхода за пределы экрана. Все это, особенно в связи с широким использованием технологии просмотра окнами, требует выполнения отсечения сцены по границам окна видимости.
Программное исполнение отсечения достаточно медленный процесс, поэтому, естественно, в мощные дисплеи встраивается соответствующее оборудование.
Первое сообщение об аппаратуре отсечения, реализующей алгоритм Коэна-Сазерленда для отсечения отрезка на прямоугольном окне в устройстве Clipping Diviger, появилось в 1968 г.
Имеются реализации в СБИС варианта алгоритма Сазерленда-Ходгмана для отсечения многоугольника на прямоугольном окне. В этом алгоритме многоугольник последовательно отсекается всеми четырьмя сторонами окна.
Различные алгоритмы отсечения отрезков и многоугольников, в том числе и уже упомянутые алгоритмы Коэна-Сазерленда и Сазерленда-Ходгмана, подробно рассмотрены во второй части курса - "Основные алгоритмы".
Из блок-схемы простой графической системы (см. рис. 0.8.1), после
рассмотрения работы дисплейного генератора и блока преобразований,
ясно назначение дисплейного контроллера:
· связь с компьютером;
· управление формированием изображения;
· обработка графического ввода.
Специального пояснения обеспечение связи с компьютером повидимому не требует.
В чем заключается обработка графического ввода будет в основном уяснено при рассмотрении различных устройств ввода.
Здесь требует пояснений лишь функция управления формированием изображений, которая зависит от выбранной архитектуры. Если, например, дисплейный файл находится в ЦП, то ЦП выставляет стартовый адрес и инициирует контроллер. Когда контроллеру требуется следующая команда, то он приостанавливает процессор и выполняет доступ к памяти. Полученная команда декодируется и исполняется. Это могут быть команды построений, управления атрибутами построения, выполнения преобразований, отсечения, задания следующего адреса доступа и т.д. Понятно, что в этом случае контроллер отнимает время ЦП, которое могло бы быть использовано более полезным образом. С этой целью проанализируем различные построения графических системы.
Здесь мы рассмотрим самые общие соображения по построению графической системы, не зависящие от метода формирования изображения (произвольное или растровое сканирование луча).
В общем, цель графической системы - визуализация модели объекта, обрабатываемой компьютером.
Можно представить себе два основных способа представления модели объекта - алгоритмический, когда модель объекта вместе с описанием изображения и процесса его генерации "размазаны" по некоторому алгоритму. Другой способ - представление модели объекта в структуре данных. В этом случае достигается разделение по сути дела различных функций - манипулирование моделью (моделирование объекта, сцены и т.п.) со стороны прикладной системы и отображение модели в виде картин.
Ясно, что отображение, хотя временами и очень трудная, но стабильная проблема, в то время как моделирование определяется потенциально бесконечным количеством приложений. Поэтому, оговорив интерфейс, есть смысл разделять моделирование и отображение так чтобы было возможно из независимое развитие.
Принципиальным моментом в разработке распределенной системы является выбор оптимального разделения функций между подсистемами моделирования и отображения. Естественно предполагать, что какая-либо граница раздела должна находиться в месте полного завершения выполнения некоторой функции. Кроме того, вряд ли целесообразно разделять между различными подсистемами некоторый файл данных и программу (процессор) его "интенсивной" обработки. Для уяснения задачи распределения функций рассмотрим модель графической системы с точки зрения процессов преобразования информации при формировании изображения.
Процесс вывода может быть представлен следующей схемой:
В этой модели отдана дань традиционному соображению о полезности структурированного дисплейного файла, представляющего собой иерархию вложенных объектов. Каждый объект, кроме примитивных элементов, может содержать экземпляры объектов нижнего уровня. Экземпляр объекта может сопровождаться набором совершаемых над ним преобразований. Использование экземпляров объекта выполняется либо его копированием, либо ссылкой (аналогично вызову подпрограммы). На самом же деле такое описание изображения подразумевает иерархичность его структуры, которая действительно имеет место в только ряде задач проектирования.
Итак: ВЫВ1 - подсистема моделирования готовит высокоуровневую информацию для построения структурированного дисплейного файла. Подсистема отображения формирует его и поддерживает работу с таким файлом, т.е. обмен информацией производится на наиболее высоком семантическом уровне.
ВЫВ2 - подсистема моделирования формирует структурированный дисплейный файл и передает его на хранение и интерпретацию в подсистему отображения. Понятно, что в этом случае возрастает разнообразие и сложность передаваемых данных, так как кроме информации по построению изображения должна передаваться информация, связанная с управлением структурой данных.
ВЫВ3 - подсистема моделирования формирует информацию для построения линейного дисплейного файла, возможно сегментированного. Линейный дисплейный файл формируется и поддерживается подсистемой отображения. Он является результатом выполнения геометрических преобразований, преобразований окно - порт и отсечения над полным изображением.
ВЫВ4 - подсистема моделирования формирует линейный (сегментированный) дисплейный файл и в аппаратно-ориентированной форме передает его подсистеме отображения, в задачи которой входит лишь поддержка функций приема и интерпретации файла в изображение дисплейным контроллером. Требования к вычислительной мощности подсистемы отображения и ее программному обеспечению в данном случае минимальны.
Следует отметить, что, так называемая, аппаратно-ориентированная форма для современных дисплеев, как правило, весьма высокоуровневая и включает в себя типичные наборы примитивов, атрибутов, средств сегментирования и даже структурирования. Аппаратность же в основном заключается в использовании некоторой вполне определенной формы кодирования, причем обычно наиболее компактной.
Из рассмотренного ясно, что наиболее целесообразны границы раздела ВЫВ1, ВЫВ3, ВЫВ4. Причем первые две обеспечивают аппаратную независимость, а последняя соответствует минимальным требованиям к подсистеме отображения.
Естественно полагать, что подсистема моделирования находится в ЦП, а подсистема отображения представлена дисплейным процессором.
Для повышения быстродействия при выполнении преобразований используются архитектуры с двойной буферизацией, использующие два дисплейных контроллера и два буфера для сохранения изображения. Дисплейный контроллер 1 выполняет преобразования и формирует линейный дисплейный файл в одном из буферов. Параллельно с этим более простым дисплейный контроллером 2 ведется отображение из второго буфера. Затем буфера переключаются.
Основными качествами векторных дисплеев являются:
· векторное представление с высоким разрешением,
· динамическое представление с преобразованиями в реальном
масштабе времени,
· высокая интерактивность.
Параметры векторных дисплеев по разрешению, достигнутые уже более десятилетия назад, все еще проблематичны для растровых устройств. Так, например, дисплей СМ 7316 (НИИ периферийного оборудования, Киев, 1982 г.) мог отображать без мерцания до 4000-6000 векторов и 4096 символов при разрешении 2048×2048.
Поэтому такие дисплеи хорошо подходят для задач САПР, в которых требуется быстрое представление большого числа отрезков и малое время ответа на воздействие пользователя.
Кроме этого векторные дисплеи (их геометрическая часть) могут рассматриваться как геометрические процессоры для растровых систем.