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

0.8.1  дисплейный генератор

Задача дисплейного генератора - управление X,Y-отклонением и интенсивностью луча. Как уже отмечалось, дисплейный файл, хранящий описание изображения, представляет собой программу, циклически исполняемую дисплейным процессором. При частоте регенерации в 50 Гц одно исполнение программы должно занимать 20 мс. Если изображение слишком сложное, то дисплейный процессор не успевает его построить за 20 мсек и становится заметным мерцание. Для того, чтобы сложное изображение не мерцало требуется высокая скорость записи изображения дисплейным генератором, который работает на аналоговых, цифровых или смешанном принципах. В настоящее время используются чисто цифровые генераторы. Их основные преимущества: большая точность повторения построений (на аналоговых устройствах бывает заметен мелкомасштабный дребезг отрезков из-за недостаточной точности повторения со временем), температурная стабильность, легкая адаптируемость к разрешению и скорости прибора отображения.

Генератор векторов

Назначение генератора векторов - соединение двух точек отрезком прямой. Все вектора картинки должны быть одинаково яркими, если иное не задано специально. Это достигается (при неизменном токе луча) за счет одинаковой скорости вычерчивания. Кроме задания X,Y-координат должна управляться и интенсивность луча для построения видимого отрезка при включенном луче и позиционирования при выключенном. Рассмотрим генератор векторов, работающий на принципе ЦДА - цифрового дифференциального анализатора (DDA - Digital Differential Analyzer).

Цифровой дифференциальный анализатор

Так как для управления трубкой отклоняющие по X и Y напряжения должны формироваться независимо друг от друга, запишем выражение для координат вектора в следующей общей форме:

V(U) = Pn + (Pk - Pn) ·U = Pn + dP ·U

где V = [X,Y] и Pn,Pk - точки начала и конца вектора.

Параметр U имеет k+1 дискретное значение Ui = i/k; i = 0,1,,k. В этом случае точка Vi = V(Ui) есть:

Vi = Pn + dP ·(i/k) = Pn + i ·(dP/k)

Умножение, путем i-кратного сложения даст:

Vi = Pn +

(dP/k) + + (dP/k)

 

Начальная точка Pn = V0, конечная точка Pk = Vk.

Очередная точка вычисляется из соотношения:

Vi+1 = Vi + (dP/k)

Результат деления dP/k определяется, при представлении k в виде целой степени двойки k = 2 p, путем p-кратного сдвига dP. Вектор получается путем 2p кратного прибавления приращения dP/2p к исходной точке. Так как все вектора на экране должны иметь одинаковую яркость, то скорость построения должна быть одинаковой. Вследствие того что ЦДА работает с определенной тактовой частотой, количество точек должно быть пропорционально проекции длины вектора на экран. Для определения длины вектора достаточно соотношения:

L =

max

(  dX ,  dY  )

Число адресуемых точек обычно выбирается так, что диаметр точки D = 1.41 ×R, где R точно единица растра. Это определяется необходимостью смыкания точек, стоящих в противоположных углах по диагонали квадратной растровой сетки.

Так как вектора на дисплее должны выглядеть непрерывными, то приращение | dP |/2p должно быть меньше чем элемент растра:

 

 dX  / 2p < 1

 dY  / 2p < 1

 

  

 2p > L

Чтобы по возможности уменьшить число сложений, p вычисляется таким образом, чтобы выполнялось:

2p > L  2p-1

При положительных относительных координатах 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. Отклонение вычерченной точки от точной позиции будет по максимуму равно половине растрового расстояния.

Рисунок 46

 

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

Рис. 0.1.2: Структура цифрового генератора векторов

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

Другие алгоритмы генерации векторов

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

Субъективно, однако, лучше смотрятся вектора с единичным шагом по большей относительной координате (несимметричный ЦДА). Для 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в).

Программные реализации алгоритмов ЦДА и несимметричного ЦДА, а также алгоритма Брезенхема для генерации отрезков рассмотрен во второй части курса - "Основные алгоритмы".

Рисунок 47

Рис. 0.1.3: Генерация вектора по алгоритму Брезенхема

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

Цифровой генератор векторов представляет собой специализированный, легко применимый процессор, встраиваемый в современные растровые системы как один из функционально-ориентированных процессоров. Его интеграция с приборами вывода различной точности и скорости показана на рис. 0.8.4.

Рисунок 48

Рис. 0.1.4: Варианты использования генератора векторов

Знакогенератор

Знаки (буквы, цифры, значки), наряду с векторами, являются наиболее широко употребимыми графическими примитивами. Они в общем представлены в закодированной форме, например, ASCII, КОИ-8 и т.д. Эти коды преобразуются знакогенератором в координатные значения для представления соответствующих знаков.

Используются два основных метода - векторный метод и метод матрицы точек.

Векторный метод

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

Метод матрицы точек

При использовании такого метода знаки заданы как последовательности точек внутри точечной матрицы (например, 5×7 или 16×32 точек) и запомнены в генераторе знаков. При выводе знака матрица знака сканируется по строкам или по столбцам и используется для управления включением/выключением луча. Качество символов приемлемое только при отображении 1:1. Координатные преобразования, за исключением сдвига и поворота на углы, кратные 90, как правило, невозможны. Так как тогда каждая отдельная точка знака должна бы была преобразовываться и соответствующим образом выводиться, что приводило бы к затратам времени, неприемлемым для большинства приложений.

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

Генераторы кривых и плоскостей

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