Text
                    ФУ'К'Ф,
УДК 681:^082.5
Фоли Дж., вэн Дэм А.
Ф74 Основы интерактивной машинной графики: В 2-х книгах.
Кн. 2. Пер. с англ.— М.: Мир, 1985,— 368 с., ил.
Монография написана известными американскими учеными. В русском переводе
выпускается в двух книгах. Книга 2 содержит материал по новым направлениям
развития интерактивной машинной графики. Рассматриваются архитектуры совре-
менных векторных и растровых дисплеев, алгоритмы растровой развертки и закраски,
удаления скрытых поверхностей и линий, а также для модели освещения и методы
описания цвета.
Для специалистов в области машиностроения, архитектуры, строительства,
вычислительной техники! а также для студентов старших курсов соответствующих
специальностей вузов.
2405000000-130
Ф 041 (01J-85	168‘85> ч. 1
ББК 32.97
6Ф7.3
Редакция литературы по информатике и электронике
Copyright © 1982 by Addison-Wesjey Publishing Company, Inc.
© Перевод на русский язык, «Мир», 1985

ОГЛАВЛЕНИЕ Глава 9. Моделирование и иерархия объектов............................ 5 9.1. Что такое модель?............................................ 5 9.2. Геометрические модели и иерархия объектов................... 10 9.3. Размещение объектов и экземплярные преобразования .... 14 9.4. Преобразование объектов с использованием матрицы текущего ( преобразования................................................ 17 9.5. Обобщение для двухуровневой и n-уровневой иерархий..... 23 9.6. Способы кодирования иерархии................................ 37 9.7. Многоуровневая корреляция................................... 56 9.8. Передача атрибутов.......................................... 60 9.9. Умножение матриц преобразования слева и справа.............. 62 9.10. Комбинирование прохождения модели с видовой операцией 63 9.11. Отсечение в координатах прототипа.......................... 67 9.12. Оболочки................................................... 72 9.13. Объектные окна и прямоугольники экземпляров................ 80 9.14. Заключение................................................. 86 Упражнения....................................................... 87 Глава 10. Архитектура современных дисплеев........................... 90 10.1. Введение................................................... 90 10.2. Основные положения......................................... 90 10.3. Простой дисплей с регенерацией изображения................. 94 10.4. Преобразования векторов и отсечение в пространстве изображения 102 10.5. Высокопроизводительные дисплеи с модельными преобразова- ниями и видовой операцией ................................... 106 10.6. Функциональная модель высокопроизводительной архитектуры 110 10.7. Система PS300 — следующий виток спирали обновлений ... 123 10.8. Система MEGATEK7200 ...................................... 127 10.9. Мультипроцессорные и сателлитные графические системы .... 131 10.10. Заключение......................................... 135 Упражнения................................................ 136 Г лава 11. Алгоритмы и программное обеспечение растро- вой графики ...................................................... 138 11.1. Введение.................................................. 138 11.2. Преобразование отрезков из векторной формы в растровую ... 139 11.3. Растровая развертка литер ................................ 146 11.4. Растровая развертка окружностей........................... 148 11.5. Заполнение области........................................ 153 11.6. Отсечение многоугольников................................. 157 11.7. Растровая развертка многоугольников....................... 163 11.8. Несегментированиый пакет графических подпрограмм с времен- ным приоритетом.............................................. 172
Оглавление 367 11,9. Сегментированный пакет графических подпрограмм, построенный на основе приоритетов...................................... 179 Упражнения ................................................. 186 Глава 12. Архитектура растровых дисплеев ............... 189 12.1. Введение................................................ 189 12.2. Простая растровая дисплейная система.................... 189 12.3. Программирование растрового дисплея..................... 196 12.4. Система вывода изображения.............................. 199 12.5. Альтернативные архитектуры растровых дисплеев........... 208 12.6. Растровая архитектура для персональных ЭВМ.............. 214 Упражнения.................................................. 217 Глава 13. Представление пространственных форм.............. 218 13.1. Введение................................................ 218 13.2. Полигональные сетки..................................... 220 13.3. Непротиворечивость представлений полигональной сетки . . 224 13.4. Уравнения плоскости..................................... 225 13.5. Параметрические кубические кривые....................... 228 13.6. Параметрические кубические поверхности.................. 237 13.7. Преобразование кривых и кусков поверхностей............. 244 13.8. Вычисление точек на бикубической поверхности............ 244 Упражнения.................................................. 249 Глава 14. Методы создания реалистических трехмерных изображений....................................................... 251 14.1. Введение............................................... 251 14.2. Методы представления отношений по глубине.............. 254 ' 14.3. Стереоскопия.......................................... 259 14.4. Пути создания реалистических изображений............... 262 Глава 15. Алгоритмы удаления скрытых линий и поверх- ностей .......................................................... 266 15.1. Введение............................................... 266 15.2. Упрощение сравнений по глубине: перспективное преобразование 267 15.3. Исключение сравнений по глубине. Оболочки.............. 269 15.4. Алгоритм сортировки по глубине........................ 271 15.5. Алгоритм, использующий г-буфер......................... 274 15.6. Алгоритмы построчного сканирования..................... 275 15.7. Алгоритмы разбиения области........................... 279 15.8. Эффективность алгоритма................................ 285 15.9. Алгоритмы для криволинейных поверхностей............... 286 Упражнения................................................... 289 Глава 16. Методы закраски......................................... 290 16.1. Введение............................................... 290 16.2. Диффузное отражение и рассеянный свет.................. 290 16.3. Зеркальное отражение................................... 292 16.4. Закраска полигональной сетки........................... 295 16.5. Тени................................................... 300 16.6. Поверхности, пропускающие свет......................... 301 16.7. Детализация поверхности................................ 304 Упражнения................................................... 307
368 Оглавление Глава 17. Цвет в машинной графике.............................. 309 17.1. Введение.............................................. 309 17.2. Ахроматический цвет. Интенсивность.................... 309 17.3. Хроматический цвет..................................’ 317 17.4. Цветовые модели для растровой графики................. 326 17.5. Получение цветных твердых копий....................... 337 17.6. Цветовая гармония..................................... 338 17.7. Использование цвета в интерактивной машинной графике .... 339 Упражнения.................................................. 340 Литература ................................................. 342 Предметный указатель........................................ 363 Джеймс Фоли, Андрис вэн Дэм ОСНОВЫ ИНТЕРАКТИВНОЙ МАШИННОЙ ГРАФИКИ В 2-х книгах Книга 2 Старший научный редактор И. М. Андреева Младшие научные редакторы Е. П. Орлова, Н. И Сивилева Художник В. А. Скерсис Художественный редактор В. Б. Прищепа Технический редактор Е. С. Потапеикова Корректор С. А. Денисова ИБ № 3905 Сдано в набор 05.06.84. Подписано к печати 14.11.84. Формат бОхЭО1/!»- Бумага ки.-жури. импорт. Гарнитура литературная. Печать высокая. Объем 11,50 бум- л. Усл. печ. л. 23,00. Усл. кр.-отт. 23,00. Уч.-изд. л. 24,53- Изд. № 20/3063, Тираж 15 000 экз. Заказ № 3113. Цена 2 р. 10 к. ИЗДАТЕЛЬСТВО «МИР» 129820, Москва, И-110, ГСП, 1-й Рижский пер.» 2 Ордена Октябрьской Революции и ордена Трудового Красного Знамени МПО «Первая Образцовая типография имени А. А. Жданова» Союзполиграфпрома при Государственном комитете СССР по делам издательств, полиграфии и книжной торговли. 113054, Москва, Валовая, 28
Глава 9 Моделирование и иерархия объектов | В гл, 2 было введено понятие прикладной модели (для краткости называемой просто моделью) как составной части программистской концептуальной модели приложений интерактивной графики. При- кладная модель содержит описание объекта и прикладные данные. Например, в прикладной программе размещения мебели модель была использована для хранения описаний основных компонент или объектов (стулья, столы и т. д.), а также геометрической ин- формации о положении, используемой для размещения этих объ- ектов. Затем эти объекты описывались в форме, понятной графи- ческой системе, с целью формирования конкретных образов в про- цессе построения плана помещения и после его завершения. В гл. 2 неявно подразумевалось, что прикладная модель идентична при- кладной структуре данных или базе данных. Целью данной главы является обобщение такого упрощенного подхода к модели путем демонстрации того, что модель представляет собой смесь данных и процедур. Рассматривается ряд представлений моделей, а также их достоинства и недостатки. Особый интерес в данном случае для нас представляют модели, в которых кодируется иерархия объек- тов типа, введенного в гл. 2. 9.1. ЧТО ТАКОЕ МОДЕЛЬ? Модели используются для представления реальных абстрактных предметов и явлений не только с целью формирования их изобра- жений (создания образов), но в общем случае для представления их структуры и поведения. Так, например, модели используются в физических, социальных и биологических науках, в технике и математике. Они обеспечивают возможность имитации, проверки и предсказания поведения моделируемых явлений с целью пони- мания смысла, визуализации, экспериментирования и обучения. Модели помогают понять сложные системы с большим числом взаимодействующих компонент и позволяют прогнозировать влия- ние, оказываемое многочисленными изменяющимися входными параметрами на систему и на выдаваемые ею результаты. Одним из примеров моделирования может служить макроэко- номическая модель, используемая Федеральной резервной си-
6 Глава 9 схемой США для определения влияния увеличения учетных ставок на инфляцию. Университеты используют финансовые модели, чтобы определить, какое влияние на чистую прибыль окажет увеличение платы за обучение и каков должен быть соответствующий прирост финансовой помощи. Прогнозы погоды получают путем ввода ре- зультатов измерений в реальном времени в сложную модель ло- кальных климатических систем (обычно на очень мощной ЭВМ), которая затем используется для вычисления вероятностей различ- ных состояний погоды. Аналогично правильное моделирование позволяет космонавтам практиковаться в управлении космиче- скими кораблями для дальних полетов, летчикам — изучать вож- дение самолета на летных тренажерах, специалистам по безопасной эксплуатации ядерных реакторов — предсказывать влияние раз- личных неисправностей оборудования и давать рекомендации по их устранению, а специалистам по безопасности автомобилей — исследовать прочность пассажирского салона при моделировании аварий. В этих и во многих других случаях гораздо легче, дешевле и безопаснее производить эксперимент на модели, чем в натуре. На практике во многих ситуациях (например, при обучении по- летам на космическом корабле многоразового использования или при исследованиях по безопасности ядерных реакторов) модели- рование и имитация являются единственно возможными средствами для обучения и проведения экспериментов с системой. По этим причинам моделирование на ЭВМ заменяет более традиционные способы, например построение масштабных моделей, подвергаемых испытаниям или измерениям (в частности, в аэродинамических трубах). Методы моделирования, использовавшиеся до внедрения вычислительной техники в автомобилестроение, требовали настоя- щих автомобилей, в которые помещались манекены и измеритель- ные приборы и которые разбивали о барьеры; теперь эти методы дополняются моделированием автомобильных аварий на ЭВМ. Разумеется, не все модели должны быть переведены на ЭВМ. В этой книге мы ограничиваемся рассмотрением только машинных моделей, т. е. моделей, хранящихся в ЭВМ и представляющих объекты и процессы некоторого явления. Нас, в частности, больше всего интересуют такие модели, которые пригодны для графической интерпретации. Среди обычных типов моделей, для которых была использована машинная графика, можно назвать следующие: организационные модели: структуры организаций, классифи- кации (библиотечные, биологические); количественные модели: эконометрические, финансовые, социо- логические, демографические, климатические, химические, физи- ческие и математические системы; геометрические модели: технические и архитектурные конструк- ции, молекулы и другие химические структуры, транспортные средства.
Моделирование и иерархия объектов 7 Безусловно, одной из наиболее важных задач при моделиро- вании является разработка и реализация таких моделей, которые правильно отражали бы свойства моделируемых предметов и яв- лений за счет использования достаточно точной (количественной) формализации. В тех случаях, когда это возможно, модель необ- ходимо сравнивать с реальностью, и если они различаются, то разработчик модели должен постараться ее откорректировать, чтобы улучшить обеспечиваемые ею точность и полезность. Модели часто представляют в виде систем уравнений с входными и выход- ными переменными и с регулируемыми параметрами (например, коэффициентами или показателями степеней). С моделями не обязательно должна ассоциироваться чисто геометрическая информация; такие абстрактные понятия, как орга- низационные модели, например, не имеют пространственной ори- ентации. Тем не менее большинство таких моделей может быть представлено геометрически; в частности, организационную модель можно представить в виде организационной схемы. Даже в тех случаях, когда в модели содержится чисто геометрическая инфор- мация, не обязательно какое-либо конкретное представление этой геометрии в графическом виде, поскольку за нами остается решение, с какой точки зрения «сфотографировать» объект воображаемой фотокамерой и какую при этом использовать геометрическую про- екцию. Кроме этих стандартных возможностей при выполнении видовой операции, существуют и другие возможности, например удаление скрытых линий, штриховка или закраска, а также другие методы для улучшения внешнего вида объекта. Представление можно обогатить и негеометрической информацией, например тек- стовыми надписями. Для наших целей наиболее важной проблемой является опре- деление того, какую геометрическую и негеометрическую инфор- мацию следует включить в модель; когда это станет ясно, можно будет решать, каким образом кодировать данную информацию. Среди необходимых составных частей, которые должны быть пред- ставлены в модели, можно назвать следующие: основные элементы данных и их взаимоотношения; пространственное размещение и форма компонент (т. е. их геометрия), а также другая информация, относящаяся к их внеш- нему виду, например цвет и раскраска; связность компонент (т. е. структура или топология явления); при этом информация о связности может быть задана абстрактно (например, в матрице связности для элементов блок-схемы) или же может иметь собственную геометрию (например, при задании положения компонент интегральной схемы); специфические для рассматриваемого применения данные, на- пример электрические или механические характеристики или описательный текст;
обрабатывающие алгоритмы, например алгоритм анализа ли- нейных цепей для моделей дискретных схем или алгоритм метода конечных элементов для механических конструкций. Таким образом, модель представляет собой полное и точное описание компонент и процессов, которые совместно определяют структуру и поведение моделируемого явления. Мы можем сами решить, представлять ли графически один или оба этих аспекта. Например, нам может потребоваться представить физическое раз- мещение схемы на плате и ее функционирование (в зависимости от входных сигналов и времени). Принятие решения о том, какую информацию о структуре и поведении следует закодировать, обычно связано с многими компромиссами между простотой и пригод- ностью для осмысления модели, с одной стороны, и точностью или степенью «реализма» (и соответствующими требованиями к вычислительным ресурсам) — с другой. Непросто также решить, что должно храниться в явном виде, а что следует вычислять (клас- сический компромисс между затратами памяти и затратами вре- мени). Так, например, в модели блок-схемы можно хранить в явном виде соединительные линии, а можно их каждый раз вычислять, исходя из матрицы связности с помощью простого алгоритма раз- мещения графа, когда требуется новый вид. Аналогичные решения требуется принимать относительно схем организации модели, ко- торые обеспечивают либо быстроту ее анализа, либо быстрый гра- фический вывод. Итак, в модели должно храниться достаточное количество информации, чтобы осуществлять как анализ, так и графический вывод, однако ее конкретный формат и выбор того или иного метода кодирования зависят от конкретного приложения и компромисса между памятью и временем. В общем случае модель состоит из прикладной структуры дан- ных и набора процедур прикладной программы, которые помогают описать структуру и (или) поведение модели. На рис. 9.1 схема- тически представлено взаимоотношение между моделью, приклад- ной программой и графической системой (в нашем случае ПГП). Мы разделили прикладные программы на четыре подсистемы: а) программы, которые строят, видоизменяют и поддерживают модель путем добавления, удаления и замены содержащейся в ней информации; б) программы, которые осуществляют просмотр модели для извлечения информации, подлежащей графическому выводу; в) программы, которые осуществляют просмотр модели для извлечения информации, используемой при анализе поведения или работы модели; г) программы, которые используются обычно тремя остальными подсистемами для вывода информации из модели (результаты рас- четных программ, подсказки и меню) и для обработки управляющей информации, введенной пользователем.
Моделированиях^ иерархия объектов 9 Прикладная программа Рис. 9.1. Модель, компоненты, производящие считывание из нее (для графиче- ского вывода или анализа), и компоненты, производящие запись в модель (про- цедуры построения, измерения и анализа). Графичес- кая система Части программы, не работающие с моделью Компоненты,осусцестВ- Программное ляющие запись В модель обеспечение и считывание из нее нижц$го уровня Прикладной библиотекой называется совокупность подпро- грамм, не используемых при интерактивном'диалоге, но осуществ- ляющих различные вспомогательные операции, последующую об- работку и т. д. Подсистемами отнюдь не всегда называют крупные программные модули; для реализации подсистемы в некоторых случаях достаточно нескольких обращений или короткой процедуры. Кроме того, подсистема скорее может быть распределена по при- кладной программе, чем сосредоточена в отдельном программном модуле. Таким образом, схема, приведенная на рис. 9.1, позволяет выделить на концептуальном уровне только логические компо- ненты, но не обязательно компоненты программной структуры. Как показано на рис. 9.1, в модель не включены процедуры, ко- торые строят модель, анализируют ее или выводят изображение модели, хотя не всегда очевидно, какая часть прикладной программы является частью модели, а какая часть не входит в состав модели и предназначена для работы с ней. Можно рассмотреть, например, случай, когда модуль анализа электрических цепей фактически представляет собой часть описания модели, поскольку он описы- вает поведение цепи. Схема на рис. 9.1 будет понята правильнее, если считать, что модель содержит прежде всего данные. Смесь данных и процедур для кодирования модели будет дополнительно рассмотрена ниже в данной главе. В начальный период развития машинной графики моделирова- ние было тесно связано с графическим дисплеем и с обработкой информации, вводимой пользователем [447]; однако следует четко
W Глава 9 'I ---------------------------------------------------------—«. д представлять себе, что моделирование прежде всего является работой прикладной программы. Представление о воображаемой фотокамере в машинной графике позволяет отделить построение и видоизменение моделей предметов и явлений от получения их изображений. Дело в том, что моделирующие прикладные про- граммы могут быть полностью разработаны без использования машинной графики. Однако использование современных моделиру- ющих пакетов основывается на наличии графического пакета, позволяющего получать изображения и обеспечивать диалог с программой. Кроме того, во многих прикладных программах, в особенности в тех, которые предназначены для широкого практического ис- пользования, действует правило «80/20». Это означает, что при- мерно 80% программы относится к моделированию явлений и только 20% — к получению их изображений. Другими словами, графические прикладные программы насыщены данными и про- цессами обработки, а не процессами формирования изображения. Безусловно, существуют многочисленные применения, для которых «вся суть в изображении», например эскизирование, рисование, раскраска, черчение, изготовление мультфильмов, формирование реалистических синтезированных фотографий и динамических сцен для летных тренажеров. Однако в большинстве применений, включая проектирование с применением ЭВМ, визуальное пред- ставление модели рассматривается лишь как средство для дости- жения таких целей, как анализ, конструирование, числовое программное управление или другие виды последующей обработки. В данной главе рассматриваются типичные применения, которые требую! значительного объема моделирования. 9.2. ГЕОМЕТРИЧЕСКИЕ МОДЕЛИ И ИЕРАРХИЯ ОБЪЕКТОВ Геометрические или графические модели описывают предметы и явления, обладающие геометрическими свойствами; поэтому для них вполне естественным является графическое представление. Как в программе LAYOUT (гл. 2), они часто имеют иерархическую структуру, которая возникает в результате процесса построения «снизу вверх»: компоненты используются как строительные блоки для формирования объектов более высокого уровня, которые в свою очередь могут использоваться как строительные блоки для объектов еще более высокого уровня и т. д. Иерархии объектов встречаются очень часто, поскольку очень редко явления бывают монолитными (неделимыми); если, напри- мер, известно, что явление может быть разложено на некоторую совокупность отдельных частей, то мы имеем дело по крайней мере с одноуровневой иерархией.
Моделирование и иерархия объектов 11 В техническом проектировании иерархия объектов и подобъек- тов называется иерархией агрегатов и узлов. Обычно стандартные компоненты используются в иерархиях как основные строительные блоки. Часто их чертят с помощью трафаретов со стандартными символическими формами (в гл. 2 они называются символами). Пластмассовые трафареты для черчения блок-схем или схем циф- ровой логики для двумерных объектов могут служить типичным примером; для трехмерных объектов основными строительными блоками служат цилиндры, параллелепипеды, сферы и пирамиды. Термином объект мы будем называть такие двумерные или трех- мерные стандартные компоненты, которые задаются в собственных мировых координатах и обычно содержат не только геометрические данные, но и ассоциированные с ними прикладные данные. Однако мы примиримся с общепринятой практикой и будем использовать также термин символ, в особенности для двумерных объектов, которые включают только геометрические данные (относящиеся к форме). Следует отметить, что подобное использование термина в некотором смысле является дезориентирующим, поскольку термин символ в этом случае, как и слова объект или компонента, отно- сится к исходному двумерному или трехмерному объекту, тогда как обычно он относится к конкретному графическому представ- лению (образу) на видовой поверхности (результату интерпретации с помощью воображаемой камеры). В модели явления необходимо отразить не только компоненты, но и существующие между ними физические и причинные взаимо- связи. Таким образом, иерархия формируется для ряда целей, к которым относятся: построение сложных объеков из отдельных модулей (как в программе LAYOUT) обычно путем повторного использования стандартных компонент; экономия памяти, так как достаточно хранить только ссылки на объекты, используемые многократно, вместо того чтобы каждый раз повторно описывать эти объекты; изменение явления на основе его компонентной структуры. Например, если изменить описание одной из основных компонент, изменение автоматически распространится на компоненты более высоких уровней, в которых эта компонента используется (по- скольку теперь ссылки указывают на скорректированную версию компоненты). Поэтому при следующем обращении к процедуре DISPLAY_D_STR все стулья на чертеже комнаты с мебелью будут автоматически изменены, если изменить координаты или обращения к примитивам в процедуре CHAIR. Удобным графическим представлением реальной или модели- руемой иерархии объектов является привычная древовидная схема. На рис. 9.2 показано несколько стандартных объектов из широкого класса двумерных блок-схем и трехмерных механиче-
12 Глава 9 Рис. 9.2. Типичные примеры двумерных и трехмерных схем и блок-схем. а — структурированная блок схема; б — оптическая система; в — логическая схема; г — ме- ханическая система грузов, пружин и амортизаторов, д — пространственная система трубо- проводов ских объектов. Большинство из них состоит из нескольких компо- нент, которые соединены между собой и образуют сеть. Следует иметь в виду, что иерархическая декомпозиция производится раз- работчиком по собственному усмотрению. Так, например, блок- схему на рис. 9.2, а можно легко представить в виде двухуровневой иерархии, состоящей из прямоугольника для присваивания, пря- моугольника для repeat until и прямоугольника для if then else с вложением repeat until. Трехколесный велосипед (рис. 7.18) можно было бы представить в виде двухуровневой иерархии, со- держащей на первом уровне (под корневым узлом) задний узел, раму и переднее колесо, причем задний узел может включать два колеса и ось и т. д. При другой декомпозиции его можно предста- вить как одноуровневую иерархию, в которую входят три колеса, ; ось, рама, седло и руль. Аналогичным образом схема НЕ-ИЛИ_ (рис. 9.3, а), если ее рассматривать с точки зрения электронных цепей, должна естественно в качестве компонент самого нижнего , уровня содержать стандартные символы резистора, диода и транзи- з стора (рис. 9.3, б). Возможно и другое решение, при котором схема \ HE-ИЛИ делится на логические составные блоки самого нижнего' уровня, какими являются инвертор, фильтр и элемент ИЛИ (рис.
Моделирование и иерархия объектов 13 НЕ-ИЛИ Диод Диой ДиоЭ Резистор конЗенсатор Резистор Резистор Транзистор Резистор Земля б Рис. 9.3. Декомпозиции схемы HE-ИЛИ (отрицание дизъюнкции). а — схема дискретной цепи HE-ИЛИ; б — декомпозиция на стандартные схемные компонен* ты; а — двухуровневая иерархия логических компонент; г — двухуровневая иерархия про- стых чертежных компонент. 9.3, в). Наконец, каждый из символов схемы (например, транзи- стор) для целей вычерчивания можно подвергнуть дальнейшей декомпозиции на такие элементы низшего уровня, как кружок, стрелка, Т-образное сопряжение или угол (рис. 9.3, г). (Как для иерархии типа б, так и для иерархии типа в для каждого узла может существовать соответствующее графическое представление.) В некотором смысле объект представляет собой примитив, опреде-
14 Глава 9 ляемый пользователем, и обычно в качестве объектов самого нижЯ него уровня принимаются такие, которые представляют собой логические элементы, имеющие смысл для пользователя прикладной программы. Исходя из этого, можно утверждать, что иерархии,! показанные на рис. 9.3, бив, являются разумными, а иерархия я на рис. 9.3, г имеет слишком низкий уровень. | 9.3. РАЗМЕЩЕНИЕ ОБЪЕКТОВ И ЭКЗЕМПЛЯРНЫЕ ПРЕОБРАЗОВАНИЯ Во многих иерархиях объекты размещаются в заданных пози- циях и (или) с заданными соединениями, причем размещение осу- ществляет либб пользователь в диалоговом режиме, либо приклад- ' ная программа в автоматическом режиме. В гл. 2 пользователь размещал символы мебели, не соединяя >их, для чего применялась прикладная программа, выполнявшая простые Геометрические ‘ преобразования поворота и размещения этих символов в мировой координатной системе до получения снимка. В применении, свя- занном в размещением элементов интегральной схемы, возможно, что пользователь корректирует положение компонент и их соеди- нений в явном виде после того, как основной объем этой работы осуществлен алгоритмически методом проб и ошибок. При разра- ботке сетевых графиков с использованием метода ПЕРТ (как и во многих других применениях для составления графиков) про- грамма осуществляет размещение узлов (обозначающих цели, ко- торые должны быть достигнуты) и ребер (на которых проставляются , сроки выполнения). Размещение производится автоматически по текстовой информации, задаваемой пользователем. Отметим еще раз, что соединения можно либо описывать и хранить в явном виде, либо задавать процедурно с помощью прикладной программы и вычислять их всякий раз заново. В любом случае соединения часто имеют собственные геометрические свойства и ограничения (на- пример, отрезки прямых должны оставаться горизонтальными или вертикальными независимо от того, каким образом смещаются соединяемые ими объекты). В гл. 7 рассмотрены геометрические преобразования (перенос, поворот и масштабирование) в однородных координатах; указанные преобразования выполняются над объектами и примитивами в мировой координатной системе. При наличии иерархии можно считать, что объекты задаются в собственной координатной системе и затем преобразуются в координатную систему объекта более. высокого уровня (разд. 7.7). Если использовать терминологию, ч принятую в системе Sketchpad [446], можно сказать, что мы приме- s няем геометрическое экземпляры^ преобразование к описанию;, объекта-прототипа, причем прототип задается в собственной ко*/ ординатной системе; в результате мы получаем экземпляр этогоj
Моделирование и иерархия объектов 15 б 6 Рис. 9.4. Размещение мебели в комнате, представленное в виде одноуровневой иерархии. а — древовидная модель для размещения мебели; б — иерархия с указанием преобразований экземпляров; в — представление в виде направленного ациклического графа, на основе которого строится дерево объекта-прототипа в системе координат прототипа более высокого уровня. На рис. 9.4, а и б показана иерархия программы LAYOUT соответственно в том виде, как она представлена в гл. 2 и с исполь- зованием явных экземплярных преобразований. Каждое преобра- зование, примененное к корневой компоненте, переводит соот- ветствующий прототип в мировую координатную’систему. Таким образом, первое экземплярное преобразование ЭПстуЛ1 коми ото- бражает примитивы из прототипной координатной системы стула на прототипную координатную систему комнаты; поскольку комната является корневым объектом, ее прототипная координатная си- стема является одновременно мировой координатной системой. (Следует отметить, что обозначения ЭПстуЛ1 коми и т. д. представ- ляют произвольные, а не конкретные экземплярные преобразова- ния.) Существует удобная аналогия между абстрактной иерархией объектов и иерархией процедур в программе: корневой объект
W Глава 9 ... ....... т , |1(Д W «вызывает» подобъект и конкретизирует его, передавая ему в, ка- честве «параметров» соответствующие этому «вызову» значения геометрического преобразования. Эти преобразования настраивают, подобъект таким образом, чтобы он мог быть включен в вызываю- ' щий объект. Поскольку объекты обычно используются многократно (как и в случае процедурной иерархии), древовидное представление иерархий на рис. 9.2—9.4, б фактически превращается в направ- ленный ациклический граф, узлы которого представляют собой подобъекты или объекты, а ребра помечены экземплярными пре- образованиями, которые обеспечивают уникальность каждого эк- земпляра (рис. 9.4, в). В некоторых моделирующих системах объ- екты можно не только подвергать экземплярным преобразованиям, но и копировать. Копирование объекта состоит в следующем: описание копируемого объекта (который может быть потенциально подвергнут геометрическим преобразованиям) помещается в тело копирующего объекта. Таким образом, если экземпляры играют такую же роль, как ссылки на независимые процедуры, копии дей- ствуют как макрорасширения, текст которых (после параметри- зации) вставляется в точке вызова, причем они теряют свое «лицо», т. е. связь с прототипом. Таким образом, если описание прототипа изменяется в процессе выполнения задачи, то при очередном про- хождении иерархии для описания корневого объекта, подлежащего выводу, все экземпляры будут автоматически представлять собой скорректированную версию прототипа, а все копии останутся не- тронутыми, поскольку не имеют связей с прототипом. Кроме экземплярных преобразований, применяемых к прото- типам объектов, в том числе и к корневому объекту, для изменения самого корневого объекта в мировой системе до получения снимка могут быть использованы геометрические преобразования (напри- мер, равномерное масштабирование или поворот). Аналогично до выполнения экземплярного преобразования все примитивы инди- видуального прототипа могут подвергаться геометрическим пре- образованиям в своей локальной прототипной координатной си- стеме до получения желаемого эффекта. Как геометрические пре- образования, используемые для манипулирования объектами в их собственных (локальных) координатных системах, так и преобра- зования для получения экземпляра в системе координат более высокого уровня принято называть модельными преобразованиями, поскольку они используются для построения модели в мировых координатах. Их не следует смешивать с геометрическими пре- образованиями, используемыми для нормирования видовых объ- емов и для осуществления отображения окна на поле вывода при видовой операции, осуществляемой графической системой после моделирования. Разумеется, с математической точки зрения все модельные и видовые геометрические преобразования имеют оди- наковую форму и используют одинаковое матричное задание пере- носа, поворота, масштабирования (и сдвига), однако концепту-
Моделирование и иерархия объектов 17 ально они применяются в разное время и с управлением от разных подсистем. В разд. 9.11 показано, как наиболее эффективно объ- единять максимально возможное количество геометрических модель- ных и видовых преобразований. 9.4. ПРЕОБРАЗОВАНИЕ ОБЪЕКТОВ С ИСПОЛЬЗОВАНИЕМ МАТРИЦЫ ТЕКУЩЕГО ПРЕОБРАЗОВАНИЯ Экземплярное преобразование, применяемое к таким объектам, как стулья в программе LAYOUT, выполняется благодаря тому, что процедура описания стула сама преобразует собственные прототипные координаты, хранящиеся в прикладной структуре данных, роль которой выполняют массивы стул_х и стул_у. Про- цедура CHAIR вызывает внутреннюю процедуру XFORM, которая отображает эти сохраняемые прототипные координаты в преобра- зованные экземплярные координаты, помещаемые во временные массивы. Затем процедура CHAIR использует эти координаты при обращении к примитивам ПГП. Следовательно, выполняются два последовательных преобразования — одно из них производит про- граммист, а другое — ПГП. Такая стратегия неэффективна. По- скольку получение экземпляра — весьма распространенный про- цесс, целесообразнее разработать такую систематическую страте- гию, которая устранила бы необходимость программирования по- вторяющегося процесса получения экземпляра непосредственно в каждой процедуре. Для этого вводится новое средство — матрица текущего преобразования (МТП). МТП — определенная в графиче- ской системе глобальная переменная, в которой прикладной про- граммист до вызова процедур, описывающих объекты, задает со- ответствующую матрицу преобразования в однородных координа- тах. После этого графическая система осуществляет преобразование каждого координатного вектора X с помощью МТП, прежде чем координата передается в имеющиеся в ПГП процедуры вывода примитивов: Хмяр=Хпрот-МТП. Иными словами, координаты прототипа подвергаются автоматически предварительной обработке с помощью МТП и превращаются в мировые координаты, прежде чем они будут использованы в видовой операции, применяемой к каждому выходному примитиву. Как вписывается этот механизм в аналогию между получением экземпляра и вызовом процедуры? Геометрические параметры эк- земплярного преобразования в этом случае «передаются» из про- цедуры высшего уровня, осуществляющей получение экземпляра, к процедуре низшего уровня, описывающей прототип, через гло- бальную переменную (МТП) и механизм предварительной обработки, а не с помощью явного механизма передачи параметров, как это осуществлено в LAYOUT. Поскольку эта предварительная обра- ботка ПГуШАГТППЯАТГЯ. ца м1У.а"п Д1т',е -хрпд —«я*- I [мфииРГУая I Cr.»o гтл п.-иг? ЧГ.к-ЛЗ научная V
18 Глава 9 Экэемплярные преобразования Зля задания МТП ВыхоВные примитивы в мировых координатах ---------------------». Рис. 9.5. «Эмбрион» моделирующей системы' использование МТП (матрицы те- кущего преобразования) в качестве интерфейса для подключения непосредственно к графической программной системе. Графическая система Задание параметров вивовои операции Эля ПГП система сформирует изображение, механизм МТП следует рас- сматривать не как часть самой графической системы, а как неко-- торую начальную фазу «эмбриона» моделирующей системы, который через интерфейс будет соединен с графической системой (рис. 9.5). , (Следует отметить, что эта моделирующая система имеет дело ( только с геометрическими параметрами, а не с более общими мо- дельными данными, привязанными к конкретному приложению, ’ что свойственно полной моделирующей системе.) Теперь прикладная ; программа обращается к моделирующей системе, содержащей МТП, и к графической системе соответственно для работы с описаниями объектов и для получения их образов. Прежде чем описывать эти интерфейсы более подробно, рас- I смотрим функции пакета для работы с МТП. Прежде всего нам - необходимо иметь возможность задавать (загружать) МТП из указанной матрицы, а также сохранять ее в заданной матрице. Кроме того, как показано ниже, при многократных экземплярных преобразованиях и при многоуровневых иерархиях весьма целе- сообразно иметь возможность осуществлять пошаговое изменение МТП путем ее умножения на заданную матрицу. Так как такое предварительное умножение позволяет объединять матрицы для выполняемых последовательно преобразований, МТП называют также результирующей или объединенной матрицей преобразова- ния. Поскольку мы теперь имеем модификации МТП для работы 5 как в абсолютных, так и в относительных координатах, а также | поскольку мы хотим следовать принятым соглашением при выборе | названий процедур, нами используются модификаторы ABS и REL, примененные ранее соответственно для абсолютных и отно- сительных модификаций процедур ПГП при задании примитивов — j отрезков прямых. Наконец, чтобы освободить прикладную про- и грамму от расчетов матрицы однородных координат для МТП с целью выполнения конкретных переноса или поворота или же за- j данного масштабирования, мы добавим функции, которые вычис-^j
Моделирование и иерархия объектов 1» ляют соответствующие матрицы и затем автоматически заносят их в МТП или умножают на них МТП. В табл. 9.1 сверху приведены названия трех процедур для дву- мерного случая, которые образуют функционально полный набор Таблица 9.1. Функции дли работы с МТП 1> SET_CTM_ABS_2(m) Занести в мтп матрицу т размером 3x3 SET_CTM_REL_2(m) COPY_CTM(m) Заменить мтп на т^мтп Скопировать мтп в т TRANSLATE_CTM_ABS_2(x, у) Заменить мтп матрицей переноса на х, у2> TRAN SLATE -CT M-REL-2(x, y) Умножить мтп слева на матрицу переноса на х, у SCALE-CTM_ABS_2(sx, sy) Заменить мтп матрицей масштаби- рования с коэффициентами sx, sy 2> SCALE_CTM-REL-2(sx, sy) Умножить мтп слева на матрицу масштабирования с коэффициен- тами sx, sy ROTATE _CTM_ABS-2 (theta) Заменить мтп матрицей поворота на угол theta градусов 2) ROTATE -CTM-REL_2(theta) Умножить мтп слева на матрицу поворота на угол theta градусов PU SEI (мтп, стк) POP (мтп, стк) Поместить мтп на стек стк Взять вершину стека стк в мтп х) Когда речь идет о системе МТП (по-английски СТМ) в общем описательном смысле, мы используем прописные буквы, когда же к этой матрице получают доступ процедуры, то для обозначения переменных (системных) мы используем строчной курсив. 2) Другие компоненты матрицы задаются так, чтобы выполнялось тождественное пре- образование. операций над МТП. Ниже перечисляются шесть процедур, в кото- рых используются процедуры SET_CTM (задать МТП). Эти шесть процедур добавлены для удобства работы; названия их трехмерных вариантов очевидны. Наконец, процедуры PUSH и POP — допол- нительные процедуры, в которых используется процедура COPY; их функции разъясняются в разд. 9.5. Рассмотрев кратко работу с МТП, обратимся к примеру ее ис- пользования. В примере 9.1а процедура DISPLAY_SYMBOL приводится в форме, которая была обсуждена в гл. 2, а в примере 9.16 дана ее пересмотренная версия, в которой используется МТП. Следует обратить внимание на три обстоятельства. Во-первых, обеспечивается очевидное упрощение, поскольку вызывающая процедура задает «параметры» для экземплярного преобразования через МТП, а процедуры для задания объектов уже «не отвечают»
20 Глава 9 за получение экземпляра своих собственных объектов. Таким обЯ разом, пакет МТП берет на себя функции процедуры XFORM, о отпадает необходимость в локальных массивах для экземплярныя координат. Во-вторых, как показано ниже, задание МТП полезно! при многократных экземплярных преобразованиях (их объединение! осуществляется автоматически пакетом МТП). | Наконец, в-третьих, важнее всего понять правильный лекси- ческий порядок, в котором следует задавать экземплярные преоб- разования пакету МТП, чтобы эти преобразования применялись к объекту в правильном логическом порядке. В общем случае1) ^ВКЭ ^прот* МЭПдрот, ВКЗ‘ Пример 9.1а. Схема процедуры DISPLAY-SYMBOL для LAYOUT procedure DI SPLAY-SYMB0L(ud: integer); {Версия из гл. 2, вызывающая соответствующую процедуру для символа о передачей ей параметров экземплярного преобразования} begin with символы[ид] do if правильный код then begin CREATE-SEGMENT(ud); {далее вызвать соответствующую процедуру для символа с парамет- рами х, у, theta по полю кода в символы[ид]} case код of 1: CHAIR{x, у, theta)-, 6-. FLOORPLANT(X, у, theta) end {case} CLOSE-SEGMENT end {if} end; {DISPLAY-SYMBOL} procedure CHAlR(xc, ус, уг-повор: real); {Версия процедуры для символа стула, приведенная в гл. 2, где вызывается XF0RM со следующими параметрами: число преобразуемых координат (в данном случае /), глобальный массив координат и параметры экземпляр- ного преобразования} var стуЛ-Х-нов, стул-у-нов: array [1..10] of real; t: integer; begin XF0RM{xc, ус, уг-повор, стул-х, стул-у, стул-Х-нов, стул-у-нов, 7); M0VE-ABS-2 (стул-Х-Нов[\}, стул-у-нов[1]); for i:= 2 to 7 do LINE-REL- 2 {стул-Х-нов[1}, стул-у_нов[е]); end; {CHAIR} Пример 9.16. Пересмотренная процедура DISPLAY-SYMBOL с использова- • нием МТП ! procedure DISPLAY-SYMBOL(ud: integer); * begin , i, 1 ЭП на рис. 9.4 обозначает некоторую произвольную последовательность'’ из одного или более экземплярных преобразований, тогда как МЭГТ — последо- вательность, представленную в виде конкретной матрицы однородных координат.
Моделирование и иерархия объектов 21 with символы[ид] do if правильный код then begin CREATE -SEGMENT(ud); {задать МТП с использованием параметров экземплярного преобразо- вания из символы[ид], а затем вызвать соответствующую процедуру символа} TRANSLATE-CTM-ABS_2(x, у)-, ROTATE _CTM_REL_ 2 (theta); case код of 1: CHAIR-, 6: FLOORPLANT end; {case} CLOSE-SEGMENT end {if} end; {DISPLAY-SYMBOL} procedure CHAIR-, {МТП уже была задана соответствующим образом, поэтому можно описать непреобразованные примитивы в прототипных координатах; передавать пара- метры экземплярного преобразования не нужно} var i: integer; begin MOVE-АВ8-2(стул_х[\], стул-у[1])-, for «:= 2 to 7 do LlNE-REL-2(cfT^-x[i], стул_у[1]) end; {CHAIR} Здесь МЭПпрот>экз есть матрица экземплярного преобразо- вания (обычно сохраняемая в МТП), которая отображает коорди- наты прототипа объекта в координаты экземпляра для прототипа высшего уровня или в мировую координатную систему, куда по- мещается объект, подвергнутый экземплярному преобразованию. Например, в программе LAYOUT для символа стола это выражение принимает вид ^КОМН=^СТОл‘ МЭПСТОЛ, коми» здесь МЭПСТОЛ< коми — матрица экземплярного преобразования, с помощью которого стол переводится в систему координат прото- типа комнаты. При использовании МТП в распространенном случае одноуровневой иерархии (когда координатная система прототипа высшего уровня одновременно является мировой координатной системой) общая формула принимает вид ^мир=^прот • МТП, как в примере 9.16. Матрица МЭПпр0Т1ЭКЗ, хранящаяся в МТП,. представляет собой объединенную матрицу, которая является произвольной комбинацией различных МЭП для переноса, поворота и масштабирования. Такие МЭП можно объединять, умножая МЭП слева на МТП. Это означает, что те МЭП, которые задаются (лек- сически) последними, логически воздействуют первыми на коор-
22 Глава % динаты прототипа. Таким образом, лексический порядок обратен логическому. В программе LAYOUT, где выполняется один по- ворот (заданный с помощью МЭП0) с последующим переносом (за- данным МЭПЖ> v), мы хотим, используя ассоциативность умноже- ния матриц, добиться следующего эффекта: ^комн (Xсимвол* МЭПа)МЭПХ( У=ХСЙМВОЛ- (МЭП0-МЭПЖ, у) = —^символ1 МТП Поэтому операции с МТП заданы в примере 9.16 в следующем лексическом порядке: TRANSLATE_CTM_REL_2 (х, у); ROTATE _CTM_REL_2 (theta); Если принять, что МТП инициализируется матрицей тождествен- ного преобразования I, то умножение слева дает желаемый резуль- тат: МТП=МЭП0- (МЭПЖ. у-1)= (МЭП0-МЭПЖ< у). Аналогично, если бы имелись также геометрические преобразова- ния отображения прототипа объекта на его собственную прототип- ную систему координат для любых экземплярных преобразований, то они применялись бы логически до и лексически после экземпляр- ных преобразований (такие геометрические преобразования мы обозначим через МЭПпр0Т1 прот): ^экз ^прот’МЭПгеои- (МЭП0-МЭПЖ, р) Хпрот-МЭПпроТ1 прот- • М9П ITiL-Zl 1ПрОт^ эк3. Ни в программе LAYOUT, ни в примерах, приводимых выше, ‘ не используются геометрические преобразования типа «прототип в прототип». В разд. 9.9 появится еще и умножение на МТП справа, чтобы преобразование, являющееся первым лексически, логически дей- ствовало также первым; такой порядок, по-видимому, является более естественным. Однако, как показано в разд. 9.5.3, при много- уровневой иерархии умножение слева необходимо. Рассмотрим снова интерфейс между МТП и моделирующим па- кетом, с одной стороны, и графическим пакетом — с другой. Можно видеть, что выходные примитивы в процедуре CHAIR теперь следует рассматривать, строго говоря, как примитивы для моде- | лирования, которые передаются графическому пакету только после | того, как к ним будут применены моделирующие преобразования с использованием МТП. Весьма велика вероятность, что графиче- ; ский пакет подвергнет мировые координаты примитивов дальней- j шим преобразованиям: это могут быть либо нормирующие преобра- зования, рассмотренные в предыдущей главе для трехмерного , случая, либо целый комплекс преобразований, связанных с видовой операцией для простого двумерного случая. Поэтому наиболее ’
Моделирование и иерархия объектов 23 Рис. 9.6. Использование обхода для обеспечения возможности максимального объединения матриц. целесообразным представляется объединить, если это возможно, моделирующие преобразования в МТП с нормирующими и видо- выми преобразованиями и уже затем их применять к исходным координатам прототипа. На рис. 9.6 показано, как это можно осуществить путем использования обхода (hook), т. е. соглашения о вызовах, с помощью которого моделирующий пакет может пере, давать параметры для задания МТП графическому пакету. Гра- фический пакет объединяет значения МТП с составными видовыми преобразованиями, а затем преобразует координаты прототипа, используя) общую объединенную матрицу. Другие комбинации моделирования и видовых операций рассматриваются в разд. 9.10 и 9.11. 9.5. ОБОБЩЕНИЕ ДЛЯ ДВУХУРОВНЕВОЙ И л-УРОВНЕВОЙ ИЕРАРХИЙ 9.5.1. Двухуровневая фиксированная (статическая) иерархия Попробуем сделать программу LAYOUT ближе к реальным условиям и будем считать, что художники по интерьеру, размещая мебель в комнате, думают не столько об отдельных предметах мебели, сколько об их связных группах (часто называемых в тех- нической эстетике модулями). Поэтому в нашей программе разме- щения мебели хотелось бы иметь возможность, например, разме- щать модуль, состоящий из стола и стула (так как они находятся между собой в фиксированном отношении), а не просто размещать каждый раз по отдельности эти два символа. Чтобы получить раз- мещение мебели в комнате, аналогичное представленному в гл. 2, мы будем теперь использовать двухуровневую модель (рис. 9.7). (Этот пример еще раз показывает, что не следует смешивать модель объекта и его конкретное визуальное представление: один и тот же образ может быть получен из множества различных моделей.)
Рис. 9.7. Двухуровневая фиксированная иерархия для размещения мебели. В общем случае все экземплярные преобразования (ЭП) различны. Прикладной программист использует экземплярные преобразования для размещения стандартных символов (представляющих собой объекты самого нижнего уровня) в описаниях стандартных модулей, а пользователь затем в интерактивном режиме размещает эти мо- дули (содержащие собственные экземплярные преобразования) в комнате. Для сохранения четкой двухуровневой иерархии модулей и символов приходится описывать простые модули, такие, как один_ стул при размещении одиночного стула. Экземплярное преобразо- вание от символа к модулю в этом случае представляет собой еди- ничную матрицу. Это неприятное ограничение мы вскоре устраним. На рис. 9.8 приведена модификация первоначальной структуры данных в программе LAYOUT с учетом двухуровневой иерархии. ' Массив блоков экземпляров модулей, генерируемых при интерак- тивном взаимодействии пользователя с новой процедурой ADD-MO- DULE (добавить модуль), используется вместо первоначального массива блоков экземпляров символов, а тип-Модуля используется в качестве индекса массива описаний модулей (а не отдельных символов). Некоторые из таких индексных указателей показаны на рисунке. Каждый внутренний элемент описания модуля в свою очередь представляет собой блок экземпляра, который содержит тип_символа, используемый в операторе case для выбора символа двухуровневыми программами из примера 9.2а, осуществляющими просмотр структуры данных. Текст на псевдокоде 1), содержащийся , в примере 9.2а, представляет собой пересмотренную упрощенную - версию программы LAYOUT, в которой не используется МТП: | процедура DISPLAY_D_STR циклически проходит по массиву! блоков экземпляров модулей, а в каждом описании модуля в свок>| 11 Для обеспечения краткости и ясности псевдокод и Паскаль смешаны; далее в тексте данной главы описания параметров и переменных либо являются симво- лическими, либо же вообще отсутствуют в тексгах на псевдокоде. J
Моделирование и иерархия объектов 25 модуль [ 1 . мачс_модул^ гпадл-иписан-мЯулей [1.. макс-описон-модуиед} стул описаний моделей, содержащий блоки Экземпляров Зря оЗного и бопее символов Рис. 9.8. Прикладная структура данных для двухуровневой фиксированной иерархии. J очередь осуществляется циклический проход по каждому из опи- саний символов. Следует иметь в виду, что каждый символ описан как последо- вательность точек, соединенных отрезками прямых. Обычно конец такой последовательности обозначается флагом и следующая за ним точка соответствует обращению к процедуре MOVE. Пример 9.2а. Вывод модульно-символьной иерархии путем выполняемых в явном виде объединения и преобразования procedure DISPLAY-DSTR; var i: integer; begin DISPLAY-ROOM', {формирование сегмента стен комнаты} for i;~ 1 to макс-модуль do with модуль! i] do begin if SEGMENT-EXISTS(i) then DELETE -SEGMENT^-, CREATE SEGMENT^.)-, DI SPLAY-MODU 1Е(тип_модуля, x, y, theta)", {по структуре данных} CLOSE-SEGMENT end end; {DISPLAY _D STR procedure DI SPLAY-MODU LE(mun-модуля: integer; x, y, theta: real); var мэп: матрица экземплярного преобразования (3x3); for все символы [i] в таблица-описания-модулей [тип-модуля] do with символы [t] do
Глава 9 begin {выбрать параметры экземплярного преобразования символа из струк- туры данных и объединить их МЭП с МЭП для параметров модуля, передаваемых в DISPLAY „MODULE} мэп := (МЭПд-МЭП^ у)) символа* (МЭПа-МЭП(Я1 у}) модуля; case тип „символа of 1: DISPLAY„CHAIR (мэп)-, 6: DISPLAY „FLOORPLANT (мэп) end {case} end {with} end; {DISPLAY„MODULE} procedure DISPLAY „CHAI Р(мэп: matrix); t var i; integer; j begin 1 {сначала применить матрицу экземплярного преобразования мэп к сохра- | няемым координатам для получения преобразованных координат; эта про- | цедура отличается от приведенной в гл. 2 процедуры CHAIR только тем, I что передается полная матрица мэп, а не отдельные параметры х, у и 1 theta', соответственно изменена и процедура XFORM, получающая матрицу; 1 теперь она называется TRANSFORM} • TRANSF0RM(M3n, стул„х, стул„у, стул„х„нов, стул„у„нов, 7); МОУЕ„АВ5„2(стул„х„нов{1], стул„у„нов[1]); for i:= 2 to 7 do LI .\гЕ„РЕЕ_2(стул„х„нов[1], стул„у„нов[1]) end; {DISPLAY„CHAIR} Пример 9.26. Вывод модульно-символьной иерархии с использованием возмож- * ностей МТП procedure DISPLAY„D„STR; var стк: стек для сохранения МТП; i: integer; begin ЕМ PTY (стк); TRANSLATE„CTM„ABS„2(0, 0); < {процедура инициализации стека} {элементы МТП для переноса, пово- рота и масштабирования задаются для выполнения тождественного пре- образования} {формирование сегмента для границ комнаты} DI SPLAY „ROOM-, for t:=l to макс „модуль do with модульЦ] do begin if SEGMENT„EXISTS(t) then DELETE „SEGMENT(i); CREATE „SEGMENT(i); TRANSLATE„СТМ „ABS„2(x, y); ROTATE „CTM„REL„2(theta); DISPLAY „MODU LE(mun „модуля); CLOSE„SEGMENT end {with} end; {DISPLAY „MODULE} . procedure DISPLAY„MODULE(mun „модуля: integer); begin for все символы}!.] в таблица„описания„модулей [тип„модуля] do
Моделирование и иерархия объектов 27 with символы[1] do begin {запомнить МТП, затем задать ее новое значение путем умножения слева параметров экземплярного преобразования модуля на параметры экэемплярного преобразования символа} PUSH(Mtnn, стк); TRANSLATE„CTM„REL„2(x, у)-, ROTATE„СТМ „REL„2(theta); {далее, как и в примере 9.16, вызвать непреобразованные символь- ные процедуры; МТП неявно воздействует на каждую координату в подпрограмме для примитива, прежде чем примитив попадет в гра- фический пакет} case тип „объекта of 1: CHAIR; 6: FLOORPLANT end; {case} РОР(мтп, стк) {восстановить параметры, относящиеся к модулю} end {with} end; {DI SPLAY „MODULE} В примере 9.2a при вызове символа используется объединенное экземплярное преобразование, представляющее собой результат умножения экземплярного преобразования, отображающего символ на модуль, на экземплярное преобразование, которое отображает модуль на комнату. Другими словами, для вывода на дисплей примитивов в символьном узле иерархии программа объединяет все экземплярные преобразования по пути от узла к корню, а благодаря ассоциативности матриц самое нижнее из них первым применяется непосредственно к примитивам символов. Таким образом, для вычисления «комнатных» координат конкретного стула в конкретном модуле «стол_стул» на рис. 9.7 при отобра- жении стула на комнату испольузется объединенная матрица МЭП 1 хстул, комн* ^КОМН ^СТуЛ*МЭПСТуЛ| КОМН “ • (МЭПстул стол_стул’ ^®ПСТ0Л_стуЛ1 комн)- Каждая из отдельных МЭП имеет вид (МЭП9‘МЭПЖ( у). Процеду- ры описания символов, подобные CHAIR, получают объединен- ную матрицу МЭПстуЛ( комн и аналогично программе LAYOUT в гл. 2 вызывают процедуру TRANSFORM до вызова примитивов. Однако в случае использования МТП в программе из примера 9.26 мы можем снова устранить необходимость в том, чтобы символы сами осуществляли преобразования собственных ко'ординат с использованием временных локальных массивов. Кроме того, мы также учли необходимость вычисления и объединения матриц.
28 Глава 9 В примере 9.26 в МТП и стеке запоминаются предшествующие 1 состояния, поэтому в любой момент времени требуется доступ ’ только к данным текущего уровня дерева. При спуске на один уровень по дереву, показанному на рис. 9.7, от модуля к символу ' в процедуре DISPLAY-MODULE, мы выполняем для каждого символа следующие действия: 1. PUSH (поместить в стек) для сохранения МТП верхнего уровня (экземплярное преобразование модуля). 2. Объединение этого экземплярного преобразования модуля с преобразованием нижележащего уровня — экземплярным преоб- разованием символа. 3. Вызов примитивов с использованием вновь образованной МТП. 4. POP (взять из стека) для восстановления МТП вышележаще- щего уровня и подготовки к обработке следующего символа. Когда все символы модуля исчерпаны, в МТП загружается эк- земплярное преобразование для следующего модуля в процедуре DISPLAY_D_STR. Отметим, что в этой программе за восстанав- ливающим обращением POP непосредственно следует PUSH и помещает в стек МТП, которая только что была взята из него. Хотя такой подход позволяет легко обобщить алгоритм на п-уровневую иерархию, он представляется недостаточно эффективным. Так, при двухуровневой иерархии можно просто сохранить матрицу в локальном массиве, а не в стеке процедуры DISPLAY-MODULE и восстановить ее в конце цикла for, что позволяет избежать об- ращения к процедуре PUSH в начале цикла for. Однако при n-уровневой иерархии это потребовало бы наличия локальных массивов на каждом уровне; по этой причине предпочтительнее 1 использовать механизм стека. 1 Важно отметить, что процедура DISPLAY_D_STR задает < канонический «префиксный» или предварительно упорядоченный путь прохождения дерева в двухуровневой иерархии, при котором доступ ко всем узлам производится вниз и влево. (Такой же по- рядок прохождения осуществляется, например, в синтактическом дереве, которое строится синтаксическим анализатором компиля- тора, однако в нашем случае порядок слева направо не имеет зна- чения.) Интересно также, что иерархия проявляется не только на уровне представлений пользователя (рис. 9.7.), но также в при- кладной структуре данных (рис. 9.8) (через многоцелевые поля mtiti-модуля и тип_символа, используемые одновременно как коды типов и как индексные указатели на компоненты нижележащего ; уровня) и в динамической трассировке обращений к процедурам. 1 Эту иерархию процедур порождает процедура DISPLA Y_D_STR, | вызывающая DISPLAY-MODULE (i), которая в свою очередь! вызывает i-ю процедуру описания символа. Ниже показано, что 1 невозможно полностью закодировать иерархию только в прикладной 1 структуре данных или только в виде процедур для задания объек-1 тов. i
Моделирование и иерархия объектов 2? 9.5.2. Динамически изменяемая двухуровневая иерархия Теперь можно ослабить некоторые другие ограничения, наложен- ные на двухуровневую программу LAYOUT. Но прежде следует отметить, что описанное выше прохождение дерева служит для линеаризации иерархии только с целью вывода примитивов в мировой координатной системе корневого объекта и для передачи описания этого линейного мира графическому пакету с целью изготовления снимка. Хотя прохождение дерева и изготовление снимка концептуально представляют собой два различных процес- са, однако на практике они тесно переплетаются. Как только при- митив подвергнут преобразованию и отсечению, он помещается в сегмент для вывода. Этот процесс осуществляется во время выпол- нения прикладной программы, после того как во время компи- ляции определены все конкретные данные для структуры данных, описывающей символы и модули. Во время выполнения (называ- емого также временем компиляции изображения) пользователь при такой версии программы может изменить только количество и размещение модулей. В действительности прикладной программист мог бы построить чрезвычайно простую структуру данных для этого частного случая за счет расширения объема процедур. Можно было бы написать каждую из процедур для задания модулей таким образом, чтобы в ней содержались явные обращения к ее символам, а перед каждым из обращений производилось соответствующее задание МТП с использованием содержащихся непосредственно в тексте процедуры конкретных данных для параметров преобразования (пример 9.3). Это позволяет отказаться от таблицы задания модулей и соответст- вующего выбора (оператор case) по параметру тип_символа в процедуре DISPLAY-MODULE-, при этом в процедуре DISPLAY _ D_STp выбор может выполняться непосредственно по типу мо- дуля в блоке экземпляра модуля. Однако при такой стратегии мы никогда не смогли бы изменять описание модуля в интерактивном режиме, поскольку процедуру нельзя редактировать во время выполнения, вставляя или удаляя обращения к процедурам сим- волов. В то же время, используя для описания объекта в каждом модуле «таблично управляемую» структуру данных, приведенную на рис. 9.8, можно легко осуществлять интерактивное редактиро- вание описаний модулей в структуре данных без изменения соот- ветствующих программ во время их выполнения. Для этого тре- буется только стирать или вставлять новые блоки экземпляров символов в таблице описания модуля, как это осуществлялось при добавлении символов в программе LAYOUT. Для устранения редактирования указателей в массиве модулей после такого изме- нения предпочтительнее перейти от непрерывного распределения памяти к распределению в виде связного списка (аналогично ме- тоду управления сегментами, описанному в гл. 4). Это позволяет
30 Глава 9 Описание корня как п экземпляров моОулеи стул стол растение Рис. 9.9. Прикладная структура данных для двухуровневой динамически изме- няемой иерархии. достаточно легко осуществлять редактирование структуры данных на любом уровне только за счет введения указателя списка. Структуры на рис. 9.9 и 9.8 эквивалентны, за исключением того, что массивы на рис. 9.8 заменены связанными списками. Из регулярности структуры с очевидностью следует, что комната пред- ставляет собой совокупность подвергнутых экземплярному преоб- разованию модулей, каждый из которых является набором подверг- нутых экземплярному преобразованию символов. Тексты процедур, приведенных в примере 9.2, сохраняются для рис. 9.9 почти неиз- менными, за исключением того, что вместо перечисления элемен- тов массива производятся проверка на флаг конца списка (пустая ссылка nil в Паскале) и перемещение указателя на следующий блок связного списка. Пример 9.3. Альтернативная двухуровневая фиксированная иерархии процедур с явными обращениями и конкретными данными procedure DI SPLAY-D-STR', var i: integer; begin for i := 1 to макс-модуль do with модуль [ij do begin TRANSLATE-CTM„ABS-2(x, y); ROTATE _CTM_REL_2(theta)', if SEGMENT-EXISTS^!} then
Моделирование и Иерархия объектов 3f. DELETE-SEGMENT(i); CREATE -SEGMENT(i); case тип _ моду ля of 1: DESK-CHAIR; {стол и стул} 2: DESK-CHAIR-DIVIDER; {стол, стул и барьер} я: end; {case} CLOSE-SEGMENT end {with} end; {DISPLAY-D-STR] procedure DESK-CHAIR; {«жесткая» процедура для модуля стол_стул с символьными константами в- качестве конкретных данных для параметров экземпляра} begin {сначала стол} PUSHiMtnn, стек); TRANSLATE-CTM_REL-2{a, b); ROT ATE-CTM-REL-2(c); DESK; РОР(мтп, стк); {затем стул} PU5Н(мтп, стк); TRANSLATE-CTM_REL-2(d, е); ROTATE-CTM-REL-2(f); CHAIR; РОр(мтп, стк) end; {модуль DESK-CHAIR} 9.5.3. Динамически изменяемая n-уровневая иерархия Так как двухуровневая структура данных, приведенная на рис. 9.9, регулярна, ее нетрудно слегка изменить, чтобы иметь в иерархии любое число уровней, а также свободно смешивать при- митивы, объекты и модули на любом уровне дерева. На рис. 9.10, а схематически показано дерево для обобщенной n-уровневой струк- туры, а на рис. 9.10, б приведены два типа необходимых при этом блоков структуры данных: один для концевых узлов дерева, со- держащий только примитивы (код типа L), а другой для составных объектов, каждый из которых содержит один и более экземпляров объектов нижележащего уровня (причем они также могут быть составными) или же концевых узлов (код типа I). Отметим, что совокупность примитивов может быть либо идентифицированным объектом, над которым можно произвести экземплярное преобра- зование, либо неидентифицированной совокупностью примитивов, существующей только на данном уровне. Кроме того, мы заменили индивидуальные параметры х, у и theta матрицей составного эк- земплярного преобразования (мэп), чтобы обеспечить возможность объединения произвольного числа экземплярных преобразований для данного объекта, а не просто одного поворота с последующим переносом. Такое обобщение требует нескольких дополнительных
32 Глава 9 а Рис. 9.10. Прикладная структура данных для обобщенной n-уровневой иерархии. Концевые узлы могут включаться «как они есть» или же подвергаться экземпляр- ным преобразованиям. а — общая структура дерева; б —. структура связного списка для этого дерева с экземпляр- нымн и концевыми блоками. слов памяти на каждый экземплярный блок (9 слов для двумерной однородной матрицы 3x3, 16 для трехмерной, тогда как при обыч- ной двумерной схеме требуется 3 слова), однако это упрощает фор- мирование МТП при прохождении по структуре данных. Другие, более совершенные структуры данных могут использоваться для кодирования дополнительных особенностей структуры объектов, включая контактные точки объектов (например, точки соединения на блок-схемах или выводы на интегральных схемах), геометрию или топологию соединений таких контактных точек и прикладные данные, характеризующие компоненты [472, 501]. Возникает вопрос: как осуществлять прохождение по этому более общему типу дерева, не зная заранее, сколько в нем уровней и какие виды компонент в нем могут встретиться? Очевидно, что в этом случае непригодна фиксированная двухуровневая иерархия из предыдущих примеров для программы LAYOUT, поскольку структура дерева теперь является Динамически изменяемой. По- этому процедура DISPLAY_D_STR должна выполнять общее прохождение дерева структуры данных с использованием указа- телейкода типа, блока прототипа и связанного списка, а также флага конца списка для принятия решения о том, идти ли в данном узле вниз (блок — экземпляр) или вверх (последний узел, следователь- но, все узлы-предшественники были обработаны) и когда обраба- тывать примитивы с использованием МТП (концевой узел). Короче говоря, и в этом случае мы имеем канонический алгоритм префикс- ного прохождения дерева, однако на этот раз он должен быть явно закодирован в алгоритме графического вывода структуры данных, а не представлять собой следствие порядка обращения к процеду- рам, /Как в предыдущих алгоритмах из примера 9.2.
Рис. 9.10, б. Моделирование и иерархия объектов
' 34 Глава 9 Другой задачей, которую необходимо решить при разработке, является структура концевых объектов, которые могут быть одно- родными (содержать только линии, только точки или только текст) или разнородными (содержать и линии, и точки, и текст). В конце- вых узлах должны быть соответствующие коды типов либо блоков, либо примитивов, что проверяется программой прохождения де- рева, обрабатывающей концевой узел, для выдачи правильных выходных примитивов. Пример 9.4а содержит итеративный алгоритм, который явным образом помещает в стек или берет из стека «среду» при спуске или подъеме алгоритма по дереву. В примере 9.46 приводится более простой рекурсивный алгоритм с меньшим объемом программиро- вания, поскольку сохранение и восстановление «среды» не про- изводится в явном виде. Однако такой алгоритм требует компиля- тора, который может генерировать рекурсивные процедуры, а для них существенно возрастают затраты машинного времени. Отметим, что умножение МТП на новую мэп приводит к тому, что мэп первой воздействует на примитивы нижележащего уровня. Другими словами, как уже было показано в примере 9.2, как ите- ративный, так и рекурсивный алгоритмы проходят дерево сверху вниз, начиная с корня; они осуществляют умножение МТП на каж- дую мэп, которая встречается при движении вниз по дереву. Ре- зультирующая МТП отображает примитивы на координатную си- стему корневого объекта в том порядке, в котором они задавались в процессе формирования снизу вверх. Так, например, для трех- уровневой программы LAYOUT координаты стола Хстол прини- мают вид ^комн {Е(^стол* ^^^стол, стол_стул) * МЭПсгол_стул, отсек. V МЭП I /\ х 1‘-/А1отсек, комн) * Порядок экземплярных преобразований в направлении снизу вверх здесь обозначен тремя видами скобок: внутренние соответст- вуют переходу от координат прототипа стола к координатам модуля стол_стул, следующие — переходу к координатам отсека, наконец, последние (фигурные) — переходу к координатам комнаты (ми- ровым). Выражение КОМН {^СТОЛ ' [МЭПС гол, стол_стул • (МЭПСТ0Л—СТуЛ< отсек х МЭП0ТСек , комн)]} соответствует порядку прохождения сверху вниз, при котором сначала производится объединение МЭПстол_стул, отсек с МЭПотсек> комн, затем присоединяются МЭП нижележащих уровней, и общее объединенное преобразование применяется к координатам прототипа. Благодаря ассоциативности матриц оба порядка прохождения дерева дают один и тот же результат. Теперь -становится ясно, почему при работе с МТП было выбрано умноже- ние слева; поскольку при прохождении дерева сверху вниз послед-
Моделирование и иерархия объектов 35 ним осуществляется доступ к МЭП самого нижнего уровня, она должна умножаться на МТП слева, так как эта МЭП должна первой влиять на координаты. В некоторых пакетах [189, 474] прикладной программист может задавать режим умножения слева или справа; при этом умножение слева обычно применяется при прохождении дерева, а режим умножения справа — при геометрических пре- образованиях внутри узла, когда координаты прототипа отобра- жаются на себя. Более подробно этот вопрос рассматривается в разд. 9.9. Пример 9.4а Итеративная процедура прохождения дерева для п-уровневой структуры данных procedure TREE -W ALK-2(ук\ указатель корневого узла; мтп\ матрица 3x3); {Эта процедура осуществляет прохождение по двумерной иерархии прототи- пов и экземпляров объектов, показанной на рис. 9.10, б и содержащей блоки экземпляров и концевые блоки. Прикладная программа обычно обращается к процедуре TREE_WALK_2 с указателем структуры данных ук (получен- ным в результате интерактивной работы с пользователем) и с МТП тождест- венного преобразования или геометрического преобразования объекта. Отме- тим, что, как и в приведенных выше процедурах, здесь отсутствует контроль ошибок. Кроме того, данная программа представляет собой лишь псевдокод, а не корректный текст на Паскале (см. упражнение 8.19). Указатель ук ссылается на два различных типа записей, что недопустимо в Паскале. Предпочтительнее использовать для хрчнения экземпляра или концевого блока «вариантную запись», когда можно использовать один указатель.} стк-ук: стек указателей; ^тк-мтп: стек матриц; begin {инициализация} EMPTY (стк-ук)', EMPTY (стк-мтп}-, TRANSLATE-CTM-ABS_2(0, 0); {задать элементы МТП для поворо- та, переноса и масштабирования, обеспечивающие тождественное пре- образование} repeat begin {проверка на одно из трех условий; отметим, что ук}. тип_кода обозна- чает поле типа кода в записи, на которую указывает ук} if yx = nil {конец списка} then {закончена обработка подобъек- begin тов этого узла, поэтому воз- вратиться назад через POP и продолжить работу} Р0Р(мтп, стк_мтп)\ Р-Р0Р(ук, стк-ук)-, ук: = ук}. указ_след-блока end else if ук}. тип-кода — 1 then begin P-PUSH(yK, стк-ук); PUSHfyK, стк-ук); SET-CTM-REL-2(yK}. мэп}-, ук: = ук}. указ -блока-Прототипа {взять из стека указателей} {перейти к следующему блоку па более высокий уровень, для следующей итерации} {блок экземпляра — сохранить и спуститься} {поместить в стек указателей} {объединить мэп текущего уров- ня с мтп} {спуститься}
36 Глава 9 end else if z/Kf. тип-кода = L then begin ук:—ук\. указ_след-блока {концевой блок, обработать при- митивы} {вызвать соответствующие про- цедуры примитивов; коорди- наты преобразуются с помощью мтп} {перейти к следующему блоку на данном уровне для сле- дующей итерации} end until(z/K= nil) aad(STАСК-IS-ЕМРТУ(£т:кУ) {обработан последний блок кор- невого подсписка} end; {TREE-WALK-2} Пример 9.4 б. Рекурсивная процедура прохождения дерева procedure RECURSIVE-TREE-WALK-2 {ук: указатель на корневой узел; мтп: матрица 3x3); {вызов с единичной мтп или с матрицей геометрического преобразования. Локальные значения мтп н ук для каждого вызова сохраняются механиз- мом рекурсии} var врем-ук: временный указатель; врем-мтп: временная мтп; begin while ук < > nil do begin {обрабатываются два вида случаев: рекурсия в случае экземпляра или обработка примитивов концевого узла} if ук\. тип-кода= I then {экземплярный блок} begin врем-ук: = укЛ .указ-блока-прототипа {задать указатель и врем-мтп: = ук[.мэп * мтп мтп для нижнего узла} RECURSIVE-TREE-WАЕК-2(врем-ук, {и обработать его} врем-мтп) end else begin {концевой блок} . вызов соответствующих процедур примитивов end ук := ук\.указ-след_блока\ {данный узел обработан, идти вперед} end {while} end; {RECURSIVE-TREE-WALK-2} В примерах 9.1—9.3, где содержатся варианты программы LAYOUT, приводятся одно- и двухуровневые явные процедурные иерархии, управляемые соответственно одно- и двухуровневыми структурами данных. Интересный результат обобщения для п- уровневой иерархии состоит в том, что любой /г-уровневый алго- ритм можно заменить n-уровневой общей структурой данных и одной итеративной или рекурсивной процедурой прохождения структуры данных. Эта общая процедура фактически свелась к явной двухуровневой иерархии процедур. И наоборот, можно считать, что приведенные ранее явные процедурные иерархии
Моделирование и иерархия объектов 37 являются расширением, т. е. линеаризацией рекурсивного прохож- дения для частных случаев одно- и двухуровневой структуры дан- ных. Ниже кратко изложены различные способы представления иерар- хий и описаны некоторые новые представления. 9.6. СПОСОБЫ КОДИРОВАНИЯ ИЕРАРХИИ Из примеров 9.2 и 9.3 следует, что фиксированные иерархии могут быть представлены как смесь структуры данных и иерархии процедур. Потребовав обобщения для n-уровневой иерархии и возможности редактирования в ходе выполнения задачи (не пока- занной в примерах), мы перешли от смеси данных и иерархии процедур к одной процедуре, над которой почти полностью доми- нирует структура данных общего назначения, показанная на рис. 9.10. Эта структура данных требует простой, неспециализи- рованной итеративной или рекурсивной процедуры прохождения дерева, которую можно использовать для любой структуры данных общей формы, представленной на рис. 9.10; таким образом, в ка- честве «стандартного», независимого от применения модуля эта процедура может рассматриваться скорее как часть моделирующего ^пакета, а не как часть прикладной программы. Теперь обсудим, какие другие варианты разделения функций между данными и процедурами полезны и при каких обстоятельствах. 9.6.1. Графические структуры данных и структурированные дисплейные файлы Попробуем ответить на вопрос: какая ситуация была бы иде- альной для обслуживания и интерпретации иерархии объектов в системах с регенерацией? По-видимому, хорошо, если моделирую- щая система формирует одно интегрированное представление, со- держащее как прикладные данные, так и геометрическую иерархию объектов; графической системе не приходится компилировать такую иерархию в простой сегментированный (линейный) дисплей- ный файл или в битовую карту растра, поскольку дисплейный процессор (ДП) интерпретирует ее непосредственно. Но тогда ДП должен был бы выполнять просмотр модели, объединение матриц, полную видовую операцию, а также генерацию векторов и литер или же растровую развертку (причем все это «на лету») для каждого цикла регенерации. Следовательно, в этом случае существовало бы только одно представление общего пользования, в которое ЦП записывает информацию и из которого ДП читает информацию при каждой регенерации кадра, так что любые изменения в этой так называемой графической структуре данных немедленно становятся
38 Глава 9 видимыми. Такая стратегия является идеальной по следующим соображениям: 1) компиляция изображения программной графической систе- мой заменяется аппаратной интерпретацией; 2) все изменения становятся сразу видимыми (как только из- меняется прототип нижнего уровня, все экземпляры автоматически изменяются при следующем цикле регенерации); 3) устраняется многократное представление одной и той же ин- формации (иерархической) для каждого экземпляра в линейном дисплейном файле или в битовой карте растра; это позволяет из- бежать бесполезных затрат памяти, не нужно преобразовывать одну форму представления в другую и поддерживать «аутентичность» этих представлений при внесении изменений в модель или в изоб- ражение на экране. К сожалению, такое решение возможно лишь в редких случаях, поскольку требует мощного и универсального аппаратного обеспе- чения для ДП. Последнее могло бы интерпретировать сложные модельные структуры данных, содержащие геометрические данные, подлежащие выводу, и другие прикладные данные, которые должен использовать ЦП при анализе. Еще более жесткое требование для дисплеев с регенерацией состоит в том, что они должны осуществ- лять прохождение и обработку чрезвычайно быстро, чтобы избе- жать мерцания. Можно рассчитать верхнюю границу для числа экземпляров блоков, которые могут быть пройдены при объедине- нии матриц, преобразовании в координаты прототипа, отсечении примитивов, проецировании и генерации (или при растровой раз- вертке) без появления мерцания. Даже современные ДП с внутрен- ним циклом менее 100 нс не могут обработать более нескольких тысяч экземпляров, содержащих совместно не более 100 000 ко- ротких (<12,7 мм) векторов. Пределы для выполнения растровой развертки «на лету» еще меньше, если нет двойной буферизации для битовой карты. Стремление к недостижимому идеалу заставляет искать ком- промиссы. Прежде всего в связи с привлекательностью использо- вания одного иерархического представления как для ЦП, так и для ДП, уже начиная с системы Sketchpad, применяют аппаратные интерпретаторы с программным дополнением, которые обеспечи- вают плавное изменение изображения для небольших (слова по 16 бит) «целых» иерархий [1, 354, 93, 446]. Мерцание изображения можно устранить, если использовать дисплей на запоминающей ЭЛТ. Объем движения и изменений изображения в этом случае определяется скоростью, с которой может быть стерто старое изоб- ражение и выведено новое. Следовательно, для дисплеев на ЗЭЛТ динамика ограничивается тем, что обеспечивается режим буфери- зованной «сквозной записи». Можно также превратить дисплей с регенерацией в запоминающий дисплей, если преобразовывать иерархию в промежуточное неиерархическое (т. е. «послемодельное»
Память общего пользования Буфер регенерации Моделирование и иерархия объектов б Рис. 9.11. Архитектура двухпроцессорной дисплейной системы (два варианта). а — ДП проходит иерархическую структуру данных с частотой изменения изображения (не менее 10 Гц), а дисплейный конт- роллер проходит сегментированный линейный дисплейный файл (ЛДФ) с частотой регенерации (не менее 30 Гц); б — ЦП извлека- ет структурированный дисплейный фййл (СДФ) из модели по требованию, при этом ДП проходит СДФ с частотой изменения (не ме- нее^Ю Гц), а дипслейный контроллер проходит ЛДФ с частотой регенерации (не менее 30 Гц).
40 Глава 9 и видовое) представление не чаще 30 раз в 1 с. Затем отдельный процессор для регенерации сканирует это упрощенное представ- ление — либо векторный линейный дисплейный файл (ЛДФ), либо битовую карту растра — с частотой регенерации. В класси- ческом режиме двойной буферизации ДП независимо проходит по графической структуре данных с максимально возможной скоростью (чтобы обеспечить плавность движения, частота должна быть не менее 10 Гц) для подготовки следующего буфера. Простой вектор- ный ДП, регенерирующий ЛДФ, называется дисплейным контрол- лером (ДК) (рис. 9.11, а). Архитектура двухпроцессорной системы, в которой разделены задачи изменения и регенерации изображения, рассматривается в гл. 10. Используя существующую аппаратуру, невозможно осущест- вить непосредственное прохождение ДП по прикладной модели, если требуется хранить координаты в обычной форме с плавающей точкой и (или) хранить большой объем прикладных данных в мо- дели. Поэтому используется одна из разновидностей графического пакета с более широкими, чем в ПГП и даже чем в системе Core, возможностями. Этот пакет проходит по модели и строит ее извле- чение, называемое иерархическим структурированным дисплейным файлом (СДФ), который представляет собой дисплейный файл высокого уровня, пригодный для обработки в ДП (т. е. содержащий только геометрическую информацию), где сохраняются иерархи- ческая структура из прототипов и экземпляров и индивидуальные экземплярные преобразования. Такая структура называется также непреобразованным сегментированным дисплейным файлом, по- скольку при ее получении не выполнялись модельные или видовые преобразования. Каждый прототип рассматривается как сегмент дисплейного файла высокого уровня, подвергнутый экземплярному преобразованию с помощью МТП (поддерживаемой в ДП), отсече- нию и отображению на экран. Отображение осуществляется либо непосредственно с частотой 30—60 Гц, либо косвенно, также путем отображения на аппаратно-независимый сегментированный линей- ный дисплейный файл низкого уровня, регенерируемый дисплейным контроллером (рис. 9.11, б), или на битовую карту растра. В гл. 10 рассматриваются архитектуры дисплейных процессоров, обеспечи- вающих возможность работы с СДФ или с комбинацией СДФ — ЛДФ. Строго говоря, неправомерно считать структурированный дисп- лейный файл формой вложения сегментов, поскольку не существует лексического вложения сегментов, как в блочной структуре про- цедурных языков. На самом деле они, подобно подпрограммам, связаны через типы данных в ДП, эквивалентные переходам к подпрограммам в ЦП с адресами (именами) сегментов нижележа- щего уровня и с «параметрами» преобразования. В некоторых системах эти имена представляют собой фактические адреса, а в других — индексы глобального оглавления сегментов, что облег-
Моделирование и иерархия объектов 41 чает перемещение сегментов при динамическом формировании и стирании сегментов. Такой тип данных в ДП эквивалентен блоку экземпляра в структуре данных. Поэтому неудивительно, что структурированный дисплейный файл подобен прикладной струк- туре данных (рис. 9.10), которая является также геометрически (дисплейно) ориентированной структурой данных, где могут со- держаться и негеометрические данные. Структурированные дисплейные файлы часто путают с дисплей- ными подпрограммами (ДП-подпрограммами), представляющими собой еще более простую форму иерархии для ДП. Здесь мы отме- тим только, что первые являются представлением до видовой опе- рации, а вторые содержат подвергнутые отсечению примитивы, полученные уже после видовой операции. Следовательно, ДП-под- программы нельзя использовать для общего представления модель- ной иерархии. В гл. 10 вопрос об этом различии рассматривается более подробно. 9.6.2. Иерархия процедур и дисплейные процедуры Преимуществами нашей идеальной графической структуры дан- ных являются возможность мгновенного изменения изображения, /'единственное представление всей иерархии и отсутствие программ- ного обеспечения для компиляции изображения. Однако эта струк- тура далеко не идеальна в том смысле, что должна соответствовать командам и форматам данных, предусмотренным в ДП. Введение структурированного дисплейного файла обеспечивает возможность использования произвольной прикладной модели, однако в этом случае требуется использовать дополнительное представление в виде СДФ, компилируемое по модели. Предпочтительнее использо- вать такой метод, который позволял бы получать изображения непосредственно по модели без промежуточного представления (или представлений), но в то же время не был бы привязан к представ- лению для конкретного ДП. Рассмотрим кратко возможности иерархии процедур при опи- сании объектов. Внутри процедуры могут существовать произволь- ный поток управления и ссылки на структуру данных. На практике одной из возможных крайностей является почти «чистая» процедура, не имеющая структуры данных. В этом случае все объекты зада- ются с помощью конкретных данных (связываемых при компиляции) и обращений к процедурам нижележащего уровня. ЦП может динамически (с частотой 30—60 Гц) проходить иерархию процедур, вызывая корневой объект, использовать встроенные обращения к моделирующему пакету МТП для получения мировых координат, а также использовать встроенные обращения к графическому пакету с координатами, преобразованными МТП, для получения образа (как в примерах 9.3 и 9.5). Программная «интерпретация»
42 Глава 9 Пример 9.5. «Чистая» иерархия процедур с конкретными значениями, пока- занными в виде символьных констант (каждая процедура содержит примитивы и вызовы процедур нижележащего уровня) procedure ROOT-OBJ ЕСТ; var стк; стек для хранения мтп; begin {произвольный (неграфический) про- граммный текст} задание параметров видовой операции; {далее задание первого экземплярного преобразования} PUSH(Mmn, стк); TRAN SLATE-CT!A-REL_2(xl, yl); ROTATE -CTM-REL-2{thetal); SCALE-CTM_REL_2{sxl, iyl); SUB_OBJECT-i; {вызов первого прототипа} РОР(мтп, стк); {задание второго экземплярного преобразования} PUSH{мтп; стк); TRANSLATE-CTM_REL_2(x2, у2); ROTATE-CTM_REL_2{theta2); SCALE-CTM_REL_2{sx2, sy2); SUB_OBJЕСТ_2; {вызов второго прототипа} РОР{мтп, стк); LlNE_ABS_2(xal, yal); LINE-REL_2{xn, yn); {различные примитивы} end; {ROOT-OB J ECT} procedure SUB-OBJECT-1 {подобъект 1} begin MOVE-ABS-2(xbl, уЫ); LI N E-REL-2{xb2, yb2); {концевой объект} MOVE-ABS-2{...); L1NE-REL_2{...); end; {SUB_OBJECT_1} procedure SUB_OBJECT_2; begin M0VE_ABS-2{xcl, ycl); LlNE_REL_2{xc2, yc2); {объект содержит обращения к объек- там нижележащего уровня}
Моделирование и иерархия объектов 43 {подготовка к заданию объекта нижележащего уровня — аналогично тому, как это было сделано в корневом объекте} PUSH(Mtnn, стк); TRANSLATE_CTM_REL_2(xd, yd); ROTATE_CTM_REL-2(thetad); SCALE_CTM-REL-2(sxd, syd); SUB-OBJ ЕСТ-14; {вызов прототипа} POP(мтп, стк); L/NE_REL_2(...); end; {SUB-OBJECT _2} такой иерархии процедур аналогична программной интерпретации иерархии структуры данных (о чем говорилось в предыдущем разделе), однако естественно она относится к противоположному концу диапазона возможностей между чистыми данными и чистыми процедурами при моделировании. Отметим, что здесь отсутствует в явном виде программный модуль для прохождения иерархии; ЦП отслеживает иерархию процедур в соответствии с динамиче- ской последовательностью обращений. Поскольку в этом случае не существует единой иерархии струк- туры данных, формирование новых объектов становится невоз- можным, так как нельзя динамически сформировать новую проце- дуру. При выполнении задания, конечно, можно изменить опи- сание конкретного объекта путем изменения потока управления, благодаря чему в его состав войдет то или иное число примитивов или обращений к процедурам нижележащего уровня; можно также изменять значения адресуемых данных. Как и при исполь- зовании иерархии структур данных, вид корневого объекта авто- матически изменяется при следующем прохождении иерархии процедур после изменения любого объекта нижележащего уровня. Однако при использовании такой иерархии процедур возникает та же проблема, что и при непосредственной интерпретации струк- тур данных: если ДП регенерируется непосредственно по информа- ции, поступающей от ЦП, отслеживающего иерархию процедур, то ЦП может не успевать за регенерацией ДП даже при относитель- но небольших иерархиях процедур. И в этом случае также можно компилировать сегментированный линейный дисплейный файл (или же битовую карту), чтобы отделить редактирование и прохождение по модели от регенерации и обеспечить возможность избиратель- ного изменения частей модели и соответствующих им сегментов без полной повторной интерпретации. Отметим, что примеры программы LAYOUT (примеры 9.1—9.3) отражают промежуточную ситуацию между «чистой» процедурой
44 Глава 9 с конкретными (или адресуемыми) данными (пример 9.5) и «чистой» структурой данных с явно существующей процедурой прохождения дерева (пример 9.4). Дисплейные процедуры представляют собой частную форму иерархии процедур, обеспечивающей расширение как синтаксиса, так и семантики обычных обращений к процедурам [353]. Они включают операции с МТП и экземплярные преобразования, со- провождающие вызов той процедуры, которая до этого описывалась явно. Стандартная последовательность действий, принятая в при- мерах 9.3 и 9.5 и имеющая вид PUSH-, экземплярные преобразования; вызов процедуры объекта; POP; включается в удобную и естественную сокращенную запись для статических иерархий: CHAIR_PROCEDURE scale sx, sy rotation theta at x, у Если язык и компилятор не удается легко дополнить этой новой конструкцией (а такая ситуация, безусловно, наиболее вероятна), такое расширение можно имитировать с помощью специального обращения к процедуре, например: DISPLAY (CHAIR_PROCEDURE, sx, sy, theta, x, y); Дисплейные процедуры не только имеют общее для иерархий процедур «слабое место» — ограниченные возможности редакти- рования при выполнении задачи,— но, кроме того, позволяют за- давать не более трех экземплярных преобразований, выполняемых в заранее определенном порядке. При явном задании действий PUSH и POP, а также операций с МТП обращения к обычным процедурам обеспечивают возможность произвольных комбинаций экземплярных преобразований. Несмотря на это, если бы дисплей- ные процедуры можно было эффективно интерпретировать [348], они обеспечили бы удобный синтаксис высокого уровня, пригод- ный для большинства случаев использования, и разумный уровень динамических действий с изображением путем редактирования не структур данных, а исходных текстов процедур, описывающих объекты. Такое редактирование исходного текста аналогично редактированию программ на языке APL и требует знания поль- зователем графических программ. Таким образом, эти процедуры не являются таким же удобным или универсальным средством, как обычные процедуры для структуры данных, которые управляются не редактированием программы, а путем интерактивного взаимо- действия с пользователем. Однако дисплейные процедуры могут пригодиться в том случае, если будет разработана аппаратура для быстрой интерпретации такого языка.
Моделирование и иерархия объектов 45 9.6.3. Символьные системы Некоторые графические пакеты содержат простые моделирую- щие пакеты (или соединяются с ними через интерфейс). Такие пакеты обеспечивают не только работу с МТП и выполнение эк- земплярных преобразований, но и применение одно- или много- уровневых объектов особого вида, которые используются исклю- чительно для графического вывода. Как уже говорилось в разд. 9.2, такие объекты естественно называть символами, поскольку их можно сравнить с вырезами в пластмассовых трафаретах, имею- щими форму символов, и поскольку в отличие от большинства других объектов с ними не ассоциируются какие-либо прикладные данные. Простым примером может служить программа LAYOUT (гл. 2), которую можно было бы реализовать с использованием символьного пакета, поскольку она не использует прикладных данных. (Отметим, что средство для вставки сегментов INSERT_ SEGMENT в пакете GKS 1236], разработанном на основе системы Core, позволяет вставлять произвольные НК-сегменты в текущий открытый сегмент, поэтому его нельзя считать одноуровневым сим- вольным средством для работы только в мировых координатах.) В табл. 9.2 выполнено синтаксическое сравнение между проце- дурами, сегментами и символами. Когда в момент задания символа встречается его описание CREATE SYMBOL-, ' <примитивы> CLOSESYMBOL-, оно компилируется во внутреннюю аппаратно-независимую струк- туру данных, где хранятся координаты прототипа или мировые координаты до выполнения видовой операции, а не в пригодный для вывода сегмент для ДП после применения видовой операции. Затем символ можно вызвать в момент использования символа с помощью команды INSERT для вывода внутри открытого текущего сег- мента в ДП. Когда вызывается символ, символьная система рабо- тает с ним как с примитивом, заданным пользователем, выбирает его координаты из структуры данных и затем передает на индиви- дуальную обработку при видовой операции. Благодаря этому процесс включения символа в некоторой степени аналогичен сред- ству INCLUDE_FILE {имя файла) для объединения программных сегментов в момент компиляции, а также использованию макрорас- ширений. Вызов символа обеспечивает ряд преимуществ по сравнению с вызовом обычной процедуры, в которой задается эквивалентный
Таблица 9.2. Сравнение n-уровневой символьной иерархии с процедурами и сегментами Функции Процедуры Сегмент (один уровень) Одноуровневый символ п-уровневый символ Открытие procedure N АМЕ(...) CREATE.SEGMENT (ид) CREATE- SYM BOL (ud) Как для одноуровневого символа Закрытие end{AMM£} CLOSE SEGMENT CLOSE .SYMBOL То же Вызов узла нижеле- жащего уровня NAME(...) — — INSERTSYMBOL(ud) REFER-SYMBOL(ud) Стирание DELETE-SEGMENT (ид) DELETE-SYMBOL Как для одноуровневого символа Вывод на экран NAME(...) SET-V !SlBlLlTY(ud, on) в открытом символе ДП: INSERT-SYMBOL(ud) или INSERT-SYMBOL (ид, sx, sy, theta, x, y) То же
Моделирование и иерархия объектов 47 символ (например, в программе LAYOUT). Во-первых, описание символа компилируется в примитивы при выполнении программы (в момент задания символа) и, следовательно, во всех случаях включения символа используется откомпилированная структура данных. Использование такой структуры данных, как правило, эффективнее, чем использование обычной процедуры описания символа, когда при каждом вызове этой процедуры выполняется достаточно долго вся последовательность обращений к процедурам ПГП для вывода примитивов. Во-вторых, символы можно сохранять между сеансами работы. В этом случае символы, предназначенные для совместного использования несколькими прикладными про- граммами, могут храниться в общих или личных библиотеках1, их йоиск можно производить по составному имени вида имя_биб- лиотеки.имя „символа. В-третьих, в двумерном случае, когда не требуется отсечение и координаты устройства вывода (целые числа) используются в качестве мировых координат, интеллектуальный графический терминал (имеющий локальную память и вычисли- тельную мощность), соединенный с основной ЭВМ низкочастотной или среднескоростной линией связи (гл. 10), можно использовать для локального хранения символов. Объем пересылки информации от основной ЭВМ к терминалу существенно сокращается, если пере- сылать не отдельные примитивы символа, а только его имя, по которому локально будет осуществлено его расширение. До того как вставить символ, можно произвести действия с МТП. В другом варианте, когда имеется список параметров для команды INSERT (табл. 9.2), непосредственно в вызов INSERT можно включить параметры экземплярного преобразования, что аналогично обращению к дисплейной процедуре. Для n-уровневых символьных систем иерархию можно органи- зовать двумя различными способами. Подобно тому, как это сде- лано в GPGS [79, 474], команду INSERT можно использовать внутри описаний других символов, а также внутри сегментов для ДП. Это приводит к тому, что откомпилированные ранее элементы структуры данных для символа нижележащего уровня включаются в точке вызова в описание символа вышележащего уровня в момент задания этого символа. Аналогией может служить команда INCLU- DE„FILE (включить файл) или включение макрорасширений. Другим решением является использование команды REFER, ко- торая позволяет в момент задания символа компилировать только указатель на символы нижележащего уровня. Таким образом, вызов символа командой REFER приводит к тому, что доступ к телу символа нижележащего уровня осуществляется лишь тогда, когда вызывающий символ вышележащего уровня вставлен (с помощью команды INSERT) в сегмент ДП. Следовательно, команды INSERT и REFER различаются, лишь когда фактически осуществ- ляется расширение для символа, подвергаемого экземплярному преобразованию, причем использование команды REFER более
48 Глава 9 эффективно при хранении иерархии символов в библиотеке. Как и в случае экземпляров и копий в иерархии объектов, использо- вание символов через ссылку (с помощью команды REFER) по- зволяет распространять изменения в прототипе символа на всю иерархию при ее прохождении, тогда как включение символов (с помощью команды INSERT) этого не обеспечивает, поскольку при вставке с помощью команды INSERT получается конкретное рас- ширение и теряется связь с прототипом. Экземплярные преобразования могут быть заданы не только при включении символа в сегмент для ДП, но и перед любой ко- мандой INSERT или REFER в описании символа (рис. 9.12). Это приводит к тому, что символ нижележащего уровня подвер- гается экземплярному преобразованию с помощью МТП либо в момент его включения в символ вышележащего уровня при ис- пользовании команды INSERT (в момент задания символа, осу- ществляющего включение с помощью INSERT), либо лишь в то время, когда символ, в котором встречается ссылка, включается в открытый сегмент ДП (в момент использования символа, содер- жащего ссылку). В последнем случае вся иерархия символов, образованная корневым символом и его ссылками на символы ниже- лежащего уровня (с соответствующими объединенными матрицами экземплярных преобразований), проходится символьным пакетом в соответствии с обычным алгоритмом прохождения дерева, ис- пользующим стек (как в примере 9.4). Полученный в результате линеаризованный мир обрабатывается графическим пакетом с помощью видовой операции, как если бы эта операция с самого начала была встроена в сам сегмент (как в любых других модели- рующих системах). Различие между обычными процедурами для описания символов и собственно символами («символьными процедурами») не так просто осознать. С точки зрения синтаксиса оно почти неощутимо. Существенное различие, как уже говорилось выше, состоит в том, что символьные процедуры компилируются (в момент задания сим- вола) во внутреннюю структуру данных, которая впоследствии до- ступна графическому пакету, тогда как при использовании обыч- ных процедур получают оттранслированный программный модуль, который обращается к процедурам выходных примитивов в графи- ческом пакете. Эти процедуры примитивов можно вызывать и исполнять повторно для каждого примитива при вызове каждой •процедуры описания символа. Кроме того, обычную процедуру невозможно стереть в момент выполнения (единственно возможным средством является обход соответствующего вызова в программном тексте), тогда как символ (процедуру) можно стереть, выполнив команду DELETE. (Конечно, любой последующий вызов стертого символа вызывает ошибку.) При использовании символов в качестве простой формы иерар- хической,людели, как и в случае иерархии процедур или структур
Моделирование и иерархия объектов 49 Описание сегмента Описание символа, включаемого в сегмент fa? при обращении к 1NSERTJ>Mb0L (Ь) Рис. 9.12. Двухуровневая символьная иерархия. данных, изменения изображения не видны до тех пор, пока не выполнено повторное прохождение по модели и не осуществлена повторная компиляция для получения нового дисплейного файла или битовой карты. Кроме того, как обычно, для обеспечения из- бирательности изменений совместно с символами можно использо- вать сегменты. Наконец, в обычные процедуры можно включать произвольные данные и действия, не относящиеся к графическому выводу, тогда как символьные процедуры предназначены специаль- но для вывода. С этой точки зрения символьные процедуры ближе всего к дисплейным процедурам. Символы в основном обеспечивают преимущества только при «чертежных» применениях, т. е. при формировании и выводе изо- бражений, поскольку в.противном случае они лишь дублировали бы геометрическую информацию из более общих прикладных моде- лей, включающих как прикладные, так и геометрические данные.
50 Глава 9 Их следует рассматривать только как простое средство, с помощью которого пакет может строить и использовать трафареты (в неко- торых случаях иерархические) для стандартных компонент ри- сунка. Даже в таких «чертежных» применениях часто необходимо достаточно сложное редактирование; в этом случае гораздо легче редактировать структуру данных, привязанную к конкретному применению, чем разрабатывать средства редактирования для сим- вольного пакета, выходящие за пределы таких операций, как зада- ние и стирание символов. Так, например, довольно трудно опреде- лить аппаратно-независимые механизмы для запроса атрибутов или значений координат примитивов и для последующего редакти- рования этих атрибутов или координат, или же самих примитивов внутри символа. Организованная Национальным институтом стан- дартизации США (ANSI) целевая группа X3H31 рассматривает все эти трудные вопросы в рамках исследования о внесении изме- нений в систему Core для использования «структур» [8]. Предпола- гается, что структуры заменят сегменты и будут представлять все примитивы в модельных координатах. Таким образом, фактически структуры являются символами в описанном здесь смысле, и задача состоит в том, как естественно отобразить их на те типы структури- рованных дисплейных файлов, которые обеспечиваются развитой архитектурой дисплейных процессоров, рассматриваемой в гл. 10. Если можно считать, что система Core формирует аппаратно-неза- висимый линейный дисплейный файл, то структурный пакет фор- мирует аппаратно-независимый структурированный дисплейный файл, компилируемый в СДФ для конкретного ДП. Вопрос об использовании структур все еще вызывает противоре- чия при стандартизации в машинной графике. Некоторые специа- листы полагают, что быстрый рост числа дисплеев с архитектурой для СДФ требует, чтобы средства моделирования в графическом пакете использовали преимущества такого представления. Другие считают, что необходимо сохранить строго соблюдавшееся в исход- ной версии Core разделение моделирования и видовых операций и что естественная зависимость моделирования от конкретного при- менения затрудняет стандартизацию, за исключением примитивных символьных пакетов. В заключение отметим, что символьные пакеты не устраняют необходимости в прикладной модели и поэтому область их применения ограниченна. 9.6.4. Редактирование структуры и псевдоиерархия сегментов и групп До сих пор мы считали, что иерархия процедур удобна с точки зрения синтаксиса, а иерархия структуры данных обеспечивает более широкие возможности при редактировании в процессе вы- полнения задачи. Рассмотрим кратко те виды редактирования, которые допускаются различными формами моделей. Процедуры по-
Моделирование и иерархия объектов 51 зволяют редактировать адресуемые данные для изменения значений координат примитивов и параметров модельных преобразований. В этом случае можно воздействовать на структуру путем изменения потока управления и включать (и исключать) обращения к прими- тивам или подобъектам или формировать и стирать сегменты. В графических структурах данных и структурированных дисплей- ных файлах, используемых для моделирования иерархии объектов, можно не только применять эти виды редактирования, но и добав- лять произвольные новые объекты. Для достаточно быстрого изби- рательного изменения модели и изображения можно воспользовать- ся любым методом моделирования в сочетании с сегментированным линейным дисплейным файлом. Кроме посегментного редактирования многие графические па- кеты обеспечивают возможность более детального управления за счет задания группы, т. е. совокупности примитивов внутри сег- ментов, которая называется имя_гр. Последовательность обращений типа: CREATE -GROU Р (имя-гр); <примитивы> /CLOSE-GROUP; приводит к организации групп внутри описания сегмента: CREATE SEGMENT(ud); CLOSE-SEGMENT-, Так, например, пользователь может указать отдельно каждую точ- ку на кривой из множества точек, для которых заданы координаты, если каждая из этих точек является самостоятельной группой с име- нем. Дополнительные затраты на организацию групп, по-видимому, меньше, чем на организацию сегментов, поскольку требуется мень- ше операций, а единственно допустимым атрибутом является имя_гр. Если допустить редактирование сегмента с помощью обращений типа йЕЬЕТЕ_ОЯОиР(имя-сегмента, имя_гр) то сегмент станет сложнее, так как необходимо определять начало и конец группы относительно начала сегмента (упражнение 9.9). В некотором смысле структура с группами позволяет создать до- вольно ограниченную форму двухуровневого структурированного дисплейного файла без экземплярных преобразований и атрибутов для групп. В сущности группы являются не сегментами (или под- сегментами), а разовыми локальными блоками, которые могут быть легко реализованы для большинства ДП.
52 Глава 9 9.6.5. Реляционные базы данных как прикладные структуры данных Если решено использовать иерархию структур данных, на- пример, такую, как на рис. 9.10, можно реализовать структуру типа связанного списка (как для графических, так и неграфических данных) в виде массивов и затем самостоятельно управлять рас- пределением памяти; другим возможным решением является ис- пользование для построения и изменения списковой структуры программы управления памятью, входящей в операционную сис- тему. Альтернативой этим реализациям является применение сис- темы управления базой данных (например, реляционной базы данных 1116]) для хранения всей графической и неграфической информации, включая иерархию; при этом разрабатывается программа прохож- дения иерархии, в которой используются обычные обращения к базе данных. Преимущество такого подхода состоит в том, что прикладной программист при этом не пишет процедуры для построения модели- рующих систем в виде связного списка, приспособленных к конкрет- ному применению, и для доступа к этим системам. Вместо этого программист в качестве основы может использовать программное средство общего назначения, задавая таблицы отношений. Затем можно сформировать обращения к СУБД для поиска специфи- ческих п-ок (или ассоциаций), что аналогично перемещению ука- зателя связанного списка, или для перечисления всех ассоциаций в отношении, что аналогично циклическому прохождению массива связного списка. На рис. 9.13 представлены некоторые отношения в простом при- мере для двухуровневой программы LAYOUT. Эти отношения изо- морфны структурам, приведенным на рис. 9.8—9.10, б, поскольку должны содержать ту же информацию. (Это легко установить, если рассматривать каждую n-ку как блок экземпляра.) Различие сос- тоит в том, что средства для формирования, изменения и считыва- ния (запроса) уже существуют (благодаря наличию пакета реля- ционной базы данных). Разумеется, использование такого пакета об- щего назначения приводит к некоторой потере эффективности, од- нако для всех применений, кроме наиболее динамичных, с этим мож- но согласиться. Отметим, что адреса отношений не хранятся в са- мих отношениях: система отвечает за отображение символического имени конкретного отношения на его действительный адрес. Таким образом, имена внутри ассоциации следует рассматривать как кос- венные указатели, т. е. ссылки на другие отношения. В одной конкретной реализации этого метода [490] программист может описывать произвольные отношения; однако, кроме этого, предварительно можно задать ряд идентификаторов доменов (ме- ток столбцов) для обеспечения стандартной семантической интер- претации. Они включают ссылки на отношения нижележащих уровней, параметры экземплярных преобразований (при доступе
Описание Параметры I модуля экземплярного преобразования имя theta X У Отношение для комнаты (анало- ЫМЯ1 theta-ц *11 Ун zi-ка экземп- ляра гичпо массиву модулей) имя2 th<’tar2 *12 У ii я-ка экземп- ляра J я-ка экземп- ляра Оп исание имя объекта theta X У Отноше- Модуль стол_ стул (аналоги- стол theta3i X2t Ун НИЯ для экземпляр ров чен блоку опи- сания модуля в массиве) стул theta22 X22 У22 Модуль стол_ стул _ растение стол theta^i *31 У st стул theta33 *32 У31 растение theta33 *3.1 Узз Символ стола х уху У и! Уп2 *«ч УпЧ *«1 УпА ♦ Отноше- ния для > концевых узлов Символ стула {//л1 х m2 У mi Рис. 9.13. Иерархия, реализованная с помощью простой (реляционной) базы данных, .
Прикладная программа Вспомогательная часть программы, не работающая с моделью Компоненты п осуществляющие считывание из модели и запись В модель Программное обеспечение нижнего уровня, используемое совместно несколькими компонентами Моделирующая система Графическая реляционная СУБД Построение Измене-1 кие /Модельные ' [отношения I РбД Прохож- дение [при гра- фическом Выводе Обработка Прохождение при анализе Прог^ам- граричес- кого Вывода и управле- ния интер- активным взаимо- Зействи- ем Графичес- кая система Т Прикладная программа Прикладная библиотека | Анализ в
Моделирование и иерархия объектов 55 к последним автоматически производятся операции с МТП) и мно- гие другие полезные средства. Такая схема существенно упрощает работу программы прохождения модели и в то же время позволяет сохранить полную универсальность, так как программист может задавать произвольные отношения с доменами в произвольном порядке. В другой реализации [184] прикладные отношения не имеют заранее определенных доменов. Задаются только выходные или графические отношения, содержащие, например, отрезки и строки литер, а также входные отношения, содержащие информацию о действиях пользователя. Процедура интерактивного диалога при- кладной программы состоит из утверждений (т. е. не процедур, а деклараций), описывающих зависимости прикладных отношений от входных отношений. Эти зависимости отображают действия поль- зователя в изменения прикладных отношений. Процедуры приклад- ной программы для вывода прикладных отношений представляют собой другую совокупность утверждений, описывающих зависи- мость графических отношений от прикладных отношений. Измене- ния графических отношений демонстрируются на экране дисплея. Таким образом, действия пользователя изменяют входные отноше- ния, которые вызывают изменения прикладных отношений; по- следние вызывают изменение графических отношений, что приводит к изменению изображения; все эти действия производятся на основе утверждений об отношениях. Только программы анализа пишутся на, традиционном процедурном языке. На рис. 9.14 приведены структуры системы, ориентирован- ной на использование базы данных (рис. 9.14, е), обычной приклад- ной программы (рис. 9.14, а) и моделирующей системы (рис. 9.14, б). Отметим, что средства моделирования независимо от способа их реализации (с помощью прикладной программы, моделирующего па- кета или пакета реляционной базы данных) представляют собой нечто большее, чем структурированный дисплейный файл. Послед- ний сохраняет моделирующую иерархию, а средства моделирования используются не только для графического вывода, но и для анализа моделируемого мира. Это означает, что в модель можно помещать данные и извлекать их из нее, тогда как структурированный ди- сплейный файл предназначен только для считывания информации в ДП для вывода. Рис. 9.14. Три способа моделирования. а — стандартный подход: модель специального назначения строится, изменяется, анализи- руется и проходится прикладной программой (рнс 9. 1); б — моделирующая система общего назначения, используемая для построения абстрактных данных и кластеров. Она управля- ет всеми интерактивными взаимодействиями с моделью; в — моделирующая система, реали- зованная с использованием системы управления реляционной базой данных (РБД).
56 Глава 9 9.6.6. Выводы Принцип иерархии применяется в системе повсюду. Прежде всего мы видели его в прикладной модели, где иерархия представля- ла собой сочетание иерархий процедур и данных. Сокращенная (чис- то графическая) версия непреобразованной иерархии до видовых операций может быть создана для программной интерпретации либо с использованием символьной системы, либо на уровне ДП с ис- пользованием структурированного дисплейного файла. Любое из этих средств можно применять для вывода изображения непосред- ственно или косвенно через обычный (регенерируемый) сегменти- рованный линейный дисплейный файл или битовую карту. Обычно в процессе выполнения преобразований при переходе от объекта к изображению создается последовательность представлений иерар- хии объектов и ее изображений, причем каждое следующее пред- ставление ближе к форме представления в ДП, чем предыдущее; эти представления компилируются, интерпретируются и сохраня- ются в различных программных и аппаратных подсистемах. Каждое представление предназначено для некоторой определенной цели и имеет свои преимущества и недостатки для конкретного класса операций. По мере увеличения числа дискретных представлений обычно повышаются эффективность и скорость (благодаря функци- ональной специализации), однако на формирование каждого из этих представлений требуются дополнительные затраты, причем все представления должны синхронно корректироваться. Таким образом, только в частных случаях ДП может формировать изобра- жения непосредственно по всеобъемлющей модели (графическая структура данных). Ниже мы рассмотрим некоторые другие вопросы, характерные для иерархий. Более подробно изучим интерфейс между моделиро- ванием и видовой операцией, в частности возможность объединения максимального количества преобразований до применения к коор- динатам точек, а также взаимосвязь между преобразованием и от- сечением. 9.7. МНОГОУРОВНЕВАЯ КОРРЕЛЯЦИЯ Если существуют n-уровневая иерархическая модель и только ли- нейно сегментированный дисплейный файл, то каким образом можно правильно соотнести указание с соответствующим местом в иерарх хической модели? Во-первых, если «чистая» структура данных или процедура интерпретируются «на лету», то прохождение модели может быть остановлено в момент, когда генерируется примитив, свет от которого попадает в поле зрения светового пера. При дру- гом решении значения х и у для каждого примитива по мере гене- рации могут подвергаться отсечению небольшим прямоугольным окном (окно селектора), окружающим указку локатора, используе-
Моделирование и иерархия объектов 57 мую для имитации селектора. Первый примитив, удовлетворяющий испытанию, вызывает идентификацию объекта. Более дорогостоя- щий, но зато и более точный алгоритм состоит в том, чтобы оты- скать не первый, а самый близкий примитив (или объект) путем вы- числения минимального расстояния при прохождении всей иерар- хии (разд. 5.3). Как уже говорилось в разд. 5.2.2, при использова- нии пера на быстром векторном дисплее могут произойти неточные прерывания из-за отсутствия синхронизации между процессом про- хождения иерархии и видовой операцией, с одной стороны, и про- цессом генерации изображения на нижнем уровне — с другой. Для обеспечения синхронизации, возможно, придется замедлить канал вывода. Во-вторых, если существует компилированный сегментирован- ный дисплейный файл, во многих простых графических пакетах типа ПГП, используя методы, описанные в разд. 4.3.4, из него можно получить только имя сегмента. В системе Core допускается один дополнительный уровень имен для совокупностей примитивов типа групп внутри сегментов, для чего используется атрибут имя_ гр. Это обеспечивает двухуровневую структуру имен при одноуров- невой структуре редактирования. Любую точку, заданную в сег- менте, можно, таким образом, указать, однако ее нельзя переме- стить или стереть без повторного вывода всего сегмента. В GPGS принято произвольное блочно-структурированное со- глашение о наименовании для вложенных блоков примитивов внутри сегментов [79]. Это позволяет использовать указатели структуры данных в качестве имен (имя_гр) для блоков благодаря тому, что все примитивы, генерируемые из данного подобъекта, исполь- зуют общий и уникальный для данной структуры данных иденти- фикатор (имя) подобъекта. Таким образом, GPGS дает полную по- следовательность имен объектов от корневого и до указанного узла в виде последовательных (вложенных) имен имя_гр для блоков. В системе Core прикладной программист может получить ограни- ченную, но практичную версию такого иерархического наименова- ния, если считать, что существует лишь несколько уровней иерар- хии и небольшое число объектов на каждом уровне, причем каждый из этих объектов имеет собственное имя (идентификатор) в виде це- лого числа. Имена сегментов соответствуют самому высокому уров- ню дерева (корневые подобъекты), а каждое имя_гр образуется присоединением разрядов идентификатора каждого последующего подобъекта. Таким образом, имя-Сегмента с 16-разрядным имя_гр, где на каждый из двух уровней используется по 8 бит, может ото- бражать трехуровневую иерархию, в которой каждый из сегментов содержит до 256 подобъектов (эти подобъекты в свою очередь содер- жат по 256 подобъектов). Это, безусловно, весьма большая иерархия. При указании световым пером с использованием адресов бу- фера и линейного дисплейного файла в виде связанного списка можно организовать многоуровневую таблицу корреляции, которая
58 Глава 9 СКТ R D Рис. 9.15. Отображение иерархической корреляции. а — иерархия модели; б — чертеж; в — отображение корреляций и сегментированный ли- нейный дисплейный файл; корневые подобъекты хранятся в собственных сегментах.
Моделирование и иерархия объектов 59 представляет собой обобщенную форму одноуровневой таблицы из разд. 4.3.4 (рис. 4.19). На рис. 9.15 изображена электронная схема СКТ (не подвергнутая отсечению), которая смоделирована как двухуровневая иерархия, состоящая из двух фильтров Ft и F2 и диода D. Предположим, что сгенерированная дисплейная программа хранится в виде трех сегментов, по одному для каждого из корневых подобъектов. Таблица адресов и длин в буфере (рис. 9.15, в) используется для хранения адресных диапазонов блоков примитивов, соответствующих каждому объекту в буфере (рис. 4.19). Поскольку фрагменты программ для блоков обычно рас- полагаются в буфере с вложением (Ri в Fj, Ft в СКТ), поиск, во время которого адреса буфера (выдаваемые аппаратурой, осущест- вляющей корреляцию) сравниваются с начальными адресами в таблице корреляции, не должен останавливаться на первом объекте, который попадает в «диапазон». Вместо этого при поиске должен быть указан подобъект с наименьшим диапазоном, начальный адрес которого ближе всего к указанному элементу, поскольку он пред- ставляет самый нижний уровень (концевой узел). Поэтому адрес- ный счетчик ДП, приведенный на рисунке, указывает на резистор R2, а не на F2 и, конечно, не на СКТ. Для обратного прохождения вверх по иерархии от любого концевого узла с остановками в ме- стах, где это требуется пользователю, используется ссылка вверх. Например, указание на линию в резисторе F2 может вызвать после- дующее выделение (например, мерцание) только резистора на уровне 2, F,— на уровне 1 или всего изображения на уровне 0, что позво- ляет пользователю задать соответствующий объект для следующей операции (упражнение 9.20). В тех случаях, когда указание со сравнением координат (х, у) используется для многоуровневой моделирующей иерархии и ли- нейного дисплейного файла, применяют другие методы. Самый простой — смоделировать прохождение модели или структуриро- ванного дисплейного файла «на лету». Прохождение иерархии можно повторять до тех пор, пока не будет сгенерирован экранный при- митив, координаты (х, у) которого лежат в пределах заданного до- пуска для координат (х, у), поступивших от физического локатора. При другом решении каждый примитив можно сверять с окном селектора. Этот процесс очень медленный, поскольку каждый при- митив подвергается отсечению и преобразованию; поэтому его не рекомендуется применять, за исключением, тех случаев, когда он осуществляется (хотя бы частично) аппаратными средствами (гл. 10). Для двумерных задач можно использовать улучшенный метод, при котором локатор (х, у) (или окно селектора) отображается на координаты прототипа каждого объекта с помощью объединенной матрицы, обратной (МТП-ВП), чтобы проверку можно было сде- лать до преобразования каждого примитива. Гораздо более эф- фективный метод, связанный с использованием оболочек, описан в разд. 9.12.2.
60 Глава 9 9.8. ПЕРЕДАЧА АТРИБУТОВ | Вопрос об атрибутах в машинной графике весьма сложен. ; Прежде всего являются ли такие атрибуты, как цвет, яркость и! тип линии, частью описания объектов в модели, или это атрибуты' конкретной визуализации, или же и то и другое сразу? В этом во- просе не существует твердых и четких правил; некоторые объекты, в особенности физические, имеют присущий им цвет, тогда как другие, особенно абстрактные, можно изображать на экране в произвольных цветах, задаваемых пользователем (гл. 17). В связи с этим возникает вопрос: каким образом можно изменять атрибуты? Такие атрибуты, как видимость сегмента, его обнаружимость (на- пример, для указаний в меню и для обратной связи (упр. 2.18)),- а также возможность визуального выделения, относятся, разумеется, к области графической визуализации, а не к моделированию, поэтому их легко можно изменять в дисплейном файле. Простые методы ре- ализации, описанные в гл. 4, обеспечивают возможность такого быстрого изменения путем замены одного слова в заголовке сегмен- та. Эти атрибуты являются динамическими атрибутами сегмента, поскольку одно динамическое изменение влияет на каждый примитив в сегменте. Для изменения других атрибутов, ориентированных на моде- лирование, могут потребоваться изменения в модели, возможно, ее повторное прохождение и затем внесение соответствующих из- менений в дисплейный файл. Должны ли, например, тип линии, цвет и яркость изменяться так же легко в моделирующем пакете, как динамические атрибуты сегмента для ПГП в пределах графи- ческого пакета? С точки зрения прикладного программиста, это было бы очень удобно; однако данные атрибуты нельзя так просто изменять в сегментах, откомпилированных для современных ДП; их скорее можно закодировать для каждого примитива, чем задать как режим в некотором регистре, содержание которого можно было бы легко изменять для всех последующих примитивов. Атрибуты, которые нельзя легко изменить для сегмента в целом, поскольку они связаны с фрагментом программы для каждого примитива в ДП, называются статическими. Графический пакет не дает программи- сту возможности изменять статические атрибуты примитивов после их генерации. Хотя атрибут сегмента может быть статическим, а атрибут примйтива динамическим (за счет избирательного редакти- рования программы в ДП), существует естественное деление на ди- намические атрибуты сегментов и статические атрибуты примити- вов. Так, например, в системе Core четыре атрибута являются ди- намическими атрибутами сегментов, а все остальные атрибуты — ста- тическими “.При этом исходят из того, что большинство дисплеев Х) Единственным статическим атрибутом сегмента является тип преобразова- ния изображения.
Моделирование и иерархия объектов 61 позволяет легко реализовать видимость, выделяемость, обнаружи- мость и преобразование изображения без необходимости изменения каждого примитива в сегменте. Только в таких ДП, которые не имеют аппаратных средств поворота и масштабирования, для вы- полнения динамических изменений, требующих поворота или ма- сштабирования, необходимо повторно компилировать весь сег- мент с помощью ПГП. И наоборот, графические пакеты для таких ДП обеспечивают только перенос изображения. Таким образом, при разработке пакета необходимо рассматри- вать следующие вопросы, относящиеся к работе с атрибутами [8, 321]: 1. Какие атрибуты используются только при моделировании, а какие — как при моделировании, так и при видо&ых операциях? 2. Какие атрибуты можно изменять динамически (обычно только путем изменения заголовка в дисплейном файле), а какие являются статическими и, следовательно, могут быть изменены только при- кладным программистом, который повторно задает повторную компиляцию одного и более сегментов? 3. Каковы границы воздействия атрибута? Какие атрибуты от- носятся к сегментам, а какие — к примитивам? 4. Могут ли атрибуты одновременно быть атрибутами сегмента и примитива? Если да и если для данного примитива их значения различны, то какой из них имеет преимущество? 5. Каким образом согласуются, объединяются (и т. д.) атрибуты объектов верхних и нижних уровней? 6. Каким образом программисту удобнее всего задавать атри- буты, а также как и когда они привязываются к конкретным воз- можностям устройства вывода? Предположим, например, что у нас имеются письменный стол цвета красного дерева и черный кожаный стул, образующие мо- дуль «стол — стул». Каким должен быть цвет такого модуля? Следует ли предусмотреть возможность независимого задания для всего модуля другого цвета (ореха или светлого дерева), который перекрывал бы цвета составляющих объектов? А может быть следует объединить, т. е. смешать цвета вышележащих и нижележащих уровней? Одно из возможных решений состоит в следующем: если объект нижнего уровня не имеет цвета, то он приобретет цвет вы- зывающего объекта; если же объект нижнего уровня имеет цвет, то этот цвет перекроет цвет вызывающего объекта" Яркости можно объединить путем их перемножения или принимать меньшую из двух яркостей. Разумеется, нельзя раз и навсегда выбрать единст- венное решение из перечисленных выше, поскольку такой выбор должен зависеть от конкретной ситуации и приложения. От решения этих вопросов зависит прохождение иерархии. При прохождении мы встречаем не только «параметры» преобразо- вания экземпляра, подлежащие объединению в МТП, но и «пара- метры» атрибутов, которые заменяются параметрами нижележа-
62 Глава 9 щих уровней, заменяют эти параметры или объединяются с ними. Следовательно, экземпляры блоков могут содержать, кроме МЭП, атрибуты, применяемые к объектам нижележащего уровня. Кроме того, в каждом подсписке связанного списка может существовать специальный первый блок, определяющий для данного подобъекта атрибуты, которые либо перекрываются атрибутами вызывающего объекта, либо перекрывают атрибуты вызывающего объекта, либо, наконец, объединяются с ними. Стек можно использовать для сохранения не только МТП (и указателя объекта), но и атрибутов, действующих на текущем уров- не, и затем восстанавливать их по окончании обработки подобъекта (упражнение 9.12). Поскольку используются разнообразные фор- маты данных, мы можем помещать в стек и брать из него не сами данные, имеющие переменную длину, а соответствующие указатели; другим возможным решением является использование индивидуаль- ных стеков для различных форматов данных. 9.9. УМНОЖЕНИЕ МАТРИЦ ПРЕОБРАЗОВАНИЯ СЛЕВА И СПРАВА В разд. 9.4 и 9.5 говорилось, что процедуры для работы с МТП (например, ROTATE_СТМ _REL и т. д.) производят умножение слева на матрицу МТП, чтобы упростить объединение матриц эк- земплярных преобразований при префиксном прохождении дерева. При явном задании индивидуальных геометрических преобразова- ний внутри процедуры для помещения объектов в их собственные координатные системы мы должны задавать эти преобразования в порядке, обратном тому, в котором они должны выполняться. Тогда последняя из заданных матриц, которая последней умножа- лась слева на МТП, фактически первой применяется к координатам объекта. Однако при таких преобразованиях для размещения и преобразованиях нормирования было бы естественнее выполнять умножение справа на МТП и задавать преобразования в порядке /И1; М2, Л43, . . ., в котором они должны умножаться, т. е. X' — =Х-Мг'М2-М3 ... . Как уже говорилось выше (разд. 9.5), для задания одного из этих двух порядков умножения матриц (в за- висимости от того, производится ли последовательное преобразова- ние объекта или прохождение иерархии объектов) можно использо- вать простую системную переменную. Любой желаемый результат может быть получен при любом из этих режимов за счет явного задания преобразований в соответ- ствующем порядке. Задание последовательности матриц А, В и С в режиме умножения справа эквивалентно заданию последователь- ности матриц С, В, А в режиме умножения слева: Х'=Х -АВС. Например, если допускается только умножение справа, то про- грамма прохождения иерархии может сохранять все встреченные;
Моделирование и иерархия объектов 63 *5 Ю /?(45) 7, (4.2)4 Л2( 45); 3; (1,2); Л'-X-(S3 (1,2) • № (45) • 7, (4.2))) = ((x-Ss (1,2))- Я2(45|)-7; (4,2) 10 -5 0 S Исходный объект г, (4,2); /?2(45), Sj(1,2), Х'-Х ((Т, (4,2) • Яг (45)) • S3( 1,2)) = ((Х-Т, (4,2))Я2(.45))-З3(1,2) 10 Исходный объект е 0 Рис, 9.16. Графическое представление умноя^енйя слева и справа (при одной и той же последовательности обращений получаются различные результаты). а — умножение слева на МТП тождественного преобразования при лексической последова- тельности обращений, указанной на рисунке; б — умножение справа на МТП тождественного преобразования при той же последовательности обращений. МЭП в стеке и считывать их в обратном порядке для умножения на МТП. Однако очевидно, что предпочтительнее использовать ум- ножение слева. Чтобы предсказать результат заданной последова- тельности, лучше всего представить ее в канонической математиче- ской форме, а затем применять последовательные преобразования к простому объекту в его собственной системе координат (рис. 9.16). Поскольку умножение матриц некоммутативно, одна и та же после- довательность при умножении слева и справа обычно приводит к разным результатам. В частности, можно отметить, что на рис. 9.16, б применение масштабирования с различными коэффи- циентами по осям х и у после поворота приводит к сдвигу, тогда как при обратном порядке преобразования сдвига не происходит. 9.10. КОМБИНИРОВАНИЕ ПРОХОЖДЕНИЯ МОДЕЛИ С ВИДОВОЙ ОПЕРАЦИЕЙ В гл. 4 показано, что двумерная видовая операция состоит из отсечения в мировых координатах с последующим преобразованием окно — поле вывода для прямых окон (рис. 9.17, а) или представ- ляет собой отображение окна на поле вывода с последующим отсе- чением для повернутых окон в нормированных координатах
64 Глава 9 Обычно объеоиняются а В Рис. 9.17. Последовательность действий при двумерной видовой операции: объек- в МК (мировых координатах)-> изображение в ФК (физических координатах) а — отсечение и преобразование «нормальная^ последовательность действий, отсечение пря мым окном (с использованием алгоритма отсечения Коэна — Сазерленда), преобразование в НК и ФК-пространство, б — для повернутого окна и прямого поля вывода преобразова- ние, отсечение в НК-пространстве, преобразование в ФК пространство, в — для повернутого окна и прямого поля вывода преобразование, отсечение непосредственно в ФК-пространстве (с использованием аппаратного отсечения) (рис. 9.17, б) или непосредственно в физических координатах (рис. 9.17, в). Математически двумерное отображение окна на поле вывода очень легко представить как объединение матриц с исполь- зованием преобразований масштабирования и переноса (разд. 4.2.2); несколько сложнее случай трехмерного преобразования (сложность обусловлена необходимостью проецирования), рассмотренный в гл. 8. Было показано, что для трехмерного случая мы не имеем возмож- ности сами решать, где именно в последовательности преобразований следует производить отсечение для повышения эффективности; при конечном видовом объеме следует произвести отсечение передней и задней плоскостями, чтобы не проецировать невидимые примитивы ) (или невидимые части примитивов) на плоскость проекции, по- скольку их нельзя удалить с помощью двумерного окна. Таким обра- ' зом, мы получаем смешанную последовательность действий — от- сечения и повторного преобразования,— показанную на рис. 9 18; все преобразования нормирования объединены, и можно также объе- 1 динить проецирование с отображением окна на поле вывода. Теперь мы добавим два дополнительных набора преобразова- j ний на каждом конце этих последовательностей и попытаемся от-1 ветить на вопрос: как лучше объединить максимальное число матриц,'Я чтобы избежать повторного преобразования координат точек?!
Моделирование и иерархия объектов 65 Отсеченный объект Обычно объединяются Рис. 9.18. Последовательность действий для трехмерной видовой операции. На входе мы добавляем моделирующие преобразования (размеще- ние объекта и его экземплярное преобразование), которые уже были объединены в МТП программой прохождения модели, а на выходе — преобразования образа, рассмотренные в гл. 8. На рис. 9.19 пока- зана полная последовательность действий для двумерного случая, а на рис. 9.20 —для трехмерного случая (приведено максимальное число матриц, которые могут быть объединены в каждой последова- тельности преобразований подобно тому, как это сделано в разд. 8.6). Отметим, что на рис. 9.19, а математически можно объединить три .последние матрицы, однако, поскольку часто требуется динамиче- ски изменять преобразования образа, мы выполняем это объедине- ние либо в пространстве НК, либо же в пространстве ФК, поэтому объединяются лишь две последние матрицы. z На рис. 9.19, б и 9.20 показано использование «обхода» (разд. 9.4) для объединения МТП, полученной от моделирующего пакета, с преобразованиями, выполняемыми до отсечения в гра- фическом пакете. Прикладная или моделирующая программа может использовать этот простой механизм для передачи МТП графической программе, чтобы последняя могла непосредственно обрабатывать координаты прототипа объекта. И наоборот, если моделирующая система является составной частью развитого графического пакета или структурированные дисплейные файлы используются непосред- ственно в ДП, программа прохождения иерархии или ДП (соответ- ственно) может получить составное преобразование нормирования и видовой операции (до отсечения) и объединить с ним моделирую- щую МТП (как на рис. 9.6). С помощью алгоритма прохождения дерева (пример 9.4) можно умножить видовое преобразование слева на преобразование размещения корневого объекта или на экземпляр- ное преобразование в МТП, а тело алгоритма останется при этом неизменным: Х' = X -МТП -ВП. Все ли было сделано при объединении матриц для отдельных шагов? Можно было бы добиться большего, если бы нам удалось пе- ренести отсечение либо к самому началу, либо к самому концу всей последовательности действий, чтобы можно было объединить все преобразования; в этом случае мы имели бы простейшую последова- тельность — отсечение и преобразование или, наоборот, преобра- зование и отсечение. .Из двух последовательностей предпочтитель-
Моделирование ВиЭоВая операция а Объединение 8 ПГП Моделирование Видовая операция Объединение через „обход * д Объединение 6 ПГП Рис. 9.19. Полная последовательность действий для двумерного моделирования и двумерной видовой опера- ции: объект в координатах прототипа (КП) — изображение в ФК. а — отсечение в мировых координатах; б — отсечение в НК-пространстве. Моделирование Видовая операция Объект 6 МК3 Объект 0 МК3 Объект МТП: МоЭелироВание и преобразование в кп3* Преобразование нормирования в МК3 Отсеченный объект В мк3 Отсечение' каноническим ВиЭрбым объемом Отсеченный объект 6НК3 Преобразование канонического Видового объема В пв3 Преобразованный 'отсеченный объект ___бНКз Трехмерные сегменты преобразованного изображения 6 нк3 Прямоугольная проекция В НКг НК2 НК2-срк2 ФК, Объединение через „обход ° ПГП производит объединение при каждом изменении преобразования изображения или поля Выводи Рис. 9.20. Полная последовательность действий для трехмерного моделирования и трехмерной видовой операции: объект в К Ц-> изображение в ФК-
Моделирование и иерархия объектов 67 Рис. 9.21. Поле вывода (образ окна при отображении на поле вывода) и окно (об- раз поля вывода при отображении на окно). нее последовательность отсечение — преобразование, поскольку в этом случае раньше устраняются невидимые примитивы (не при- ходится сначала бесполезно их преобразовывать, а затем отбрасы- вать). 9.11. ОТСЕЧЕНИЕ В КООРДИНАТАХ ПРОТОТИПА Ниже мы рассмотрим для двумерных задач зависимость между тремя параметрами видовой операции — окном, полем вывода и отображением окна на поле вывода. Из рис. 9.21 следует, что на языке математических функций поле вывода представляет собой образ окна при отображении окна на поле вывода. При обратном преобразовании поле вывода отображается в окно. В действительно- сти требуется задавать только два из трех параметров видовой опера- ции, чтобы определить по ним третий параметр. Обычно это озна- чает, что программист задает окно и поле вывода, а пакет вычисляет преобразование окно -> поле вывода. В разд. 4.2.1 мы установили, что отсечение можно осуществлять до отображения (в мировых координатах) или после отображения (в координатах устройства). Что произойдет, если изменить после- довательность действий, показанную на рис. 9.19, б (производить отсечение в координатах прототипа до объединения экземплярных преобразований, осуществляемых с помощью МТП, с видовыми преобразованиями)? Этот вопрос аналогичен вопросу о взаимоот- ношениях между окном, полем вывода и отображением окна на поле вывода. Здесь мы рассмотрим преобразования с использованием МТП, которые также осуществляют отображение из одного про- странства в другое с использованием соответствующей области отсечения, точнее из координатного пространства прототипа в мировое координатное пространство, причем в последнем в явном виде задается область отсечения (окно). Как и выше, при двух за-
68 Глава 9 мтп Рис. 9.22. Эквивалентность отсечений в координатном пространстве прототипа объекта вырезом МТП-1 (О), окном в мировом координатном пространстве и полем вывода в НК пространстве. Отсеченный объект б МК Объединение Пространство Пространство координат прототипа сризических координат б Рис. 9.23. Отсечение и преобразование только видимых двумерных примитивов. а — оптимальная последовательность действий для двумерной задачи: отсечение, преобра- зование; б — начальная и конечная системы координат данных параметрах из трех мы можем определить третий. Таким образом, можно осуществлять преобразование, а затем отсечение в мировых координатах или сначала произвести отсечение для полу- чения предварительного изображения окна, а уже затем преобра- зование. Это предварительное изображение, называемое вырезом (clipbox), можно вычислить как результат применения матрицы, обратной объединенной МТП, к окну (рис. 9.22). Вырез представляет собой также предварительное изображение, получаемое в результате
Моделирование и иерархия объектов 69 Вырез 8ля КонЭенсагпора МТЛ'1(О2) I "I Конденсатор Резистор Пространство КоорЗинат прототипа Повернутое окно Рис, 9.24. Адаптивное отсечение: отсечение в координатном пространстве прото- типа (конденсатор), кроме случая, когда есть поворот (резистор). Следует отме- тить, что, хотя в данном конкретном случае вырезы, соответствующие Oj, могут быть прямыми, наличие поворота требует отсечения полем вывода ПВг для обоих экземпляров резистора. Кроме того, вырезы для О2 повернуты, поэтому также тре- буется отсечение с помощью ПВ2. применения к полю вывода составного преобразования, объединяю- щего МТП и отображение окна на поле вывода. Таким образом, отсечение можно одинаково успешно проводить в трех местах. Эффективную последовательность операций, приве- денную на рис. 9.23, а, можно осуществить, если выполнить отсе- чение с помощью выреза, а затем преобразовать только видимые примитивы, используя единственную объединенную матрицу М, получаемую перемножением матрицы МТП, матрицы отображения окна на поле вывода, матрицы преобразований образа (если они за- даны) и матрицы отображения НК в ФК (рис. 9,23, б). Интересно отметить, что правильное понимание иерархии и преобразований позволило нам только один раз для каждого объекта выполнять отсечение и. преобразование при переходе от координат прототипа к физическим координатам устройства1'. Другими словами, при таком подходе нам не надо заниматься всеми последовательными индивидуальными моделирующими и видовыми преобразованиями, которым был подвергнут объект в процессе его построения и выпол- нения видовой операции. При таком изящном решении возникает только одна проблема: что произойдет, если МТП содержит экземплярное преобразование поворота или если окно повернуто (рис. 9.24)? В любом из указанных случаев МТП-1 (О) сформирует непрямой вырез, что не позволит 11 В этом случае опять более целесообразно при программных динамических преобразованиях образа объединить МТП с отображением О->ПВ (окно — поле вывода), а затем динамически изменять объединенные преобразования образа и отображения НК->ФК.
70 Глава 9 использовать алгоритм отсечения Коэна—Сазерленда (гл. 4). Вме- сто этого придется воспользоваться более сложным и дорогостоя- щим алгоритмом Сазерленда — Ходгмана для отсечения многоуголь- ником, приведенным в гл. 11. Если требуется выполнить поворот (или сдвиг для пакетов, которые могут его осуществлять), гораздо эффективнее преобразовать все примитивы в этом узле, а затем от- сечь непрямым окном или прямым полем вывода, чем сначала отсе- кать невидимые примитивы. Хорошей компромиссной стратегией для случая, когда имеется прямое окно, но возможны экземплярные преобразования сдвига или поворота, является проверка экземпляр- ных преобразований во время прохождения иерархии для объеди- нения преобразований. Если на данном уровне имеются поворот или сдвиг, отсечение для всех объектов ниже данного узла необхо- димо выполнять в мировых координатах или координатах устройства вывода, а для всех других объектов — в их собственных координа- тах прототипа (рис. 9.24). Такой алгоритм, называемый иногда адаптивным отсечением [352], использован в примере 9.6. Он пред- ставляет собой усовершенствование итеративной процедуры про- хождения дерева, использованной в примере 9.4а. Пример 9.6. Процедура отсечения, учитывающий наличие поворота и сдвига в экземплярном преобразовании procedure CLIPFIRST (ук: указатель корневого узла прототипа); {Эта адаптивная процедура отсечения проходит двумерную иерархию про- тотипов и экземпляров объектов. Она осуществляет отсечение объекта в координатах прототипа, если экземплярное преобразование не включает поворота или сдвига, и в координатах устройства в противном случае. Она получает объединенное видовое преобразование из глобального мас- сива впр в графическом пакете через «обход». Как и в примере 9.4 а, текст приводится на псевдокоде, а не на синтаксически правильном Паскале.} var стк_ук: стек указателей; ) стк_мтп-. стек для всех МТП; к стк_врз: обл_выв: врз: begin {инициализация} ЕМРТУ(стк); мтп := впр-, врз := обл_выв* INVERSE(мтп)’, repeat if j/« = nii {конец списка} then стек координат выреза; поле вывода (прямоугольник); вырез (прямоугольник); begin С-Р0Р(врз, стк_врз); POP(мтп, стк-мтп)\ {инициализация МТП для объединения всех видовых пре- образований} {по умолчанию, при отсутствии поворота и сдвига} {закончена обработка подобъек- тов данного узла, поэтому обратиться к стеку для про- должения работы} {взять из стека координаты выреза}
Моделирование и иерархия объектов * 71 else if else else Р-РОР(ук, стк_ук); ук:—ук( .у к _след _ блока end у к) .тип-кода—1 then begin {перейти к следующему блоку вышележащего, уровня для сле- дующей итерации} {экземплярный блок: сохранить состояние и спуститься} P_PUSH(yK, стк-ук)', PUSH(Mtnn, стк-мтп)\ C-PUSH(ep3, стк-врз)\ {поместить в стек вырез} SET-CTM-REL_2(yK( . мэп)-, {объединить МТП с МЭП дан- ного уровня} If новая мтп не включает поворота then врз: — обл_выв*1 NVERSE(Mtnn') {для отсечения в координатах прототипа} else врз :—обл_выв\ {для отсечения в координатах устройства} ук := t/ref , ук_блока_прототипа {спуститься} end If (ук) . тип-кода = L) and (мтп включает поворот) then {концевой узел — поворот} begin {преобразование, затем отсечение} преобразовать каждый примитив с помощью МТП, затем отсечь его вырезом врз — обл_выв и вывести видимую часть; ук := ук) . ук-след-блока {перейти к следующему блоку на данном уровне для новой итерации} end if (ук‘ . тип-кода = L) and (мтп не включает поворот) then begin {концевой узел без поворота, поэтому выполнить сначала отсечение, затем преобразование} отсечь каждый примитив вырезом врз, затем преобразовать и вывести видимую часть; ук := у к) . ук-След-блока {перейти к следующему блоку данного уровня} end until (i/K=nil) and (STACK-IS-EMPTY (стк)) {последний узел в кор- невом подсписке} end, {CLIPFIRST} К сожалению, это решение, дающее удовлетворительные ре- зультаты для двумерного случая, неприменимо для трехмерных за- дач, поскольку нормирующие и перспективные преобразования обычно приводят к поворотам и искажениям, связанным со сдвигом. Только в частном случае некосоугольного параллельного проеци- рования вдоль главных осей можно избежать поворота, остается только сдвиг при нормирующих и перспективных преобразованиях. В случае использования обратного преобразования для отображе- ния видового объема в координаты прототипа мы получили бы не- пригодный для использования перекошенный видовой объем: а ведь именно перекос в первую очередь должны были устранить преобразования нормализации! Следовательно, наилучшим реше- нием для трехмерного случая является последовательность действий преобразование — отсечение — преобразование, приведенная на рис. 9.20.
72 Глава 9 9.12. ОБОЛОЧКИ I В описанных выше стратегиях для двумерного и трехмерного слу-1 чаев делалось все возможное ради минимизации числа индиви- 1 дуальных преобразований, примененных к координатам, и числа ’ координат, к которым эти преобразования применяются. И тем не менее во многих случаях выполняется намного больше работы, < чем фактически необходимо, поскольку не учитывается структура ! (иерархия) объектов в той степени, в которой это может сделать наш опытный глаз. В частности, объекты в иерархии обычно зани- . мают лишь конечные подпространства мира, и было бы желательно иметь возможность быстро определить, пересекается ли это под- пространство с окном до того, как будет начато отсечение отдель- ных примитивов. Другими словами, мы хотим воспользоваться преимуществами геометрической «локальности» объектов, называе- мой пространственной когерентностью, для быстрой проверки объектов в целом на принятие и отбрасывание, подобно проверкам при отсечении отдельных примитивов. В гл. 4 и 5 введено понятие об экранной оболочке как о прямом (неповернутом) прямоугольнике, который используется для быстрого и приближенного сравнения при корреляции указания. Здесь мы дадим другое определение оболочки: двумерный прямой прямоуголь- ник или трехмерный параллелепипед, который ограничивает объект в его прототипном координатном пространстве1’. Мы просто про- веряем, пересекается ли оболочка (обычно выбираемая с возможно меньшими размерами) с вырезом (для двумерной задачи); наоборот, для двумерного и трехмерного случаев мы можем преобразовать оболочку с помощью МТП в НК- или ФК-пространство (таким обра- зом, не обращая МТП) и затем проверить преобразованную обо- лочку на пересечение с окном или полем вывода. Для двумерного отсечения в координатах устройства возможны три случая (рис. 9.25). ' Экземпляр а может быть сразу отброшен, поскольку его преоб- разованная (экранная) оболочка лежит вне поля вывода. Аналогич- но экземпляр б может быть сразу принят, и примитивы прототипа следует только подвергнуть преобразованию. Наконец, экземпляр в нельзя ни принять целиком, ни отбросить целиком, и примитивы прототипа требуют преобразования и отсечения. На рис. 9.26 показано, что можно легко определить положение преобразованной оболочки относительно поля вывода. Для про- верки того, лежит ли главная диагональ вне поля вывода в полу- пространстве (случай а), внутри поля вывода (б) или же распола- гается по-иному (в и г), используются коды «вне — внутри». От- метим, что можно сравнивать положение оболочки в координатах 11 Термин высечка (boxing) [353] использовался для обозначения границ ограничивающего прямоугольника (т. е. оболочки) в случае дисплейных процедур.
Моделирование и иерархия объектов 73 Оболочка Координат прототипа Рис. 9.25. Оболочки. прототипа с вырезом или положение преобразованной оболочки в координатах устройства с полем вывода. Решение о том, где про- верять положение оболочки, не определяет, где выполняется отсе- чение, поэтому адаптивная стратегия (выбор порядка выполнения отсечения и преобразования в зависимости от конкретной ситуации) остается в силе и в этом случае; просто объединяются проверка обо- лочки и основной алгоритм из примера 9.6 (упражнения 9.15 и 9.18). (0,0) НК- пространство Рис. 9.26. Диагональная 'проверка на пересечение при отсечении.
74 Глава 9 --------------(О Пространство коорЗинат прототипа Рис. 9.27. Окружение прямой оболочкой Новая окружающая прямая оболочка 0) _LJ Преобразованная оболочка НК- пространство (1,11 Пространство нормализованных координат Рис. 9.28. Бесполезная обработка оболочек. 9.12.1. Экземплярные преобразования с поворотом и сдвигом Прежде чем обрабатывать оболочки, необходимо разобраться е МТП, включающей поворот или сдвиг прототипа. Как показано на рис. 9.27, преобразованная оболочка повернута, а это требует отсечения многоугольником либо при повернутой оболочке, либо при повернутом вырезе. Если преобразованную оболочку «окру- жить» собственной прямой оболочкой (упражнения 9.16 и 9.17) и сравнить положение последней с положением поля вывода, мы по- теряем в точности, но выиграем в скорости. В результате может по- требоваться ненужное отсечение, как показано на рис. 9.28: в слу- чае а прямая оболочка окружает повернутую оболочку, которая полностью лежит вне поля вывода, а в случае б повернутая оболоч-
Моделирование и иерархия объектов 75 ка и ее прямая оболочка пересекаются с полем вывода, тогда как содержащийся в них объект можно сразу принять (визуально, если не алгоритмически). 9.12.2. Отсечение и корреляция для иерархии На практике дополнительная работа, связанная с использовани- ем оболочек и выполнением иногда ненужного отсечения, окупается экономией времени, обеспечиваемой механизмом быстрого приня- тия и отбрасывания объектов целиком. В особенности это справед- ливо для иерархий, в которых можно сразу принимать и отбрасы- вать целое поддерево, отходящее от узла, для чего нужно вычислить оболочку этого поддерева, т. е. оболочку, окружающую оболочки всех его компонент. Отсечению подвергаются примитивы конце- вого узла, а затем производится проверка каждой оболочки его экземпляров для избирательного отсечения дочерних узлов. При этом, если изменяются экземплярные преобразования или значения координат подобъекта, должны быть откорректированы оболочки всех объектов на пути от объекта до корня. Для статических иерар- хий процедур, где координаты и экземплярные преобразования зада- ются конкретными данными (константами), эта корректировка не представляет больших трудностей. Однако в динамических иерар- хиях, где прикладная программа может изменять координаты и преобразования в реальном времени, корректировку придется выполнять для значительной части иерархии. В структурированных дисплейных файлах, где ДП «на лету» интерпретирует оболочку, для быстроты обработки может оказаться выгоднее производить проверку отдельных оболочек составных объектов, а не объединен- ной оболочки, чтобы устранить корректировку по иерархии. То или иное решение в этом случае принимается в зависимости от числа уровней дерева. Оболойки используются также для ускорения процесса корре- ляции при указании, описанного в разд. 9.7. Вместо преобразова- ния и отсечения для каждого примитива в иерархии при сравнении его экранного представления (если оно существует) со значением (х, у), выданным от локатора, мы можем применить матрицу, об- ратную (МТП -ВП), к точке (х, у) в НК-пространстве и сравнивать эту обратноотображенную точку с оболочкой каждого объекта в его прототипном координатном пространстве (а не с каждым примити- вом в каждом объекте). Поскольку оболочки дают весьма грубое приближение, чтобы устранить неопределенность при расположе- нии объектов «вблизи» от проверяемой точки, следует использовать ряд правил. Так, в отличие от простейшей проверки, при которой можно удовлетвориться первым примитивом, лежащим в пределах заданной окрестности обратного отображения значения от локатора (х, у), мы не должны удовлетворяться первым же концевым объектом или подобъектом, оболочка которого окружает отображенную точку.
76 Глава 9 Если на данном уровне точку окружают, например, две оболочки 1 подобъектов и три концевые оболочки, то можно, в частности, '! вычислить точные расстояния (используя вещественные числа) от точки до каждого примитива и выбрать ближайший из них. Для повышения разрешающей способности за счет существенного уве- личения времени вычисления алгоритм может производить рекур- сию к двум подобъектам (а также к их подобъектам и т. д.) с целью выбора самого близкого к точке из пяти кандидатов. Отметим, что этот метод представляет собой обобщение основного метода указа- ния оболочки, описанного в разд. 5.3.2. Кроме того, хотя в основном этот метод предназначен для двумерйого случая, его можно приме- нить также для решения трехмерных задач, когда имеется трехмер- ный локатор или могут быть сделаны разумные допущения отно- сительно постоянного значения г. 9.12.3. Проверка оболочек Другой вопрос при реализации оболочек состоит в том, как фор- мировать и быстро проверять оболочки. Существуют четыре основ- ные возможности. В простейшем случае программист описывает объекты (и сим- волы) для графического пакета, ничего не зная об их оболочках. Графический пакет может запоминать последовательно преобразо- ванные, но неотсеченные НК-примитивы во временном буфере до подключения их к открытому сегменту и попутно вычислять мак- симальные и минимальные значения координат х, у и г для данных примитивов. Эти экстремальные значения определяют прямую обо- лочку для преобразованного объекта. При использовании символов символьный пакет также может «на лету» регистрировать минимумы и максимумы в процессе засылки примитивов в структуру данных для описания символов. Когда символ с помощью процедуры INSERT вставляется в сегмент, символьная система может пере- дать оболочку графическому пакету, преобразующему оболочку и сравнивающему ее положение с положением поля вывода. При отбрасывании оболочки целиком символ игнорируется. Если же оболочка принимается целиком или требуется отсечение, прими- тивы преобразуются (но пока не подвергаются отсечению) и вычис- ленные минимумы и максимумы для оболочки сегмента корректиру- ются с учетом преобразованной оболочки символа. После закрытия сегмента производится проверка оболочки и буфер либо освобождается (сегмент отбрасывается целиком), либо подключается как сегмент (принимается целиком), либо, наконец, подвергается отсечению в координатах устройства (физических или нормированных) и используется для формирования сегмента. За счет некоторой дополнительной затраты памяти и ненужного пре- образования невидимых примитивов этот алгоритм позволяет из- бежать начального отсечения всех объектов и символьных прими-
Моделирование и иерархия объектов 77 тивов в координатах прототипа (как делается в «лучшем» алгоритме для адаптивного отсечения), хотя такое отсечение в основном состоя- ло бы из тривиальных принятий и отбрасываний. Мы предлагаем читателю в качестве упражнения решить вопрос о том, для каких случаев лучше использовать ту или другую стратегию. Во втором случае мы предполагаем, что в момент компиляции программисту известна оболочка ранее определенных объектов. Эта информация может быть передана графической системе, чтобы последняя могла определить порядок дальнейших действий. В третьем случае прикладная программа или моделирующая сис- тема может вычислять оболочки в ходе выполнения задачи для ди- намически заданных объектов, а затем передавать эту инфор- мацию графическому пакету. Например, иерархическая струк- тура данных, показанная на рис. 9.10, может быть дополне- на блоком оболочки, который становится первым блоком в связанном списке для каждого узла в иерархии (рис. 9.29). Как информация об оболочке передается графическому пакету, и какова реакция на результат проверки оболочки? Для того чтобы символьная система, программист или прикладная программа (или моделирующая система) могли передать оболочку графическому пакету, требуется ввести новое средство. Функции для проверки оболочки EXTENT _TEST _2 и EXTENT_TEST_3 в качестве аргументов имеют экстремальные значения координат соответ- ственно для двумерных и трехмерных оболочек. Они выдают одно из трех значений (принять, отбросить, отсечь) в зависимости от результата проверки передаваемой оболочки — ее сравнения с дву- мерным полем вывода или трехмерным видовым объемом после пре- образования оболочки с помощью МТП. Результат проверки затем можно обработать, используя трехвариантный оператор case. При значении отбросить ни один примитив из данного узла не пе- редается графическому пакету, т. е. не вызывается описание сим- вола или процедура описания объекта в процедурной иерархии, а также не осуществляется доступ к узлу структуры данных. При значении отсечь не требуется выполнять какие-либо специальные действия, и объект или символ обрабатываются, как описано выше. При значении принять возможны различные варианты действий, описываемые ниже. В простом случае отсечение можно явным образом устранить в пакете для данного объекта или символа с помощью нового обра- щения—к процедуре СЫР(да!нет).Эт:у возможность целесообразно использовать также в тех приложениях, для которых заранее извест-
78 Глава 9 но, что никогда не потребуется выполнять отсечение, поскольку всегда будет видна вся мировая координатная система (например, если для дисплейного процессора с 16-битовым словом используется мировая система координат с 16-битовыми координатами). Подав- ление отсечения повышает эффективность выполнения последова- тельности операций и позволяет все раздельно выполняемые моде- лирующие и видовые операции свести к умножению на одну объе- диненную матрицу! В более сложных случаях программист (или моделирующая си- стема) не должен явно включать и выключать отсечение, а сам па- кет должен запоминать оболочку и результаты ее проверки, чтобы различать элементарные случаи — принятие целиком и отбрасыва- ние целиком. Это было бы прекрасно, однако возникает новый во- прос: как долго остается в силе проверка оболочки? Объекты и сег- менты не обязательно связаны друг с другом, поэтому области действия оболочки и сегмента не влияют друг на друга (они «орто- гональны»), Это означает, что оболочки могут оставаться в силе, пока не будут заменены новыми оболочками, или что их область действия определяется блочной структурой с явными скобками начала и конца оболочек BEGIN-EXTENT, END-EXTENT. В любом случае, что произойдет, если произвести изменение видо- вых параметров внутри области действия оболочки? Должен ли пакет сообщить об ошибке, или же он должен автоматически вы- полнить новое сравнение последней запомненной оболочки с новым полем вывода (или новым видовым объемом), а затем продолжать нормальную обработку? Если устранить необходимость явного уп- равления отсечением, то пакет чрезмерно усложняется. По-види- мому, предпочтительным решением является отсечение, которым уп- равляет программист. Четвертый способ проверки оболочек противоположен описанно- му выше и, к сожалению, наиболее распространен: пакет вообще не имеет средств для работы с оболочками, и все действия с ними вы- полняются прикладной программой. Следовательно, прикладная программа сама должна’производить проверку на пересечение при условии, что она либо запомнила параметры видовой операции, либо же может запросить их у пакета. В двумерном случае такое дублирование работы может оказаться целесообразным, однако дублирование гораздо более сложной последовательности видовых операций и отсечения для трехмерного случая в прикладной про- грамме вообще не имеет смысла. Отсюда можно сделать вывод, что во всех приложениях, где используется логическая группировка (т. е. где есть один и более уровней иерархии), графический пакет должен иметь возможность проверять оболочки с помощью своего механизма отсечения, а затем явно передавать управление отсече- нием в пакете прикладной программе, чтобы последняя могла ис- пользовать результаты проверки.
Моделирование и иерархия объектов 79 9.12.4. Другие применения оболочек Оболочки были реализованы микропрограммно в высокопроиз- водительном векторном ДП графической системы Брауновского университета (BUGS) [473]. Это позволило не только ускорить от- сечение, но также отбрасывать объекты, размеры которых слишком малы (эти объекты нельзя увидеть на экране), и, кроме того, изме- нять представление объекта в зависимости от размеров оболочки на экране. Первая функция оболочек в системе BUGS, называемая отбрасыванием малых элементов, описана также в работе [476] и служит трем целям: во-первых, помогает освободить экран от из- лишней информации; во-вторых, освобождает ДП от обработки та- ких объектов и, следовательно, экономит пространство в буфере и время работы ДП и ДК (дисплейного контроллера); в-третьих, предотвращает прожигание люминофора при постоянном повторном перемещении электронного луча по малой области экрана. Вторая функция оболочек в системе BUGS состоит в том, чтобы обеспечить возможность управления уровнем детализации изобра- жения или подавления выдачи части графической информации при интерпретации графической структуры данных. Например, в одном учебном применении каждый объект в дереве (представляю- щем микропроцессорную систему, внутренняя работа которой мо- делируется и представляется в динамике) имеет три возможных представления (рис. 1.4) [208]. Чип ЦП является узлом в иерар- хии и представляется: 1) в виде прямоугольника с надписью при самом мелком плане; 2) в виде прямоугольника с несколькими внут- ренними регистрами и каналами ввода-вывода при среднем плане; 3) в виде прямоугольника, на котором изображены все доступные программисту регистры, флаги и каналы при самом крупном плане (т. е. при самой высокой степени детализации). Каждое из этих трех представлений имеет одну и ту же оболочку в координатной системе объекта, но в структуре данных хранятся разные критерии для размеров. Эти размеры представляют собой смежные, непересе- кающиеся поддиапазоны из диапазона размеров (0—1) в НК-про- странстве. Три альтернативных представления вызываются по- очередно с использованием условного оператора, который сравнивает размеры преобразованной оболочки с хранящимся в памяти диапа- зоном для каждого из указанных представлений (фактически размер представляется как длина диагонали окружающей прямой оболоч- ки). Если размер оболочки лежит в диапазоне одного из представле- ний, данная оболочка подвергается нормальной обработке; в про- тивном случае это представление отбрасывается. Осуществляемые таким образом плавные изменения плана позволяют не только по- лучать увеличивающиеся или уменьшающиеся изображения объек- тов, но также обеспечивать вывод дополнительных деталей для двух дискретных вариантов плана, когда можно обеспечить удов- летворительную визуализацию деталей на соответствующем уровне.
80 Глава 9 9.12.5. Оболочки для отладки Для проверки оболочки программист может вызвать графический пакет, который выполняет проверку на пересечение преобразован- ной оболочки с полем вывода или видовым объемом. Таким образом, оболочка представляет собой утверждение относительно размеров связанного с ней объекта, причем это утверждение может быть пра- вильным или неправильным. Что же произойдет, если программист допустит ошибку? Ошибка обнаружится в виде неправильных изоб- ражений, на которых информация появляется там, где ее не должно быть, и отсутствует там, где должна быть. Если прикладной програм- мист знает, чего можно ожидать, то получит достаточную инфор- мацию в качестве обратной связи для обнаружения и исправления ошибки. Однако более надежный способ состоит в том, чтобы доба- вить к графическому пакету средства отладки, позволяющие пере- давать код. Последний покажет, не отсекались ли какие-либо при- митивы, которые надлежало принять или отбросить целиком. Это можно осуществить, передавая предполагаемую оболочку в пакет при разрешенном отсечении и пропуская все примитивы объекта через пакет; затем можно выставить флаг, доступный прикладной программе и показывающий, действительно ли было произведено отсечение каких-либо примитивов. Флаг можно опрашивать после каждого примитива (или после выполнения всего задания при более приближенной, но не такой дорогостоящей проверке). Эта отладоч- ная функция аналогична проверке индексов массива, поскольку выполняется однократно (во всяком случае, для статических дан- ных), а при выполнении задания по отлаженной информации может быть подавлена для увеличения эффективности. 9.13. ОБЪЕКТНЫЕ ОКНА И ПРЯМОУГОЛЬНИКИ экземпляров В предыдущих разделах было показано, что в канале моделиро- вания и видовых преобразований выполняются две основные опе- рации — отсечение (на основании различных критериев) и преобра- зование координат с использованием однородного преобразования. Если не при фактической реализации, то хотя бы по замыслу мы осуществляли преобразование из локальной системы координат прототипа объекта в мировую координатную систему, отсечение и, наконец, преобразование в физические координаты устройства вывода. Чтобы избежать преобразования невидимых примитивов, рекомендовалось, когда это возможно, осуществлять отсечение выре- зом в координатах прототипа объекта (для повышения эффектив- ности). Было показано, что такая стратегия эквивалентна получе- нию экземпляра объекта в целом с последующим отсечением его отдельных примитивов в мировой координатной системе. Есть ли
Моделирование и иерархия объектов 81 КоорЭинатное пространство прототипа объекта L КоорЭинатное пространство прототипа объекта Рис. 9.30. Отсечение в объектных координатах. 3n, = O6Ot » ЭП,, ЭП2=О6О2 » ЭП2 (ОбО — объектное окно) какой-либо смысл в том, чтобы получать экземпляры частей объек- тов, т. е. выполнять отсечение объектным окном в координатах про- тотипа, а затем применять к такой части преобразование в прямо- угольник экземпляра в прототипе вышележащего уровня (рис. 9.30)? Разрешение отсечения объектов на всех уровнях аналогично фор- мированию «коллажа» из частей объектов, но при этом все равно допускается использование окна или поля вывода для последнего отсечения при получении конечного результата. (Такой способ, бесспорно, может быть полезен при построении двумерных объек- тов, похожих на настоящие коллажи, однако его целесообразность для трехмерных объектов, по-видимому, весьма ограниченна.) Подобно тому как окно отображается на поле вывода, и при этом необходимы только два из трех параметров (окно, поле вывода и отображение окна на поле вывода) для определения третьего, объект- ное окно отображается на прямоугольник экземпляра через эк- земплярное преобразование. Таким образом, программист или интерактивный пользователь может легко задать экземплярное преобразование путем задания объектного окна и прямоугольника экземпляра (т. е. следует определить, что и куда следует отобра- зить). Поэтому экземплярное преобразование становится полностью аналогичным преобразованию окна на поле вывода. В работе [298] отмечается, что разрешение отсечения и преобра- зования на всех уровнях иерархии обеспечивает единообразную трактовку отсечения на любом уровне (представляющего некоторое ограничение области отображения) и экземплярных и видовых пре- образований (представляющих собственно отображения). Отобра- жение окна на поле вывода просто является высшим уровнем так называемого графического преобразования П, представляющего со-
82 Глава 9 Объект, Объект 2 Объект^ 0бпкт4 (корень) НК-пространство Рис. 9.31. Объединение области отсечения (заштрихована) для объектах на раз- ных уровнях. бой упорядоченную пару (Г, ОГ). Здесь Г — геометрическое отоб- ражение, а ОГ — ограничение области. Полное отображение окна на поле вывода, включая отсечение, приобретает вид (0->ПВ, О), где первым элементом является отображение, а вторым — область окна. Аналогично этому включение экземпляра подобъекта i, подвергнутого отсечению, в подобъект вышележащего уровня i+l имеет вид (ЭП/>/+1, ОбОг), где ЭПЛ (+1 — экземплярное преобразование с уровня i на уровень i+1 (при условии, что концевой объект находится на нулевом уров- не), а 060,— объектное окно, т. е. ограничение области в системе координат прототипа для объекта I. Эти графические преобразования обладают одним полезным свойством: их можно объединить, объединяя все геометрические преобразования во всех областях. В результате получается одно объединенное геометрическое преобразование Гоб. Кроме того, можно осуществить отсечение в координатах прототипа для объеди- ненной области ОБоб, используя общий подход к полученным выше результатам. В целом это позволяет избежать примитивной после- довательности действий типа «произвести отсечение объектным ок- ном, преобразовать объект, подвергнутый отсечению, произвести отсечение объектным окном на следующем уровне, преобразовать, отсечь» и т. д. В итоге получается объединенное графическое пре- образование: П0б=(Г0Й, ОГоб). На рис. 9.31 показано, каким образом производится объедине- ние областей отсечения. Объединенная область подобъекта инициа- лизируется объектным окном в системе координат прототипа по- добъекта. Затем она преобразуется в экземплярный подобъект (т. е. в прямоугольник экземпляра), где пересекается с объектным окном, обычно образуя при этом выпуклый многоугольник. (При работе с трехмерными объектами результатом объединения являет- ся выпуклый многогранник, который труднее представить в гра- фическом виде и с которым сложнее работать.) Объединенная об-
Моделирование и иерархия объектов 83 к Прямо-\ \\ угольник\ ^3' экземпляра'! ’ Система координат Прототипа объекта Отсечение в координатах 1» прототипа объектным у окном с Объектное окно t+1 < /Объект /V после / ^отсече- ния окном t+1 Объект после отсечения 6 координатах прототипа Преобразование 2) ______. Отсечение В координатах прототипа объектным окном с+1 Рис. 9.32. Последовательность действий «отсечение — поворот—отсечение». Результат был бы тот же, если отсечение повернутого объекта произвели треуголь- ной областью ЭПг ПОбОг + 1. ласть преобразуется с помощью экземплярного преобразования на следующем уровне, где она вновь пересекается с объектным окном (при этом используется алгоритм отсечения многоугольника, при- веденный в гл. 12) и т. д. Используя символику высокого уровня, мы можем записать это следующим образом: ОГг=(ОГ1_1)*(ЭП,_1,,) ПОбОг, т. е. область уровня i образуется экземплярным преобразованием всех точек области уровня i—1 и пересечением преобразованной области с объектным окном уровня I. Когда, наконец, производится последнее пересечение с полем вывода, преобразованные координаты прототипа можно отсекать с помощью того же алгоритма отсечения многоугольником. Чтобы избежать отсечения многоугольником, не надо использовать по- ворот или сдвиг или следует применить простой алгоритм: отсече- ние прямым объектным окном, преобразование, отсечение и т. д. (рис. 9.32). Другое возможное решение состоит в том, чтобы произ- водить отсечение в координатах прототипа (чтобы не преобразовы-
84 Глава 9 вать невидимые примитивы). Это возможно благодаря объединению областей отсечения от поля вывода вниз к объектному окну в систе- ме координат прототипа объекта. При этом объединенная область на уровне i является образом объединенной области вышележа- щего уровня, подвергнутой экземплярному преобразованию и пе- ресеченной объектным окном: ОГ, = (ОГг+1*ЭП^+1) пОбОр Разумеется, такая стратегия непригодна для трехмерных задач, за исключением случая параллельных некосоугольных проекций. На рис. 9.33 приведены простые случаи пересечения прямоуголь- ника экземпляра i—1 с объектным окном I. Обычно если пересе- чение всегда пусто, то ни один объект не требует преобразования и отсечения (как в случае использования оболочек). Если преобразо- ванная объединенная область полностью попадает в объектное окно, это не означает, что ее можно принять целиком, как в случае оболочек; необходимо выполнить преобразование и отсечение, по- скольку новая составная область также является областью отсе- чения. Таким образом, оболочки являются менее мощным средством, чем объектные окна, поскольку позволяют выполнять отсечение только на корневом уровне, однако на практике они более пригодны благодаря увеличению эффективности при отсечении за счет отбра- сываний целиком. Оболочки, объектные окна и адаптивное отсе- чение можно объединить, что позволяет создать сложный, но зато мощный и эффективный алгоритм прохождения иерархии (упраж- нение 9.18). Интересным вариантом понятия произвольных отсекающих областей на любом уровне иерархии является экранирование (иногда называемое также бланкированием). Экранированной счи- тается такая область, в которой запрещено появление новой ин- формации (чтобы сохранить то, что уже есть в этой области). Таким образом, производится обратное отсечение: принимаются только примитивы,'находящиеся вне области отсечения, а примитивы, пе- ресекающиеся с ее границей, отсекаются так, что сохраняется их часть вне области. Этот метод используется при формировании ком- мерческих и производственных графиков и при размещении текста на странице; он позволяет, например, избежать повторного вывода текста или рисунков на одном месте, а также создавать интересные визуальные эффекты. Обычно экранирование выполняется в момент, когда осуществляется отображение окна на поле вывода, непосред- ственно до формирования сегмента в системе координат устройства вывода. Типичным случаем использования этой возможности являет- ся наложение надписи на карту или на чертеж. Поля вывода карты и надписи взаимно перекрываются, однако, поскольку поле вы- вода надписи дополнительно определено как экранируемая область, оно будет защищено. В растровой графике при использовании би-
Моделирование и иерархия объектов 85 В)ОбО£ПОГ^О, ЭП23 поворот, повернутое окно 060(1-1 е)05О; Л 0Г; =4), т.е ОГ(,| = 0, СлеЭовотельно, отбросить объект Рис. 9.33. Объединение окон. Снизу вверх: новая объединенная область равна пересечению старой преобразованной области и ОбО; + 1, т. е. ограничение 0Г,- + 1= =(ОГ,--ЭП)ПОбО/+1; сверху вниз: новая составная область есть пересечение ста- рой области с 060/, т. е. ОГ;=(ОГ;+1>ЭП~1)ПО6О/.
86 Глава 9 тобой карты экранирование может быть реализовано с использова- нием приоритетов (разд. 11.9). Наконец, концепция рабочей станции, принятая в GKS [236], позволяет произвести вторую комбинированную операцию отсе- чение — преобразование после видовой операции (в НК-простран- стве). Это можно представить как получение снимка «доски сооб- щений» в НК-пространстве с последующим «вывешиванием» (через преобразование рабочей станции) на физическое устройство вывода. Две области отсечения в мировых координатах и в НК-пространстве могут быть объединены, чтобы отсечение производилось прямо- угольником, полученным при их пересечении в НК- или ФК-про- странстве. 9.14. ЗАКЛЮЧЕНИЕ В данной главе рассмотрены различные средства для представ- ления логического разбиения объектов на их составные части. Крат- ко описаны возможные промежуточные решения между различными представлениями модели в диапазоне от структуры данных до иерархии процедур. Как и следовало ожидать, практически суще- ствуют самые разные сочетания аппаратуры и программного обе- спечения; реализуются многообразные иерархические представле- ния — от полной прикладной модели до символьной системы спе- циального назначения для достижения оптимального соотношения между затратами и эксплуатационными характеристиками. По- казано, что графические структуры данных или структурированные дисплейные файлы (не зависящие от конкретного применения) обеспечивают максимальную гибкость при изменениях изображения в ходе выполнения задачи, в особенности если они сочетаются с сег- ментированными линейными дисплейными файлами для регенерации. Понятие о матрице текущего преобразования (МТП) и ее ис- пользование при прохождении иерархии сверху вниз составляют основу моделирующей системы. Если задана обычная иерархическая структура данных или структура процедур (в том числе сим- вольная), алгоритм прохождения, как оказалось, должен представ- лять собой простой итеративный или рекурсивный алгоритм, объе- диняющий экземплярные преобразования в МТП путем использо- вания стека. Затем, рассматривая различные стратегии для опре- деления оптимальной последовательности отсечения и операций геометрического преобразования, мы убедились в том, что много- численные отдельные моделирующие и видовые операции могут быть сведены к одному отсечению и к одной матрице преобразова- ния для двумерной задачи или же к одному отсечению и двум пре- образованиям для трехмерной задачи. Наконец, чтобы ускорить проверку полных объектов на принятие или отбрасывание целиком, использовались оболочки, позволяющие существенно сократить
Моделирование и иерархия объектов 87 ненужную обработку подобъектов: при принятии целиком можно избежать отсечения подобъектов и примитивов, а при отбрасыва- нии целиком можно устранить прохождение иерархии, преобра- зование и всю последовательность действий для выполнения ви- довых операций над компонентами объекта. УПРАЖНЕНИЯ 9.1. Рассмотрите моделирование и имитацию в какой-либо прикладной обла- сти и постарайтесь охарактеризовать модель в понятиях, необходимых для ее формального описания (например, системы линейных уравнений с изменяемыми коэффициентами, с входными и выходными переменными, принятыми вами). 9.2. Постройте схему дерева или иерархии объектов в прикладной области, а затем опишите на псевдокоде структуру данных (и связанные с ней процедуры), задающую прикладную модель. Постарайтесь добиться соответствия между прикладной программой в целом для обработки этой иерархии и концептуальной моделью, показанной на рис. 9.1, и укажите области расхождения, если они есть. 9.3. Рассмотрите вопрос о том, каким образом ассоциативность операции умножения матриц обеспечивает возможность как построения «снизу вверх», так и прохождения «сверху вниз» иерархий прототипов и экземпляров объектов с целью их вывода в графическом виде. Покажите, каким образом экземплярные преобразования могут рассматриваться как изменение систем координат. Приве- дите пример целесообразности выполнения геометрических преобразований раз- мещения типа «прототип — прототип» на любом уровне иерархии до выполнения экземплярного преобразования. 9.4. Реализуйте двумерный или трехмерный пакет для работы с МТП, пред- назначенный для подключения к ПГП. Предусмотрите использование «обхода». 9.5. Реализуйте процедуру прохождения структуры данных для двухуровне- вой структуры связного списка, показанной на рис. 9.9. 9.6. Прочтите статью Сазерленда о системе Sketchpad [446] и сопоставьте эту реализацию с той, которая представлена в данной главе. Каким образом можно добавить к нашему программному обеспечению предложенные им «отношения чертежных ограничений» между примитивами (например, линии параллельны, имеют одинаковую длину, расположены под одним углом и т. д.)? Ответьте, на- пример, на вопрос, должны ли они относиться полностью к прикладной программе (быть реализованы в структуре данных) или же могут находиться в ПГП (или толь- ко в ПГП)? Рассмотрите достоинства различных методов для кодирования иерар- хии с точки зрения простоты кодирования и обработки ограничений. 9.7. Какими средствами должен обладать ДП общего назначения, для того, чтобы обеспечить возможность обработки достаточно гибкой графической струк- туры данных? 9.8. Для прикладной области, с которой вы хорошо знакомы и которая вклю- чает более одного уровня иерархии, постарайтесь ответить на вопрос, какой вид кодирования (дисплейная процедура, процедура прикладной программы, символ, графическая структура данных, структурированный дисплейный файл и т. д.) является наиболее целесообразным с точки зрения обработки. Учтите при этом компромиссы между затратами памяти и времени, гибкость структуры, быстроту реакции при редактировании, время связывания и т. д. Напишите прикладную программу на псевдокоде, помия о том, что разработку надо производить с учетом требований, определяемых на уровне взаимодействия с пользователем. 9.9. Разработайте расширение для ПГП, которое позволило бы редактиро- вать сегменты а) по группам или б) по примитивам для ДП, описанного в гл. 3. Рассмотрите форму обращений и реализацию процедур (по крайней мере на уров- не псевдокода). 9.10. Покажите, каким образом реализовать в ПГП блочно-структурирован- ные имена групп типа использованных в GPGS.
88 Глава 9 9.11. Если в вашем распоряжении имеется реляционная база данных, напи- шите простую прикладную программу (например, программу, позволяющую чер- тить произвольные комбинации треугольников и квадратов), которая использует базу данных для хранения информации о модели. 9.12. Покажите, как логично и целесообразно отобразить обработку атри- бутов в используемом вами ДП средствами ПГП (не обязательно теми, которые приняты в системе Core). 9.13. Сделайте количественные оценки для принятия компромиссных реше- ний при отсечении в координатах прототипа, мировых координатах и экранных координатах в прикладной программе для вывода блок-схем. Примите разумные допущения относительно числа примитивов, объектов высоких уровней и т. д. и получите некоторые оценки времени прохождения задачи для типичных ситуа- ций при работе пользователя. 9.14. Какая стратегия отсечения является оптимальной для двумерной прик- ладной задачи при прямых окнах и полях вывода? 9.15. Напишите простой алгоритм формирования и отсечения для прямых оболочек. 9.16. Разработайте алгоритм отсечения, в котором оболочки, отличные от прямых, использовались бы непосредственно а) для двумерных задач и б) для трехмерных задач. 9.17. Сопоставьте трехмерный алгоритм в упражнении 9.16 б) с алгоритмом, который реализует окружающую прямую оболочку и приведен ниже (алгоритм разработан Дж. Мичнером). Пусть A=(alt а2, аз) и B={blt b2, b3) обозначают два любых противоположных угла оболочки в системе координат прототипа объекта. Пусть Рп Р = Р21 _Рз1 Pit Pit Р32 Р13 Раз Рзз. есть экземплярное преобразование поворота, сдвига и масштабирования (линей- ного), отображающее систему координат прототипа на мировую систему коор- динат (с переносом по модулю). А-P и В-Р — два из восьми углов преобразованной локальной оболочки. Максимальные и минимальные координаты х, у и г среди углов преобразованной локальной оболочки определяют прямую окружающую оболочку. Следующий ал- горитм на псевдокоде определяет минимум и максимум, представляющие собой противоположные углы прямой оболочки: min := max := Л-Р; for i :=1 to 3 by 1 do for / := 1 to 3 by 1 do begin (B[i] — A[f]).P[i, /]; if temp > 0 then max[/'j = max[j]-\-temp else := min[j]A~ temp end {плюс любой сдвиг} В алгоритме используется только девять сравнений и девять умножений (такое же количество умножений требуется для В-Р). Алгоритм не зависит от условия a,-<bj, поэтому А и В могут быть любыми противоположными углами. Этот алгоритм напоминает симплекс-метод в линейном программировании и имеет шесть целевых функций (минимумы и максимумы х, у и г). 9.18. а) Напишите на псевдокоде универсальную процедуру для прохожде ния двумерной иерархии, которая обрабатывает атрибуты и использует оболочки для адаптивного отсечения. б) Добавьте возможность работы с объектным окном. в) Как определить, содержит ли МТП поворот и сдвиг?
Моделирование и иерархия объектов 89 г) Каким образом добавить экранирование? 9.19. Перепишите пример 9.4а на стандартном Паскале. 9.20. Реализуйте n-уровневое отображение корреляции, рассмотренное в разд. 9.7. Можно ли отказаться от «ссылок вверх» путем накопления информации о «пройденном маршруте» при корреляционном поиске? 9.21. Для реализации выреза в дисплейных процедурах можно включить либо атрибут оболочки в описание процедуры, либо оператор оболочки в тело процедуры. В последнем случае он может иметь аргументы, которые являются функциями параметров, передаваемых дисплейной процедуре для определения размеров, ориентации и положения оболочки. Покажите, каким образом можно реализовать это средство (например в виде символической программы на Паскале), которое должно сочетаться с графическим пакетом, имеющим механизм проверки оболочки. 9.22. Рассмотрите еще один полезный для корреляции механизм отбрасыва- ния целиком, основанный на сравнении с позицией локатора (х, у). Разделим ок- но, например, на матрицу клеток размером 4X4. Для каждого концевого узла или узла подобъекта можно сформировать в 16-разрядном слове код-клетки, указывающий, какие клетки занимает подобъект. (Код-клетки представляет собой расширение четырехбитового кода «вне — внутри»). Затем берется код- клетки для обратноотображенной точки локатора в мировом координатном прост- ранстве и выполняется логическая операция И со словами код-клетки каждого концевого узла и каждого подобъекта для быстрого отбрасывания целиком. Покажите, как этот алгоритм можно сочетать с проверкой оболочек? Когда следует производить проверку клетки: до или после проверки оболочки? 9.23. Рассмотрите достоинства и недостатки использования в машинной гра- фике символьной и «структурной» систем, с одной стороны, и воображаемой фото- камеры — с другой (во втором случае моделирование возлагается полностью на прикладного программиста). Каким образом можно лучше всего реализовать и использовать преимущества архитектур с СДФ? Как можно решить вопрос редакти- рования и связывания атрибутов в символьиых/структурных системах? Полезные данные по этим сложным проблемам содержатся в стандартах, выпущенных коми- тетами Национального института стандартизации США (ANSI) и Международной организацией стандартизации (ISO).
Глава 10 Архитектура современных дисплеев ЮЛ. ВВЕДЕНИЕ В гл. 3 описана архитектура простого векторного дисплейного процессора (ДП) с регенерацией изображения. Такая архитектура типична для большого класса относительно недорогих простых ди- сплеев. В гл. 9 мы познакомились в общих чертах с более совер- шенной архитектурой, способной перерабатывать (в реальном вре- мени и без мерцания изображения) дисплейную программу, описы- вающую довольно большое число векторов. Это достигается за счет отделения процесса просмотра иерархии от процесса регенерации изображения. Для регенерации используется либо отдельный буфер, который содержит сегментированный линейный дисплейный файл, представляющий изображение модели после преобразования «ок- но — поле вывода», либо эквивалентное представление изображе- ния в виде битовой карты. В данной главе изучены архитектуры еще нескольких типичных векторных дисплеев с регенерацией изоб- ражения, а в гл. 12 — особенности, свойственные только растро- вым дисплеям. Однако многие рассуждения, касающиеся вектор- ных систем, и модели, используемые ниже для описания этих сис- тем, применимы также к большинству растровых дисплеев, особенно к тем, которые, кроме необходимой для регенерации битовой кар- ты, хранят локальный дисплейный файл и имеют дисплейный процессор для его обработки. Поэтому, если нет специальных ого- ворок, проводимое ниже обсуждение применимо и к векторным и к растровым системам. 10.2. ОСНОВНЫЕ ПОЛОЖЕНИЯ Описанный в гл. 3 поступательный рост возможностей ДП отра- жает действительный прогресс в проектировании архитектуры ДП, который четко прослеживается при изучении истории развития ком- мерческих и экспериментальных дисплейных систем. Тенденцию стремлений пользователя получить больше функциональных воз- можностей и/или увеличить производительность системы, потратив «немного больше денег» на аппаратуру, хорошо описали Майер и Сазерленд [333]. Для характеристики процесса последовательного увеличения арифметических и логических возможностей дисплей-
Архитектура современных дисплеев 91 ной системы путем введения в ДП дополнительных регистров и команд они использовали термин спираль обновлений. Виток спи- рали завер пается превращением ДП в полностью сформировавший- ся центральный процессор (ЦП). От такого ЦП-подобного ДП затем отпочковывается его собственный рудиментарный ДП, давая начало новому циклу роста. Майер и Сазерленд изучили популярные в то время дисплейные системы и охарактеризовали их числом полных витков спирали, пройденных проектировщиками. Они предложили также несколько правил для выбора точек остановки в витке этой спирали. Целью усложнения ДП является повышение его производитель- ности за счет дополнительных аппаратных средств; например, мож- но усложнить структуру дисплейного файла и предоставить более мощные дисплейные команды, можно увеличить число показывае- мых без мерцания примитивов. Особенно важной является возмож- ность передачи в дисплейный процессор некоторых рутинных задач, отнимающих у ЦП много времени и ухудшающих тем самым время реакции системы на запросы пользователя. Спираль обновлений в проектировании дисплейного процессора аналогична тенденции к разгрузке больших ЭВМ (и даже мини-ЭВМ) путем наделения «интеллектом» контроллеров ввода-вывода (благодаря этому конт- роллеры становятся более «умными» и независимыми от ЦП). При- мерами могут служить каналы ввода-вывода в машинах фирмы IBM, которые являются по существу специализированными программиру- емыми процессорами, обладающими такой же производительностью, как и ЦП, и периферийные процессоры в машинах фирмы CDC, являющиеся фактически мини-ЭВМ. В контроллеры магнитных ди- сков часто встраиваются микропроцессоры, способные брать на себя всю обработку разнообразных возможностей и ситуаций, свойст- венных операциям обмена с магнитными дисками. В наступающую эпоху дешевой логики и дешевой памяти тенденция к децентрали- зации вычислительной мощности и созданию на базе микропроцес- соров интеллектуальных терминалов будет усиливаться. (Изгото- вители вычислительной техники называют интеллектуальным любое устройство, содержащее (микро)процессор, независимо от того, считает ли пользователь его интеллектуальным или нет.) Архитек- тура графических систем пригодна для такой функциональной спе- циализации в первую очередь потому, что выигрыш в производитель- ности оказывается ощутимым для пользователя, а также потому, что задачи, которые необходимо решать, хорошо определены и явля- ются повторяющимися. Предположим, что создались идеальные условия, когда логика и память ничего не стоят; какие задачи следует реализовать с по- мощью специализированной аппаратуры, а какие — программами, выполняемыми на универсальной аппаратуре? Поскольку интерак- тивная графика особенно чувствительна к производительности вы- числителя, для аппаратной реализации было бы естественным выб-
92 Глава 10 рать преобразования данных, выполняемые во время вывода и ввода (от модели к изображению и от действий пользователя к мо- дификации модели), при условии, что имеется возможность еде лать некоторый выбор, касающийся структуры модели, процесса диалога и т. д. В сущности нам хотелось бы добиться максимальной производительности, реализовав на доступной аппаратуре стандарт- ные алгоритмы каналов вывода и ввода. В этом случае появилась бы возможность совместить показ устойчивого, не мерцающего изоб- ражения с динамической модификацией прикладной модели и пара- метров видовой операции, т. е. сочетать лучшие свойства дисплеев с запоминанием изображения и динамическую, выборочную моди- фикацию изображения. Подобная модификация достигалась бы, как в гл. 9 , повторной обработкой модели в канале вывода при каж- дом изменении пользователем модели и параметров видовой опера- ции. В идеальном случае видовая операция (особенно для растро- вых дисплеев) должна обеспечивать не только получение стандарт- ных геометрических проекций (гл. 8), но также и удаление скрытых линий или поверхностей, вычисление яркости и уровня тона и дру- гие формы обработки, необходимые для создания реалистических изображений (гл. 14—16). Однако в настоящее время только очень дорогие системы ма- шинной генерации изображений, которые входят в состав вычисли- тельных комплексов, предназначенных для моделирования само- летов и кораблей, можно отнести к идеальным системам. Причина состоит в том, что алгоритмы получения реалистических изобра- жений чрезвычайно сложны с вычислительной точки зрения. Это особенно относится к алгоритмам удаления скрытых поверхностей (гл. 15) и к алгоритмам, реализующим модели закраски и освеще- ния (гл. 16). Поэтому в. данной главе мы ограничимся обсуждением архитектуры ДП, способного в реальном времени просматривать модель и генерировать «каркасные» изображения двумерных и трехмерных объектов, и не будем рассматривать алгоритмы уда- ления скрытых поверхностей и алгоритмы создания других визу- альных эффектов, повышающих реалистичность изображения. Ап- паратура, необходимая для выполнения модельных и видовых пре- образований «каркасных» объектов, вполне доступна массовому потребителю. Вообще говоря, проектирование существующих интерактивных систем шло снизу (от аппаратуры, позволяющей удовлетворить тре- бованиям на производительность при соблюдении разумного соот- ношения стоимости и эффективности). Более общим является про- ектирование сверху вниз (начиная с программного обеспечения), при котором на первый план выдвигаются требования пользователя. Правильное применение принципа «сверху вниз» потребовало бы учета не только производительности и соотношения стоимости и эффективности, но также и программируемости получающейся сис- темы и ее расширяемости. Повышенное внимание к аппаратуре объя-
Архитектура современных дисплеев 93 сняется традиционной оценкой производительности числом эле- ментов, которые можно обработать в течение одного цикла регене- рации с сохранением устойчивого, немерцающего изображения. Другой причиной было отсутствие стандартов на программное обе- спечение в области машинной графики. Можно надеяться, что с по- явлением первых стандартов, подобных системе Core (например, стандарт GKS, опубликованный Международной организацией по стандартизации [236]), будет наблюдаться большая стандартиза- ция на уровне архитектуры, необходимая для поддержки системы Core и других пакетов высокого уровня (таких, как обсуждавшийся в гл. 9 пакет для иерархического моделирования). Действительно, изготовители дисплейных систем уже реализуют в микропрограм- мах или даже в аппаратуре многие из возможностей системы Core, чтобы предоставить графической программе в основной машине зы- сокопроизводительный интерфейс высокого уровня. В этом случае основная машина освобождается от значительного объема вычис- лений, связанных, в частности, с работой канала графического вы- вода. Таким образом, архитектура и аппаратная реализация коммер- ческих систем являются результатом многих компромиссов между скоростью, гибкостью и стоимостью. Эти компромиссы зависят от принятой изготовителем идеологии проектирования и значимости проектируемой системы. Проектировщики должны решить, будет ли их дисплей векторным с регенерацией изображения, растровым с регенерацией изображения или дисплеем на запоминающей трубке; будет ли он предназначен для рисования только двумерных изображений или и двумерных, и трехмерных; будет ли дисплейная система эксплуатироваться автономно или подключаться как са- теллит к основной машине. Кроме того, необходимо принять реше- ние относительно уровня архитектуры: будет ли архитектура при- митивной, рассчитанной на показ максимального числа простых примитивов вывода, или в нее будут включены средства, обеспе- чивающие выполнение модельных и видовых преобразований, от- сечение и преобразование образов. Вследствие различного назначения дисплейных систем и отсут- ствия об непринятых и осмысленных испытательных программ очень трудно сравнивать производительность любых двух систем. В работе [76] разработан метод моделирования, позволяющий про- вести количественный анализ архитектуры векторных систем, а также установить зависимость их производительности от соответ- ствующей конкретному приложению смеси команд, а также от их архитектурных особенностей. Эта методика с минимальными изме- нениями может быть распространена на растровую графику. Как и при любых оценках производительности ЭВМ, применение данного метода требует глубокого понимания особенностей архитектуры и деталей реализации. Ниже описаны (без названных выше подроб- ностей) некоторые из наиболее типичных современных архитектур
94 Глава 10 и их основные качественные различия в возможностях и произво- дительности. Мы будем использовать метод последовательного добавления новых возможностей, постепенно превращающих простой ДП из гл. 3 в систему, находящуюся на том же уровне, что и система, показанная на рис. 9.11 и способная в рамках цикла регенерации просматривать модель и выполнять всю видовую операцию. (Про- цесс последовательного наращивания мощности дисплея здесь не совсем соответствует ходу реального исторического развития.) Кратко описаны вычислительные комплексы, состоящие из основной машины и машины-сателлита; основное внимание уделено разделе- нию обязанностей между работающей в режиме разделения вре- мени основной ЭВМ и выделенной графической ЭВМ (сателлитом). 10.3. ПРОСТОЙ ДИСПЛЕЙ С РЕГЕНЕРАЦИЕЙ ИЗОБРАЖЕНИЯ В современных коммерческих системах можно найти много ти- пов аппаратных усовершенствований примитивного ДП из гл. 3. Наиболее важными из них являются дополнительные примитивы и атрибуты, более богатый набор устройств ввода и наличие уст- ройства-селектора, более разнообразные средства задания значений координат, возможность организации подпрограмм в дисплейной программе. 10.3.1. Примитивы Обычно вводятся следующие дополнительные примитивы: Аналоговые или цифровые генераторы окружностей и дуг окруж- ностей или более общие генераторы конических сечений; генераторы параметрических кривых (гл. 13). Примитивы построения отрезков, например примитив DRA W_ FR0M(x, у) (рисуй из), рисующий отрезок из заданной точки в те- кущую позицию ДП и оставляющий луч в текущей позиции. Такой примитив позволяет эффективно определять отрезки с общей ко- нечной точкой. Двумерные и трехмерные автоинкрементные векторы, у которых одна или две координаты изменяются с фиксированным шагом, а другие координаты задаются их абсолютными или относительными значениями. С помощью таких векторов удобно рисовать графики и поверхности; при этом экономится память, занимаемая при обыч- ном способе рисования значениями регулярно изменяющихся координат. Примитив рисования ломаной, состоящей из последовательности соединяющихся отрезков (примитив ABS_MOVE (абс. позициони- рование), за которым следует последовательность REL_DRAW
Архитектура современных дисплеев 95 или ABSJDRAW (относ, или абс. рисование)). Многоугольник представляет собой простую замкнутую ломаную или сплошную область в растровых системах. Несоединенные отрезки, эквивалентные последовательности пар ABS_MOVE, REL-DRAW. 10.3.2. Атрибуты В настоящее время существует много различных атрибутов (и соответствующих им команд и регистров ДП). Наиболее типичными являются следующие: Яркость или цвет—регулирование интенсивности луча (лу- чей). Тип линии — управление режимом рисования линии (точками, штрихами или только конечными точками) путем включения и вы- ключения луча в процессе его отклонения отклоняющей системой (в векторных системах) или путем наложения соответствующей ком- бинации значений пэлов на линию в процессе ее развертки в растро- вых системах). Мерцание или другие средства выделения частей изображения. Видимость векторов, литер и других примитивов для светового пера. 10.3.3. Способы адресации данных В отличие от ДП из гл. 3 многие системы позволяют работать с данными, которые задаются непосредственно в командах и с кос- венно адресуемыми данными: Для непосредственно задаваемых значений координат имеются несколько допустимых форматов записи — длинных и коротких («упакованных»). Разнообразие форматов позволяет эффективно определять длинные и короткие векторы (как абсолютные, так и отно- сительные). Аналогично при адресации координат, задаваемых в одном или нескольких форматах различной длины, можно использовать один или несколько уровней косвенности. Преимущества адресуемых данных состоят в том, что одни и те же данные могут использоваться в нескольких командах и легко изменяться прикладной программой. Для иллюстрации этого рассмотрим построение отрезков на рис. 10.1. Предположим, что прикладная программа, генерирующая этот рисунок, требует, чтобы отрезки встретились в точке А независимо от того, где она находится. Это свойство должно сохраняться при изменениях местоположения точки А. ДП, допускающий только непосредственно задаваемые операнды (и не имеющий примитива M.OVE/DRAW_FROM.'), потребует, чтобы координаты точки А два раза встретились в дисплейной программе: один раз для отрезка ВА и один раз для отрезков DA и АС. Смещение точки А потребует
96 Глава 10 Комментарий Команда Данные Отрезок В А: LDXA LDYAM Ув LDXA xa 1 \ LDYAL yA J I Непосредственно задавае- Отрезок DA-. LDXA мо 1 мые данные, которые LDYAM г/о | должны быть изменены LDXA хА 1 при перемещении точки А LDYA Уа J 7 Отрезок АС: LDXA хс LDYAL Ус Рис. 10.2. Дисплейная программа, использующая непосредственное задание значений координат. четырех изменений в дисплейной программе (рис. 10.2). В большин- стве графических пакетов, не позволяющих редактировать сег- менты, такие изменения могут быть осуществлены только удале- нием и повторным созданием сегмента, содержащего эту группу при- митивов вывода. Если же дисплейные команды содержат адреса координат-операн- дов (рис. 10.3), проблема изменения дисплейной программы при перемещении точки А существенно упрощается, поскольку необ- ходимо изменить только соответствующие данные (команды остают- ся теми же). Если дисплейная программа хранится в памяти, сов- местно используемой ДП и основной ЭВМ, выполнить такое изме- нение просто, поскольку адреса хА и уА в дисплейной программе могут указывать на ячейки прикладной структуры данных, содер- жащие хА и уА. Если прикладная программа модифицирует свою структуру данных, присваивая этим переменным новые значения, дисплейная программа модифицируется автоматически и графиче- ский пакет не вызывается. Этот метод пригоден при любом числе ссылок в дисплейной программе на конечную точку. При несколь- ких ссылках, как в приведенном выше примере, требование совпа- дения конечных точек удовлетворяется автоматически. Недостатком такого метода являются дополнительные затраты памяти на хра- нение адресов. Поэтому для изображений, которые изменяются не- часто, предпочтительнее непосредственное задание данных. (В ра- боте [76] дается количественный критерий для перехода к использо-
Архитектура современных дисплеев 97 Рис. 10.3. Дисплейная программа с адресуемыми данными (адреса обозначены стрелками). ванию адресуемых данных.) Графический пакет должен дать про- граммисту возможность указать, где следует воспользоваться адре- сами, а где — непосредственно задаваемыми данными. Для завершения обсуждения этой темы необходимо коснуться еще двух аспектов. Во-первых, как и в случае дисплея с запомина- нием изображения или описываемых ниже высокопроизводительных дисплеев, ДП не обязан непрерывно просматривать прикладную модель. Высокопроизводительные дисплеи имеют структурирован- ный дисплейный файл для модельных преобразований и (сегменти- рованный) линейный дисплейный файл для регенерации. В этом случае прикладная программа должна также запускать в ДП про- цесс просмотра дисплейной программы (т. е. структурированного дисплейного файла) для того, чтобы отобразить сделанные изменения на экране. Во-вторых, настройка адресов в дисплейных командах рисования отрезков, т. е. установление соответствия между адреса- ми и переменными в прикладной программе, должна осуществлять- ся ассемблером во время трансляции, редактором связей перед за- пуском программы или графическим пакетом во время выполнения программы. В некоторых системах используется другой способ работы с ад- ресуемыми данными: в ДП имеются регистры, в которые могут быть помещены значения координат либо устройством ввода, либо программой в основной машине. Регистры могут задаваться в ди- сплейных командах в качестве источников значений координат; такой подход позволяет получить динамическое, выборочное изме- нение картинки. Например, функцию буксировки легко реализо- вать, поместив в начале соответствующего сегмента команду аб- солютного перемещения луча, использующую в качестве операн- дов регистры локатора ДП. Переменные, доступные основной ЭВМ,
98 Глава 10 .АВС .АВС С В .А СВ.А .А В С а и и > эаг и о 6 Рис. 10.4. Ориентация литер и ориентация строк литер (текущая позиция обозна- чена точкой). а — поворот строки литер (0,-90, 180, 90°); б — поворот строки и литер (0, —90, 180, 90°). или регистры устройств ввода, которые могут непосредственно ис- пользоваться ДП в качестве источников значений координат, иног- да называются динамическими переменными. 10.3.4. Средства для работы с текстом Два типичных расширения довольно скромных возможностей ДП из гл. 3 состоят в следующем: Рисование литер более чем одного размера различной ориента- ции (например, горизонтальной и вертикальной) и разного стиля (например, возможен курсив, получающийся наклоном литер); изменение расстояния между литерами. Отметим (рис. 10.4), что ориентация литер и строк литер различаются между собой. «Программируемые пользователем шрифты»: пользователь может определять специальные литеры или целевые шрифты (наборы литер) как некоторые шаблоны, которые записываются в память, используе- мую генератором символов. Таким способом можно экономично генерировать даже простые символы, применяемые в конкретных приложениях (стандартные фигуры, используемые при проектиро- вании электрических цепей, рисовании блок-схем или в приложе- ниях, связанных с управлением процессами). 10.3.5. Подпрограммы в дисплейной программе Средства ДП для организации подпрограмм имеют прямую ана- логию с соответствующими средствами в центральном процессоре — переход на подпрограмму/возврат. В типичных реализациях адрес возврата из подпрограммы сохраняется в стеке. В более сложных дисплеях ДП может сохранять некоторую часть или всю информа- цию о состоянии ДП: регистры ДП и флаги атрибутов и режимов. Каждая подпрограмма ДП описывает некоторый образ и ее можно считать сегментом. Согласно толкованию этого термина в ПГП, в системе Core и в данной книге, сегменты могут содержать только
Архитектура современных дисплеев 99 MAIN; ABS.MOVE (х,, у,) CALL DIODE ABS.MOVE (х2, у2} CALL*DIODE ABS.MOVE (х3, Из) CALL DIODE LINE DIODE; REL.DRAW (Дх,, Ду,) REL.DRAW (Дх2, Ду2) REL.MOVE (Дх,-, Ду,) RETURN Дисплейная программа Рис. 10.5. Фрагмент схемы с тремя диодами, рисуемыми с помощью одной под- программы. Таким же способом можно рисовать сопротивления. примитивы вывода; однако удобно расширить определение сегмен- та, разрешив включать в него, кроме примитивов вывода, обраще- ния к сегментам более низкого уровня. Дисплейные системы, в ко- торых ДП имеет средства для работы с подпрограммами, позволяют создавать такие иерархии сегментов/образов, с помощью которых очень эффективно генерируются рисунки, состоящие из большого числа копий стандартных элементов: вызывающий сегмент содержит для каждого повторяющегося элемента команду абсолютного по- зиционирования луча и за ней команду перехода на подпрограмму, которая рисует образ элемента в относительных координатах (рис. 10.5). (Если имеются средства для преобразований образов,' необходимость в таких «перемещаемых» подпрограмма^ отпадает.) Подпрограммы являются средством создания иерархии образов. При этом возникает сильное желание представлять эту иерархию как иерархию объектов, поскольку образы могут обращаться к дру- гим образам (глубина вложенности ограничена только размерами стека). Однако такое представление некорректно, поскольку ДП- подпрограммы существуют в пространстве изображения, т. е. в пространстве координат устройства, после применения модельных преобразований и полной видовой операции (в том числе и отсече- ния), реализуемых графическим пакетом. Кроме того, отображение объектов в сегменты (или образы) не обязательно является отобра- жением «один в один»; это зависит от спецификаций сегментов и ви- довой операции. Поэтому произвольная иерархия объектов не обя- зательно отображается в соответствующую иерархию образов. Механизм ДП-подпрограмм можно использовать в качестве рудиментарной моделирующей системы для создания иерархии
100 Глава 10 Рис. 10.6. Окно в иерархической модели отображает два экземпляра одного и того же диода-прототипа в два различных сегмента дисплейной программы (четыре отрезка в экземпляре, который полностью попадает в окно, и три отрезка в экземп- ляре, который частично попадает в окно). Поле вывода (1, 1) Нормированные координаты объектов только в том случае, когда систему координат ДП можно трактовать как мировую систему координат, когда единственным преобразованием, выполняемым при получении экземпляра, явля- ется преобразование переноса и когда отсутствует операция отсе- чения по окну. В данном случае на экране одновременно присутству- ет весь существующий «мир», однако может возникнуть эффект свертывания экрана при переносе образа, Генерируемого подпро- граммой, на край экрана. При этих ограничениях можно реализо- вать много простых приложений; однако, когда такие ограничения оказываются слишком сильными и необходимы общие модельные преобразования иерархии объектов, обеспечиваемые графическим пакетом, ДП-подпрограммы, к сожалению, использовать невозмож- но. Такой результат является следствием того, что в общем случае преобразования экземпляров в совокупности с последующей опера- цией отсечения могут порождать различные дисплейные команды для каждого экземпляра объекта-прототипа (рис. 10.6). Отсюда вы- текает невозможность «очевидного» отображения объекта-прототипа на его образ. Использование ДП-подпрограмм для модельных пре- образований возможно только в том случае, когда имеются аппа- ратные средства для выполнения преобразований в мировых коор- динатах (осуществляемых до видовой операции). В этом случае в ДП должен встраиваться уровень структурированного дисплейного файла (разд. 10.5). Отметим также, что, если в ДП нет средств для сохранения и восстановления атрибутов и режимов, отсутствует простой механизм для передачи и переопределения атрибутов в иерар- хии образов, эквивалентный аналогичному механизму, описанному в гл. 9 для иерархии объектов.
Архитектура современных дисплеев 101 ДП-подпрограммы могут быть полезны в недорогих дисплеях, где с их помощью можно организовать программную генерацию литер. Высококачественные штриховые или точечные описания ли- тер любого желаемого шрифта могут храниться как дисплейные подпрограммы и вызываться с помощью быстрого перехода на под- программу, сохраняющего только адрес возврата. 10.3.6. Аппаратная реализация процедуры корреляции в векторных дисплеях Программная корреляция примитива, выбранного селектором, с содержащим его сегментом рассматривалась в разд. 4.3.4 и 9.7. Регистр имени достаточен для работы с одним уровнем имен (при отсутствии дисплейных подпрограмм). Сегмент диода определялся бы тогда следующим образом: DIODE: LOAD NAME_REG(segment_name) REL_DRAW(.) REL_DRAW(.) Когда ДП останавливается, программа, обслуживающая селек- тор, получает имя сегмента простым чтением его из регистра имени. Если ДП обеспечивает работу с вложенными (до n-го уровня) под- программами, регистр имени легко обобщается следующим образом: имена образов сохраняются при вызове подпрограмм в отдельном стеке или в одном стеке с адресами возврата (вместе с атрибутами сегментов и другой информацией о состоянии ДП). В этом случае механизм корреляции может возвращать прикладной программе последовательность имен. Прикладная программа может поочередно выделять сегменты / объекты в полученном списке, чтобы пользова- тель мог идентифицировать объект, который на самом деле хотел выбрать. Таким образом можно просмотреть, если это необходимо, всю иерархию от концевого узла до корневого. Если отдельный стек имен отсутствует, логика процесса корреляции становится немного более сложной, поскольку необходимо отличать имена от другой информации, хранимой в стеке. Накопление имен в стеке реализует блочно-структурированный механизм наименований объектов, о котором говорилось в разд. 9.7 при описании соглашений о наиме- новании объектов в иерархии модели. В растровых системах процедура корреляции обычно основана на сравнении координат (х, у) элементов изображения со значения- ми регистров физического локатора.
102 Глава 10 10.4. ПРЕОБРАЗОВАНИЯ ВЕКТОРОВ И ОТСЕЧЕНИЕ В ПРОСТРАНСТВЕ ИЗОБРАЖЕНИЯ Описываемая ниже серия модификаций ДП обычно применяется для аппаратного обеспечения общих преобразований и отсечения в двумерном пространстве координат устройства (пространстве изо- бражения). Как и ДП-подпрограммы, эти операции выполняются после применения к объектам программно-реализуемой видовой опе- рации, в которую входит также отсечение в пространстве мировых координат. Простые графические пакеты иногда предоставляют только средства для работы в пространстве координат изображе- ния, реализация же модельных и видовых преобразований осущест- вляется программистом. Операции с изображением, представлен- ным растровой битовой картой, существенно отличаются от аналогич- ных операций для векторных дисплеев, поскольку здесь приходится работать с отдельными пэлами; эти операции обсуждаются в гл. 11 и 12. 10.4.1. Преобразования образов Преобразования образов применяются к изображениям, про- шедшим операцию отсечения и заданным в координатах устройства (т. е. в пространстве изображения); их не следует смешивать с пре- образованиями экземпляров, осуществляемыми в мировом коорди- натном пространстве и предшествующими видовой операции ДП со структурированным дисплейным файлом (разд. 10.5). Вначале эти преобразования выполнялись на аналоговых схемах, в настоящее время — на менее дорогой и более надежной цифровой логике. Реа- лизация сложения и умножения целых чисел позволяет преобразо- вать 20 000 и более конечных точек в течение одного цикла регене- рации. Типичными преобразованиями являются перенос (который воздействует на абсолютные и относительные координаты и делает ненужными команды ABS_MOVE и REL_DRAW при размещении экземпляров с помощью ДП-подпрограмм), масштабирование и по- ворот. Поворот немного сложнее переноса и масштабирования, по- скольку для его выполнения требуется большее число арифметичес- ких операций с координатами. Преобразования обычно задаются с помощью регистров преобразований, к которым имеет доступ (на запись и на чтение) ДП. Значения, которые необходимо записать в регистры преобразований, вычисляются графическим пакетом и помещаются в заголовки сегментов в качестве операндов команд загрузки регистров. Когда ДП начинает обработку сегмента, он выполняет команды загрузки регистров. Эти команды выполняются в каждом цикле регенерации. Более развитые ДП могут иметь до- полнительные средства для сохранения, суперпозиции и восстанов- ления значений, определяющих преобразования образов; эти зна- чения могут храниться в прикладной структуре данных и быть до-
Архитектура современных дисплеев 103 ступными графическому пакету. При использовании ДП-подпро- грамм ДП просматривает иерархию образов и объединяет преобра- зования образов, заданные в заголовках вызываемых сегментов, с преобразованиями, определяемыми текущим содержимым регистров преобразований. После определения третьей координаты z ее зна- чение можно использовать в качестве фактора глубины: чем больше значение z, тем меньше интенсивность луча (гл. 14). 10.4.2. Срезка и выбор квадранта При разработке дисплейных систем было предложено несколько различных способов устранения эффекта свертывания экрана. Пер- вый способ, относительно простой, известен как срезка или бланки- рование. В этом способе вместо обычных Х-, У-регистров координат, имеющих обусловленное разрешающей способностью ЭЛТ число битов (обычно 10 или 12), используются регистры с увеличенным числом битов. Поэтому при сложении координат векторов, заданных в относительных координатах, перенос из старшего бита обычного координатного поля (10 или 12 бит) не будет вызывать арифметичес- кого переполнения. Абсолютные же команды воздействуют только на младшие 10 или 12 бит. Генератор векторов, управляемый такими регистрами, может выдавать отклоняющие сигналы, соответствую- щие позициям вне видимой области экрана. Однако перед подачей на усилители отклоняющей системы (или перед подачей с усилите- лей на катушки ЭЛТ) эти сигналы отсекаются по окну аналоговыми схемами отсечения, которые ограничивают управляющее- напряже- ние порогом, соответствующим краю экрана (рис. 10.7а). В момент достижения порога луч выключается (бланкируется) и включается снова при возвращении из-за края экрана (рис. 10.76). Это эквива- лентно тому, как если бы экран был частью области большего разме- ра, и выключенный луч мог покидать экран и возвращаться в него. До тех пор пока расширенные регистры не переполняются, луч воз- вращается в правильном месте, а результирующее изображение выглядит так, как если бы оно прошло операцию отсечения по окну (рис. 10.76). Если же регистры переполняются, произойдет сверты- вание области, окружающей экран, а после возвращения луча в область экрана — и свертывание экрана (рис. 10.7в). Данный способ имеет несколько недостатков. Во-первых, гене- ратор векторов должен выдавать сигналы, которые соответствуют позициям, находящимся за пределами экрана, а для этого требует- ся время. Во-вторых, необходимы дорогие аналоговые схемы, обес- печивающие линейность и повторяемость векторов в более широкой области. Время, расходуемое на обработку невидимых отрезков, тратится не эффективно и это уменьшает число видимых отрезков, которое может быть нарисовано без мерцания. Второй способ, называемый выбором квадранта, состоит в сле- дующем: программист отображает 12-битовое пространство экрана
104 Глава 10 Рис. 10.7а. Ограничение управляющего напряжения. на какую-то частьИ 6-битового координатного пространства, указы- вая с помощью специальных регистров, какие 12 подряд идущих битов из 16-битовых X- и У-регистров соответствуют координатам экрана. Этот способ более общий, чем бланкирование, когда экран помещается в центр в 2 или 4 раза (1 или 2 бит) большего координат- ного пространства. Во втором способе программист может представ- лять пространство изображения в виде плоскости 216Х216, из кото- рой выбирается для изображения квадрат 2"Х2Л. Например, выбор 12 старших битов отображает на экран всю координатную плоскость, уменьшенную в 16 раз (с ухудшенным на 4 бит разрешением). Мож- но также считать 16-битовое пространство координат состоящим из двух компонент: 12 младших битов определяют координаты в квад- рате размером с экран, а 4 старших бита определяют положение этого квадрата на изобразительной плоскости, представляющей со- бой сетку 16х 16 квадратов, каждый размером с экран. Таким обра- зом, 16-битовые координаты (101 ixxxxxxxxxxxx, QQWyyyyyyyyyyyy) соответствуют положению экрана в точке сетки с координатами (1011, ООП), а внутри экрана — точке (хххххххххххх, уууууууууууу). Вы- бор 12 бит в середине 16-битового поля ухудшает разрешение (на число отброшенных младших битов), соответственно увеличивая размер отображаемого на экран квадрата, находящегося в точке, определяемой отброшенными старшими разрядами. Таким образом, данный способ представляет собой комбинацию панорамирования и масштабирования, но в двумерном пространстве и с взаимной зависимостью друг от друга. Ни один из двух способов не устраняет полностью свертывание. Окно не может быть произ- вольных размеров или занимать любое положение в большем коор- динатном пространстве; отсутствует отображение окна на область вывода. Эффект псевдоотсечения достигается простым выделением цифрового поля и/или манипуляциями с аналоговыми сигналами, а не в результате выполнения алгоритма отсечения, являющегося частью общей видовой операции, применяемой в двумерном или трехмерном пространстве мировых координат. По этой причине полезность данных способов довольно ограниченна.
Архитектура современных дисплеев 105 -4096 Положение луча после ограничения Ци<рро8ое пространство переполнения +4095 б Рис. 10.7в. Свертывание окружающего экран пространства, приводящее к неже- лательным результатам на' экране.
106 Глава 10 10.5. ВЫСОКОПРОИЗВОДИТЕЛЬНЫЕ ДИСПЛЕИ С МОДЕЛЬНЫМИ ПРЕОБРАЗОВАНИЯМИ И ВИДОВОЙ ОПЕРАЦИЕЙ 10.5.1. Включение преобразований в ДП Аппаратные усовершенствования в ДП из гл. 3, рассмотренные в предыдущих разделах, обеспечили нас мощными средствами гене- рации изображения. Однако мы пока ограничены целочисленной или дробной системой координат изображения (координаты обычно занимают от 10 до 16 бит, видимая область экрана — от 10 до 12 бит), рудиментарным отсечением и отсутствием общей операции отображения окна в область вывода. Для компенсации отсутствую- щих средств могут потребоваться большие затраты на создание соответствующего программного обеспечения и может оказаться, что в созданном универсальном программном обеспечении, реализую- щем модельные преобразования и видовую операцию, будет не- возможно использовать некоторые аппаратные средства (например, ДП-подпрограммы или отсечение в пространстве изображения). Следовательно, следующим крупным усовершенствованием ДП является аппаратная реализация полного канала вывода, содержа- щего и модельные преобразования, и видовую операцию. Такие дисплеи кратко описаны в разд. 9.6. Сначала добавляются средства для работы со структурированным дисплейным файлом, позволяю- щие просматривать иерархию объектов и объединять преобразова- ния экземпляров. Затем будет добавлена полная видовая операция с отсечением в двумерном и трехмерном пространствах мировых координат, перспективной и параллельной проекциями для случая трех измерений и отображением окна в область вывода. Аппаратура, выполняющая преобразования, будет использоваться и в модельных преобразованиях, и в видовой операции подобно тому, как это опи- сано в разд. 9.10. (Большинство систем обеспечивает либо модель- ные / видовые преобразования, либо более простые преобразования образов, а не оба вида преобразований.) Цифровой процессор матричных преобразований, работающий с матрицами размером 4X4 [450] и делитель-отсекатель на базе описанного в разд. 4.2.1 отсекателя Коэна — Сазерленда, исполь- зующего алгоритм последовательного нахождения средней точки [436], были впервые реализованы в 1968 г. Затем это оборудование появилось на рынке и со временем стало менее дорогим и поэтому более обычным. Первые устройства были реализованы аппаратно [143], позднее появились микропрограммированные варианты, что позволило уменьшить стоимость и увеличить гибкость [473, 476, 477, 144, 145]. К сожалению, все эти системы основаны на целочис- ленной арифметике; для того чтобы программное обеспечение могло воспользоваться возможностями аппаратуры, мировые координаты
Архитектура совре/ленных дисплеев 107 должны быть 16-битовыми целыми числами Более предпочти- тельной является система координат с плавающей точкой, но требо- вания к быстродействию заставляли избегать трудоемких операций над числами с плавающей точкой. В настоящее время повышение производительности аппаратуры и тщательное проектирование архи- тектуры изменили ситуацию. Описываемая ниже очень высокопро- изводительная система PS300 [146] реализует канал вывода в чис- лах с плавающей точкой. Предложенный Кларком проект Геомет- рического Процессора на базе СБИС [98] также обещает недорогое решение проблемы реализации быстрого, работающего в числах с плавающей точкой канала вывода, выполняющего преобразования и отсечение. Геометрический Процессор может также выполнять опе- рацию отсечения для многоугольников с помощью алгоритма, опи- сываемого в гл. 11. Другим ограничением большинства современных архитектур графических процессоров, аппаратно-реализующих канал вывода, является раздельная обработка отрезков и текста. С текстом рабо- тает отдельный генератор символов, который может выполнять перенос, масштабирование и, возможно, даже поворот, но только в координатах изображения, а не в мировой системе координат, подвергаемой полной видовой операции. Например, для получения реалистических перспективных изображений грузовика с надписями на бортах, двигающегося по экрану, требуется рассматривать надписи как набор заданных "в мировых координатах отрезков/штри- хов, а не как последовательность литер, изображаемых генератором символов. Генератор символов дисплея PS300 пропускает штрихи, образующие литеры, через полный канал вывода, достигая тем са- мым максимальной гибкости и сохраняя при этом высокое быстро- действие. В системе Core различаются два вида текста: текст, кото- рый может рисоваться генератором символов (обычно используется для выдачи на двумерную плоскость меню и подсказок), и текст, состоящий из двумерных или трехмерных программно-генерируемых литер. Первый вид соответствует тексту низкого и среднего качест- ва — это определяется значениями атрибута качества текста с-точ- ностью-до-строки и с-точностью-до-литеры соответственно. Второй вид соответствует тексту высокого качества и задается значением атрибута качества с-точностью-до-штриха. (Данная терминология связана с наименьшей единицей, позиция и размер которой могут быть заданы точно: чем меньше эта единица, тем выше качество тек- ста.) Некоторые рудиментарные графические пакеты разрешают ри- *> В программной системе FGP34, предназначенной для дисплея FGP34000, имеется предварительное программное отсечение по квадрату (в случае двух из- мерений) или кубу, выполняемое в вещественных мировых координатах. Затем полученный квадрат или куб отображается на максимальный квадрат или куб в 16-битовой целочисленной системе координат, с которой может работать аппара- тура и в которой выполняются модельные преобразования и видовая операция [476].
108 Глава 10 сование текста только в физических координатах; ПГП, как под- множество системы Core, также является примитивным пакетом — он обеспечивает рисование текста только низкого качества, отсекае- мого по принципу: либо вся строка, либо ничего. 10.5.2. Введение дисплейного контроллера В описываемых архитектурах ДП просматривает графическую структуру данных или структурированный дисплейный файл с вло- женными объектами (или более примитивную иерархию образов, образуемую ДП-подпрограммами) в каждом цикле регенерации, снова и снова интерпретируя иерархию. Такой подход имеет два преимущества. Во-первых, относительно проста корреляция прими- тива, выбранного селектором, с именем объекта, содержащего при- митив, поскольку ДП может быть остановлен в той точке иерархии, которая содержит выбранный примитив. (На самом деле механизм корреляции, использующий адреса буфера регенерации (разд. 9.7), может потребовать некоторой программной обработки для точного нахождения выбранного примитива по адресу, содержащемуся в счетчике команд ДП при его останове. Правильный адрес может быть меньше того адреса, который находится в счетчике команд, поскольку большинство высокопроизводительных систем использу- ют аппаратный конвейер, состоящий из отдельных блоков. В этих блоках выполняются отдельные процессы получения значений ми- ровых координат (возможно, через один или более уровней косвен- ности), умножение матрицы преобразований на вектор координат конечной точки отрезка, отсечение, отображение окна на область вывода и генерация примитивов. Конвейерный принцип обработки обычно приводит к тому, что счетчик команд ДП опережает генератор векторов и генератор символов.) Во-вторых, выборочная модифика- ция иерархии, осуществленная основной ЭВМ, сразу отображается на экране при следующем просмотре иерархии. Недостатком реге- нерации изображения непосредственно по структурированному дис- плейному файлу является то, что на каждом цикле регенерации ДП тратит много времени на сохранение и восстановление состояния, выборку и декодирование необходимых данных, умножение их на матрицы, декодирование результатов и формирование примитивов для генераторов векторов. Этот процесс подготовки дисплейных команд часто приводит к тому, что генератор векторов бездействует в ожидании примитивов от ДП (в большинстве систем, имевшихся в продаже в 1981 г., такая ситуация не возникает только при рисо- вании длинных векторов). Таким образом, быстродействие генера- тора векторов используется не полностью, а это уменьшает общий объем информации, который можно показывать на экране без мер- цания. В разд. 9.6 предложено решение этой проблемы, получившее в 70-х годах довольно широкое распространение. Оно заключается в
Архитектура современных дисплеев 109 том, что за мощным ДП, похожим на универсальный процессор, помещается буфер регенерации, с которым работает существенно более простой ДП, названный на рис. 9.11 дисплейным контролле- ром (ДК). (Это решение является прекрасным примером реализа- ции «спирали обновлений».) ДП циклически просматривает струк- турированный дисплейный файл и компилирует иерархию объектов в новый линейный дисплейный файл; тем временем дисплейный конт- роллер регенерирует изображение по дисплейному файлу, полу- ченному на предыдущем шаге (по классической схеме с двумя буферами). Линейный дисплейный файл может быть сегментирован- ным, что позволяет выборочно изменять изображение подобно тому, как это осуществлялось для простого ДП из гл. 3. В качестве аль- тернативы (или даже дополнения) вместо буфера линейного дисплей- ного файла можно реализовать буфер для растровой битовой карты; если алгоритм развертки выполняется достаточно быстро, такая схема обладает всеми основными достоинствами предыдущей (разд. 10.8). Как уже говорилось в разд. 9.6, такая двухпроцессорная архи- тектура отделяет процесс модификации и просмотра иерархии от процесса регенерации и позволяет каждому процессу выполняться со своей собственной скоростью. Для получения динамического изображения необходимо изменять картинку по крайней мере с частотой 10 Гц (минимальная частота выполнения процесса регене- рации равна 30 Гц). Освободив ДП от регенерации и переложив эту функцию на независимый процессор, просматривающий гораздо более простое представление дисплейной программы, можно пока- зывать без мерцания намного более сложные иерархии. Для при- ложений со статическими изображениями ДП можно рассматривать как быстрый «аппаратный компилятор» произвольно больших структурированных дисплейных файлов! Другим достоинством данной архитектуры является возможность распределить затраты на сложный и дорогой ДП, подключив к нему несколько дисплеев, каждый со своим собственным буфером реге- нерации, хранящим собственный линейный дисплейный файл (или битовую карту). Иногда процесс мультиплексирования можно рас- ширить, подключив к дисплейному контроллеру, регенерирующему сегментированный линейный дисплейный файл, несколько экранов. Однако при этом возникает проблема мерцания (в работе [159] приведена методика для анализа информационной емкости дисплеев при такой конфигурации). Двухпроцессорная архитектура имеет также недостатки: тре- буется промежуточное представление дисплейной программы (линей- ного дисплейного файла или битовой карты), необходима дополни- тельная аппаратура, замедляется процесс модификации изображе- ния (для динамичных изображений это становится заметным, если частота изменений ниже 10 Гц; но для систем с одним ДП в этом случае возникло бы заметное мерцание) и усложняется для вектор-
110 Глава 10 ных систем процесс корреляции примитива, выбранного селекто- ром, с объектом, который имел в виду пользователь. Для корреляции необходимо, чтобы адрес линейного буфера, полученный от дисплей- ного контроллера после обработки прерывания от селектора, можно было отобразить на соответствующий адрес в иерархии объектов. Поскольку два процессора работают несинхронно, выполнить это отображение можно, если заставить ДП компилировать еще раз иерархию объектов и остановить компиляцию в момент генерации адреса буфера, соответствующего выбранному примитиву. Такая сложная схема увеличивает время реакции системы на события, генерируемые селектором. Кроме того, если центральный процессор изменяет структурированный дисплейный файл как раз во время выполнения этой медленной процедуры корреляции, может возник- нуть коллизия — пользователь может выбрать на экране объект, описание которого в структурированном дисплейном файле уже изменилось. В связи с продолжающимся падением цен на аппаратуру можно ожидать, что многие изготовители дисплейных систем будут пере- ходить на такую архитектуру, поскольку она обеспечивает наилуч- шее сочетание динамичности и насыщенности изображения. Можно ожидать увеличения числа битов, выделяемых для представления значений координат в целочисленной мировой системе координат, используемой для описания объектов в структурированном дисплей- ном файле, а с появлением дешевых СБИС, подобных Геометричес- кому Процессору, по-видимому, произойдет переход к координатам с плавающей точкой. 10.6. ФУНКЦИОНАЛЬНАЯ МОДЕЛЬ ВЫСОКОПРОИЗВОДИТЕЛЬНОЙ АРХИТЕКТУРЫ п 10.6.1. Канал вывода Функциональная модель, представленная на рис. 10.8, была создана как основа для оценки производительности и количествен- ных сравнений архитектур рассмотренных выше современных высо- копроизводительных векторных систем. Она описывает системы на достаточно высоком уровне абстрагирования от несущественных де- талей, связанных с реализацией. В отличие от других моделей, описанных в литературе, эта модели не только охватывает широкий круг аппаратных средств, включая большинство растровых систем, но и пригодна для описания процесса ввода. Альтернативная кон- цептуальная модель, связанная сданной, но неориентированная на оценку производительности, предложена в работе [263]. *) Этот раздел написан на основе работы [76].
Архитектура современных дисплеев 111 . ВВоЗимые Ванные, используемые Зля F модификации процесса Вывода ——► вводимые Ванные, направляемые к другим процессорам Процессор Представление объентц Рис. 10.8. Функциональная модель [76]. ПМ — прикладная модель; КДФ — компилятор дисплейного файла; СДФ — структури- рованный дисплейный файл, ДП — дисплейный процессор; ЛДФ — лниейиый (сегментиро- ванный) дисплейный файл; ДК — дисплейный контроллер. Функциональная модель состоит из последовательности логи- ческих процессоров, оперирующих с некоторыми представлениями объектов. Логический процессор функциональной модели соответст- вует одному и более физическим процессорам, и наоборот два логи- ческих процессора модели могут совместно использовать один физи- ческий процессор. Аналогично представления объектов могут раз- мещаться в одной памяти или могут быть разделены. Канал вывода состоит из четырех представлений объектов (гл. 9): ПМ — прикладной модели, содержащей описание графических и неграфических свойств (иерархического) объекта в формате, опре- деленной прикладной программой и/или системой (пакетом) моде- лирования; и СДФ — структурированного дисплейного файла, содержащего (иерархическое) описание графического представления объекта, обычно в целочисленных мировых координатах или в целочислен- ных координатах, полученных с помощью специальных программ из мировых координат с плавающей точкой; ЛДФ — сегментированного линейного дисплейного файла, со- держащего графические примитивы и команды установки режимов, описывающие объект после модельных преобразований и видовой операции; Экрана дисплея, показывающего изображение объекта. Канал вывода содержит также 3 логических процессора, отоб- ражающие одно представление в другое: КДФ — компилятор дисплейного файла, являющийся частью прикладной программы и содержащий модуль просмотра модели и обращения к графическому пакету для отображения ПМ в СДФ; ДП—дисплейный процессор, отображающий. СДФ в ЛДФ;
112 Глава 10 ДК — дисплейный контроллер, отображающий ЛДФ в изобра- жение на экране дисплея. Часть модели, соответствующая вводу информации, описывается потоком данных, поступающих с устройств ввода к различным про- цессорам канала вывода. Процесс отображения одного представле- ния объекта в другое всегда модифицируется введенными данными. Вводимые данные подразделяются для каждого процессора на классы в зависимости от их источника и способа обработки: данные могут поступить непосредственно от устройства ввода или от другого процессора; данные могут быть переданы другому процессору, использованы для модификации представления объекта, генерируемого этим про- цессором, переданы дальше и использованы внутри. Каждый из этих типов вводимых данных описывается ниже более подробно. Как и в случае вывода, при описании ввода данных в функцио- нальной модели основное внимание уделяется логическим опера- циям. Хотя некоторое устройство ввода может быть физически связано шиной с несколькими процессорами, на уровне абстраги- рования, соответствующем функциональной модели, оно логически связано только с тем процессором, который на самом деле обрабаты- вает данные, поступающие от устройства. Логические устройства ввода могут, конечно, модифицировать процесс обработки в несколь- ких процессорах канала вывода. Изменение в одном представлении отражается во всех последующих представлениях, существующих в канале вывода, и тем самым влияет на работу процессоров. Каждое представление содержит полное описание показываемого изображения. Последовательные представления отличаются только уровнем абстрактности/подробности описания (до или после отсе- чения, до или после проецирования из трехмерного в двумерное пространство) и степенью их зависимости от конкретного устройства: каждое последующее представление имеет более низкий уровень и сильнее зависит от устройства, т. е. оно становится менее абстракт- ным. Каждый процессор работает с некоторым представлением; кро- ме того, может также обрабатывать данные, поступающие от устрой- ства ввода (либо непосредственно, либо через другой процессор, как это описывается ниже). Поскольку функциональная модель является более точным кон- цептуальным описанием процесса преобразования прикладной мо- дели в изображение на экране, чем уже знакомый нам канал выво- да, с ее помощью можно адекватно описать широкий круг различ- ных архитектур. В конкретных системах могут не храниться в яв- ном виде все входящие в функциональную модель представления (или могут отсутствовать соответствующие им процессоры), но экви- валентные им данные тем не менее гарантируются, возможно, как промежуточные результаты. Например, в высокопроизводительных
Архитектура современных дисплеев 113 системах без буфера линейный дисплейный файл в явном виде не присутствует, но ДП должен генерировать примитивы низкого уров- ня, подобные тем, что хранятся в буфере, в качестве входной инфор- мации для генератора векторов. В этом случае данные, выдаваемые ДП, немедленно исполняются (обрабатываются) вместо того, чтобы помещаться в буфер регенерации для последую дего исполнения. В концептуальном отношении модель процесса ввода не столь прозрачна, поскольку здесь отсутствует конвейерная цепочка. (На самом деле модель вывода оказывается гораздо более сложной вслед- ствие конвейерного принципа работы и сложности каждого отдель- ного этапа.) 10.6.2. Ввод Отметим, что одно физическое устройство ввода может соответ- ствовать двум логическим устройствам ввода с различными функция- ми. Эти два логических устройства могут быть подключены либо к одному и тому же процессору, либо к двум различным. Например, пользователь может управлять движением курсора локатора с по- мощью планшета, а при возникновении некоторого определенного события будет вызывать в прикладной программе чтение координат (х, у) курсора. В описываемой модели эти функции выполняются двумя отдельными логическими устройствами1’: дисплейным контроллером, который считывает координаты с план- шета и модифицирует Позицию экранного курсора. Введенные коор- динаты передаются КДФ; компилятором дисплейного файла, который считывает координа- ты с планшета. Вводимые с планшета данные логически предназна- чаются для КДФ. В зависимости от физического подключения КДФ может получать данные непосредственно от устройства ввода или от процессора более низкого уровня. Некоторые детали процесса ввода в функциональной модели ил- люстрируются рис. 10.9. Как уже говорилось в предыдущем разделе, вводимые данные в каждом процессоре подразделяются на классы по двум признакам: как вводятся в процессор и как обрабатываются в процессоре. Одни данные собираются процессором только для передачи процессору более высокого уровня; возможно, что перед передачей эти данные будут преобразованы. Другие данные используются процессором для модификации осуществляемого им самим процесса отображения входного представления в выходное. Вводимые данные первого типа изображены на рис. 10.9 штриховыми линиями, второго типа — сплошными линиями. Термин логическое устройство имеет здесь несколько другой смысл, чем логические устройства ПГП и системы Core. Причина в том, что функциональная модель описывает аппаратную архитектуру, а ие программное обеспечение.
114 Глава 10 Управляющие ручки Рычаг Планшет Клавиатура функциональные клавиши Управляющие ручки Рычаг Планшет Клавиатура Функциональные Клавиши Световое перо Аппаратный селектор Лланшет вводимые ванные,используемые, 1 ' > вля мавификации процесса Вывода — •=»- ВВовимые ванные, направляемые н другим процессорам Процессор Превставление Рис. 10.9. Функциональная модель: ввод и вывод [76]. Все три процессора могут получать данные от устройств ввода, и эти данные могут обрабатываться до передачи процессору более высокого уровня. Например, литеры могут быть упакованы в тексто- вую строку: значения, генерируемые управляющими ручками, могут проходить фильтрацию; информация от светового пера, используе- мого в режиме селектора, может идентифицировать элемент стоя- щей выше структуры данных, соответствующий примитиву, выбран- ному на экране световым пером. Данные, поступающие с устройств ввода в различные процессоры, отличаются только типом.изменений, которые они могут произвести в выходном представлении, генерируе- мом процессором. Так, данные, вводимые в КДФ, вызывают изме- нения на уровне объектов прикладной модели, а данные, вводимые в ДК, вызывают изменения на уровне отдельных строк литер или векторов, как описано ниже. В принципе к каждому процессору могут быть подключены почти все физические устройства. Исключениями являются только свето- вое перо и физический селектор на базе локатора, использующий схемы аналогового сравнения; эти устройства могут подключаться только к ДК. Вследствие конвейерного принципа работы канала вывода только ДК может идентифицировать примитив, выбранный световым пером. Аналогично, поскольку аппаратный селектор ис- пользует в качестве входа в компаратор аналоговые сигналы, гене- рируемые ДК, только ДК может определить, на каком примитиве произошло совпадение с сигналами, соответствующими текущему положению курсора. На практике только немногие устройства под- ключаются непосредственно к ДК- Ввод данных в КДФ может вы-
Архитектура современных дисплеев 115 звать изменения самого общего типа — изменения на уровне объек- тов прикладной модели. Масштабы этих изменений -колеблются от модификации отдельных элементов СДФ до модификации структуры СДФ. КДФ может получать данные непосредственно от всех физи- ческих устройств ввода (за исключением светового пера и аппарат- ного селектора) и от процессоров более низкого уровня. Данные, вводимые в ДП, не могут вызывать таких существен- ных изменений в описании изображения. Они могут модифициро- вать обработку отдельных элементов, входящих в СДФ, таких, как значения координат, признаков, данных, определяющих преобра- зования. В последнем случае при модификации преобразования может измениться весь экземпляр некоторого объекта. Кроме того, значения признаков, модифицируемых вводимыми данными, могут использоваться для включения в процесс компиляции или исклю- чения из процесса компиляции той или иной части СДФ. Возможности ДП по обработке данных, поступающих от уст- ройств ввода, сильно меняются от системы к системе. В одних слу- чаях ДП может обрабатывать данные, поступающие от всех уст- ройств ввода, за исключением светового пера и аппаратного селек- тора, в других — ДП умеет только формировать в позиции, задавае- мой локатором, изображение курсора и накапливать в специальном буфере вводимые литеры. Имеются также системы, в которых ДП вообще не умеет обрабатывать никаких вводимых данных. Данные, вводимые в ДК, воздействуют на отображение ЛДФ в изображение на экране дисплея. При этом в изображении могут происходить только очень ограниченные изменения: могут модифи- цироваться только отдельные значения координат и атрибутов. На- пример, могут тем или иным образом выделяться примитивы, нахо- дящиеся в данный момент в поле зрения селектора, может изменять- ся позиция курсора или следящего перекрестия светового пера. Единственными устройствами, всегда подключаемыми к ДК, явля- ются световое перо и локатор. Ниже описаны две высокопроизводительные векторные графи- ческие системы, пользовавшиеся популярностью в конце 70-х годов. Показано, что системы с существенно различающимися на первый взгляд архитектурами тем не менее могут быть представлены одной и той же функциональной моделью и что использование этой моде- ли значительно облегчает тем самым сопоставление систем. 10.6.3. Два примера В этом разделе описаны архитектуры двух графических систем высокого уровня: Multipicture System 2 (или MPS) фирмы Evans and Sutherland [144, 145] и Vector General3400 (или VG3400) [476, 4771. Рассмотрены аппаратные компоненты систем и проиллюстрированы взаимосвязи между архитектурами и функциональными моделями. На рис. 10.10 и 10.11 приведены архитектура и структура системы
116 Глава 10 ПМ, КДСР Графический терминал Рис. 10.10. Структурная модель системы MPS2. (Справочное руководство по систе- ме MPS2 фирмы Evans and Sutherland.) Управляющие ручки, Рычаг, Планшет, Клавиатура, функциональная клавиатура Световое перо Рис. 10.11. Функциональная модель системы MPS2 [76].
Рис. 10.12. Структурная модель системы VG3400. (Справочное руководство по программированию VG3400 фирмы Vector Ge- neral.)
118 Глава. 10 Клавиатура Функциональные клавиши Рис. 10.13. Функциональная модель системы VG3400 [76]. MPS (на уровне абстрагирования, соответствующем функциональ- ной модели), а на 10.12 и 10.13 — эти же схемы для системы VG3400. Отметим, это названия аппаратных блоков мы оставили такими, какие дали разработчики, а названия, введенные нами выше, используются для логических процессоров и представлений функ- циональной модели. Система MPS. Система состоит из семи компонент: интерфейса контроллера, системной шины данных, памяти изображения, про- цессора изображения, генератора изображения, индикатора изобра- жения и диалоговых устройств. Шина данных, процессор изображения, память изображения и генератор изображения вместе называются центральным графи- ческим процессором. К каждому центральному графическому про- цессору может быть подключено до четырех графических терминалов (каждый из которых состоит из набора диалоговых устройств и ин- дикатора изображения). Центральный графический процессор под- ключается через интерфейс контроллера к контроллеру изображе- ния, который считается частью дисплейной системы. Контроллер изображения — это универсальная ЭВМ производства фирмы DEC (либо PDP-11, либо VAX 11/780). К каждому контроллеру изобра- жения можно подключать до четырех центральных графических про- цессоров. Ниже рассмотрен простой случай, когда к контроллеру изображения подключен один центральный графический процессор, к которому в свою очередь подключен один графический терминал. Контроллер изображения содержит прикладную программу, ПМ и КДФ. Поставляемое фирмой Evans and Sutherland программное обеспечение содержит пакет подпрограмм, которые можно вызывать из программы, написанной на Фортране. Этот пакет используется в КДФ для формирования СДФ по представлению объектов в ПМ
,Архитектура современных дисплеев 119 и для модификации СДФ в соответствии с данными, вводимыми с диалоговых устройств. Интерфейс контроллера обеспечивает связь между контролле- ром изображения и системой MPS по трем шинам ввода-вывода. шине ввода-вывода для одиночных слов данных или управляю- щей информации; шине прямого доступа в память для передачи блоков данных; шине прерывания для передачи в контроллер изображения сигна- лов прерывания от устройств ввода и от других устройств, таких, как генератор изображения. Синхронная системная шина данных обеспечивает контроллеру изображения доступ ко всем компонентам MPS. Память изображе- ния хранит и СДФ, и ЛДФ. СДФ содержит примитивы, атрибуты, обращения к объектам и определения видовой операции и модельных преобразований. Процессор изображения, подобно ДП, компили- рует СДФ в ЛДФ в памяти изображения. Процессор изображения обеспечивает суперпозицию преобразований, применяет преобразо- вания к примитивам и отсекает части преобразованного объекта, находящиеся вне окна. Объект, прошедший операцию отсечения, проецируется на картинную плоскость, и получившаяся проекция отображается в область вывода. ЛДФ содержит примитивы и команды установки режимов. Он может быть сегментирован; для хранения несегментированного ЛДФ используются один или два буфера. В режиме с двумя буфе- рами ДК непрерывно читает один буфер, в то время как ДП моди- фицирует другой. В режиме сегментирования ЛДФ разделяется на несколько сегментов, каждый из которых может модифициро- ваться отдельно. Генератор изображения, генератор векторов и генератор литер в совокупности выполняют роль ДК. Генератор изображения уп- равляет обработкой ЛДФ; генератор векторов преобразует храня- щиеся в ЛДФ данные в аналоговые сигналы, позиционирующие электронный луч и управляющие яркостью изображения; генера- тор символов интерпретирует полный набор литер кода ASCII. Программист может также определять новые шрифты. В видовой операции и в модельных преобразованиях участвует только началь- ная точка текстовой строки, отдельные литеры этим преобразовани- ям не подвергаются. MPS работает с семью устройствами ввода (все они считаются частью дисплейного терминала). Каждое из устройств имеет прямой выход на системную шину данных. Устройствами ввода являются: планшет, управляющие ручки, функциональные переключатели, алфавитно-цифровая клавиатура, световое перо, рычаг, подсвечи- ваемые функциональные кнопки. За исключением светового пера, все эти устройства непосредст-
120 Глава 10 венно доступны прикладной программе, другие вводимые данные используются в КДФ. Процессор изображения не может обрабатывать данные от уст- ройств ввода, а генератор изображения обрабатывает только данные от светового пера. Vector General3400. Система VG3400 состоит из восьми компо- нент: интерфейса основной ЭВМ, GP-шины, графического процессо- ра, буфера регенерации, MD-шины, управляющего устройства дис- плея, монитора и периферийных устройств. Эти компоненты подключаются к основной ЭВМ, которая, как и в случае MPS, считается частью дисплейной системы и является универсальной ЭВМ, такой, как PDP-11 или VAX 11/780. Основная ЭВМ содержит прикладную программу, ПМ, КДФ и (в отличие от MPS) СДФ. Поставляемое фирмой Vector General программное обес- печение содержит пакет подпрограмм, которые могут вызываться из программы, написанной на Фортране. Этот пакет используется в КДФ для формирования СДФ по представлению объектов в ПМ и для модификации СДФ в соответствии с данными, вводимыми с диалоговых устройств. Как и в случае MPS, СДФ содержит примитивы, атрибуты, об- ращения к объектам и определения видовой операции и модельных преобразований. Он может, кроме того, содержать универсальные команды, например арифметические, логические и команды управ- ления. Основная ЭВМ подключается к VG3400 через интерфейс с основной ЭВМ. Блок интерфейса обеспечивает связь между основной ЭВМ и VG3400 по тем же трем шинам, что и в MPS: шине программируемого ввода-вывода; шине прямого доступа в память; шине прерываний. Блок интерфейса, графический процессор, буфер регенерации и устройства ввода (за исключением светового пера и аппаратного селектора) подключаются к асинхронной шине (GP-шина). Графический процессор представляет собой ДП. Он компилирует СДФ, находящийся в основной ЭВМ, в ЛДФ, хранящийся в буфере регенерации. Графический процессор является универсальным про- цессором; кроме просмотра иерархии, он выполняет обычные ариф- метические, логические и управляющие команды. ЛДФ размещается в буфере регенерации и содержит примитивы и команды установки режимов. ЛДФ не может сегментироваться; вместо этого VG3400 предоставляет специальное средство (облегчаю- щее редактирование), с помощью которого пользователь может де- лать в ЛДФ пробные удаления, включения и модификации отдель- ных элементов. Средство, облегчающее редактирование, можно ис- пользовать, например, как буфер, в котором можно модифициро- вать часть объекта, сохраняя оставшуюся часть неизменной.
Архитектура современных дисплеев 121 Управляющее устройство дисплея вместе с генераторами векто- ров и шрифта и управляющим устройством монитора представляет собой ДК. Оно читает ЛДФ через MD-шину. Генератор векторов преобразует содержащиеся в ЛДФ данные в аналоговые сигналы, позиционирующие электронный луч и управляющие яркостью изображения на мониторе. Генератор шрифта может интерпрети- ровать полный набор литер кода ASCII и содержит матрицу пре- образования, копируемую с матрицы текущего преобразования. Таким образом, к литерам применяются модельные преобразования и видовая операция (однако перспективное проецирование не при- меняется к каждой отдельной литере в текстовой строке). Как и в случае MPS, система VG3400 может содержать несколько ДК, каж- дый со своим буфером регенерации. Система VG3400 работает с семью устройствами ввода: планше- том, управляющими ручками, функциональными клавишами, алфа- витно-цифровой клавиатурой, световым пером, рычагом и аппарат- ным селектором. Все эти устройства подключены непосредственно к GP-шине (за исключением светового пера и аппаратного селектора, которые под- ключаются к ДК). Устройства ввода, подключенные к GP-шине, доступны КДФ, находящемуся в основной ЭВМ. Одни вводимые данные передаются прикладной программе, другие используются в КДФ. Графический процессор имеет прямой доступ к регистрам уст- ройств, которые содержат оцифрованные значения, генерируемые опрашиваемыми устройствами, т. е. управляющими ручками, ры- чагом и планшетом. При каждой компиляции СДФ графический процессор может изменять значения отдельных координат и данные, определяющие преобразования, в соответствии со значениями, по- лученными от этих аналоговых устройств. Такие элементы данных являются динамическими переменными, описанными в разд. 10.3.3. Только световое перо и аппаратный селектор подключены не- посредственно к ДК. Оба устройства могут модифицировать обра- ботку ЛДФ в ДК — выделять выбранный элемент. Данные, вво- димые от светового пера и аппаратного селектора, могут также на- правляться в процессор более высокого уровня. Элемент ПМ, соот- ветствующий примитиву, выбранному на экране дисплея, находится следующим образом: сначала находится слово СДФ, порождающее выбранное слово ЛДФ; затем в КДФ передается содержимое стека обращений к объектам, соответствующее моменту выполнения най- денного слова, и КДФ определяет нужную пару (объект, элемент). Сравнение систем MPS и VG3400. В обеих системах MPS и VG3400 существуют, как реальные структуры данных, СДФ и ЛДФ. Однако представления объектов и процессоры этих представлений существенно различаются не только по сложности, но и по прин- ципам. Процессор изображения в системе MPS (играющий роль ДП) является специализированным процессором, а графический
122 Глава 10 процессор в системе VG3400 — универсальным. Поскольку неоди- наковы представления объектов, в этих двух системах существенно различаются процессы обработки данных, поступающих от устройств ввода. Ниже кратко рассмотрены несколько примеров различий между системами (более подробное обсуждение и количественное сравнение читатель может найти в работе [76]). а) Режимы адресации данных. В системе MPS допускается только непосредственное задание данных, а в системе VG3400 — непосред- ственное и адресное. Адреса данных в системе VG3400 указывают на любую ячейку основной ЭВМ, на регистры общего назначения графического процессора и регистры аналоговых устройств ввода. Тем самым можно создавать динамические переменные, которые могут легко модифицироваться ДП или прикладной программой. Если СДФ содержит ссылки на ячейки в основной ЭВМ, эти ячейки рассматриваются в функциональной модели одновременно и как часть СДФ, и как часть ПМ. Поскольку СДФ находится в памяти основной ЭВМ, прикладная программа может модифицировать дан- ные в ПМ, а следовательно, и содержимое СДФ примерно так, как это показано в разд. 10.3. Если необходимо изменить некоторые из непосредственно заданных данных в системе MPS, ПМ (некоторая ее часть) должна содержать указатели на эти элементы данных. Фак- тические значения координат хранятся в СДФ, и их копия может храниться в ПМ. Поскольку в системе MPS допускается только непосредственное задание данных в СДФ и СДФ хранится не в памяти основной ЭВМ, их изменить значительно труднее, чем в системе VG3400 (архитектурные решения все-таки влияют на про- граммное обеспечение). б) Обращения к объектам. В системе VG3400 объекты адресуются с помощью некоторого справочника, введенного для того, чтобы сделать возможным перемещение объектов и облегчить управление памятью. В системе MPS объекты адресуются с помощью прямых указателей; стек не может содержать имена вызываемых объектов, поэтому имя выбранного объекта должно определяться либо с по- 'мощью таблицы корреляций, либо выделением каждого экземпляра объекта в отдельный сегмент ЛДФ. в) Команды общего назначения. Система VG3400 может выпол- нять арифметические, логические и управляющие команды; в си- стеме MPS команды общего назначения отсутствуют. г) Преобразования. В системе MPS все преобразования представ- ляются в однородных координатах и определяются матрицами раз- мером 4X4. В системе VG3400 параметры, определяющие поворот, масштабирование и перенос, хранятся отдельно и матрица преобра- зования формируется при каждой компиляции СДФ. Система VG3400 не выполняет операцию сдвига и допускает только однородное мас- штабирование. д) Текст. В системе VG3400 модельные преобразования и видо- вая операция применяются и к тексту; имеется только одно ограни-
Архитектура современных дисплеев 123 чение: преобразование перспективного проецирования не применя- ется к отдельным литерам. В системе MPS преобразованию подвер- гается только начальная точка текстовой строки. е) Взаимодействие с пользователем. В системе VG3400 СДФ и процесс его компиляции в ЛДФ могут модифицироваться данными, вводимыми с аналоговых устройств. Это реализуется с помощью кос- венно адресуемых данных. В системе MPS ДП не обрабатывает ника- ких данных от аналоговых устройств ввода, все данные направля- ются в КДФ. Любые изменения СДФ в системе MPS (в том числе и вызванные данными, вводимыми с аналоговых устройств) осущест- вляются КДФ через хранящиеся в ПМ указатели на ячейки в СДФ. ж) Сегментация. В системе MPS ЛДФ может быть сегментиро- ван, поэтому можно модифицировать некоторые части объекта, не повторяя генерации всего ЛДФ. В системе VG3400 подобные сред- ства имеются в очень ограниченном виде — в виде устройства, об- легчающего редактирование. В работе [76] на специальных испытательных задачах показано, что во многих случаях универсальность и гибкость системы VG3400 приводит к значительной потере производительности по сравнению с системой MPS. Таким образом, конструкторы графических систем должны очень тщательно подходить к выбору соотношения между гибкостью и производительностью для систем, в которых большое значение имеют время отклика на действия пользователя, возмож- ность динамического изменения объектов изображений и число при- митивов, которое можно высвечивать без мерцания. 10.7. СИСТЕМА PS300 — СЛЕДУЮЩИЙ ВИТОК СПИРАЛИ ОБНОВЛЕНИЙ Возможности, создаваемые благодаря введению структурирован- ного дисплейного файла для высокодинамичной векторной графики, хорошо иллюстрируются системой PS300 фирмы Evans and Suther- land [146], разработанной в 198Рг. (рис. 10.14). Эта графическая система представляет собой следующий виток спирали обновления; она содержит мощный микропроцессор (М68000) в качестве Управ- ляющего Графического Процессора (УТП), который решает только графические задачи. В настоящее время система PS300 взаимодейст- вует с относительно низкой скоростью (через интерфейс RS232C, обладающий скоростью 9600 бод) с основной ЭВМ, в которой разме- щается прикладная модель, и поддерживает диалог с пользователем через устройства ввода; введенные данные могут использоваться для модификации СДФ и/или спецификации видовой операции. Таким образом, имеется четкое разделение труда между основной ЭВМ, выполняющей прикладную задачу, и сателлитом, выполняю- щим чисто графические функции; основная ЭВМ и сателлит взаимо- действуют только при помощи понятного человеку командного язы-
124 Глава 10 Рис. 10.14. Функциональная блок-схема системы PS300. ПМ — прикладная модель; КДФ — компилятор дисплейного файла. ка, в виде цепочек литер. Цель такого подхода — создание замкну- той «видовой машины», не нуждающейся в помощи основной ЭВМ в отличие от систем MPS и VG3400, где основная ЭВМ решала раз- нообразные задачи, в том числе выполняла компиляцию и модифи- кацию СДФ. Микропроцессор М68000 с логическим адресным пространством размером 16 Мбайт делит это пространство между локальной па- мятью (в настоящее время 128 кбайт), хранящей программы УГП, и массовой памятью, хранящей СДФ (массовая память может нара- щиваться с шагом 1 Мбайт). Графические управляющие программы пишутся на специальном языке как комбинации процедур — чер- ных ящиков с п входами и т выходами, объединенных в так назы- ваемую функциональную сеть. Такое объединение черных ящиков напоминает архитектуру типа поток данных: некоторая процедура активируется только в том случае, когда все ее параметры имеют элементы данных в соответствующих им входных очередях. Эти эле- менты данных могут поступить от других процедур, от устройств ввода и от прикладной программы; обычно ими являются скаляры, векторы, матрицы, цепочки литер и комбинации этих примитивов, похожие на записи в языке Паскаль. Все устройства ввода (клавиа-
Архитектура современных дисплеев 125 тура, функциональные клавиши, планшет и управляющие ручки) обслуживаются УГП. Функциональные сети обычно ожидают появ- ления данных от одного из устройств и затем выборочно модифици- руют копии подобъектов и матриц в СДФ. Когда модификация копий закончена, указатели на старые и новые структуры данных меняются местами. Таким образом, за счет небольших, локализованных до- полнительных затрат памяти на двойную буферизацию возможна очень простая и быстрая пошаговая модификация изображения. СДФ определяется основной ЭВМ как последовательность команд (аналогичных тем командам, которые использовались для построе- ния иерархии символов в гл. 9), которые должен выполнить УГП. Система PS300 является первой системой, в которой при формиро- вании СДФ используются модельные координаты с плавающей точ- кой, хотя и в несколько специфической форме, чтобы обеспечить эф- фективность их обработки. Каждая координата точки (х, у, г) пред- ставляется 16-битовой дробной частью и все три координаты исполь- зуют один и тот же 8-битовый порядок. Компоненты матрицы, реа- лизующей видовую операцию и модельные преобразования, имеют 32-битовую дробную часть и 8-битовый порядок каждая, а в вычис- лениях используется 24-битовая дробная часть и 8-битовый порядок. При такой схеме части больших объектов (например, хвостовая часть самолета «Боинг-747») могут быть определены как достаточно компактные подобъекты в своих собственных локальных системах координат, имеющих ограниченную точность. Впоследствии под- объекты собираются вместе при помощи модельных преобразований, выполняемых с максимальной точностью. СДФ содержит иерархию символов/объектов, с корневым узлом которой связано определение перспективной или параллельной ви- довой операции в стиле системы Core. Дисплейный процессор про- ходит по СДФ обычно с частотой 30—60 Гц, выполняя при этом про- смотр всей иерархии, составление матрицы, видовую операцию и генерацию векторов; компиляция СДФ в отдельный ЛДФ не дела- ется. Как уже говорилось в разд. 9.6.1, для достаточно быстрых ДП это идеальный вариант: обеспечивается немедленная модификация каждого кадра, простота модификации, поскольку нет двух пред- ставлений объектов и, следовательно, нет проблемы их синхрони- зации. Процедура установления соответствия между примитивом, выбранным селектором, и порождающим его элементом иерархии формирует иерархию имен объектов и индекс вектора в списке векторов объекта самого нижнего уровня. ДП фактически представляет собой конвейер из трех отдельных процессоров, созданных на базе битовых секций. Обработка инфор- мации в процессорах конвейера совмещается во времени, что дает значительный выигрыш в скорости. Первый процессор (арифмети- ческий) осуществляет просмотр иерархии СДФ и умножение матрицы на матрицу и матрицы на вектор, что необходимо для модельных преобразований и нормирующих преобразований видовой операции
126 Глава 10 (разд. 9.10). Арифметический процессор выполняет также опера- цию отсечения по нормированному трехмерному видовому объему, используя уравнения прямых. Второй процессор (конвейерная под- система) выполняет проецирование и отображение окна на область вывода. Третьим процессором, является цифровой генератор век- торов, использующий пошаговый алгоритм. Другим свойством этой системы является разбиение литер на штрихи, которые подверга- ются той же обработке, что и обычные векторы; в результате полу- чается реалистическое трехмерное представление текста. Производительность системы PS300 оказывается определить сложнее, чем производительность ее более простых предшественниц. Максимальное число векторов, показываемых без мерцания, явля- ется функцией многих параметров (таких, как длина и наклон век- торов, размерность объектов, число узлов и соотношение между векторами, принимаемыми или отбрасываемыми целиком, и век- торами, требующими отсечения). Для небольшой двумерной иерар- хии, состоящей примерно из 60 узлов, и видовой операции без ка- кого-либо отсечения можно показывать без мерцания с частотой 30 Гц более 95 000 коротких (длиной не более 2,5 мм) векторов. Для крупной (несколько сотен узлов) трехмерной иерархии с полной перспективной видовой операцией, включающей отсечение, можно показывать без мерцания по меньшей мере 20 000 векторов, если выполняются следующие типичные условия: половина векторов являются короткими (длиной не более 2,5 мм), другая половина — среднего размера (длиной не более 5 см); ~85% векторов прини- маются или отбрасываются целиком и только 15% векторов требуют отсечения. Отметим, что этот большой объем вычислений — обра- ботка 20 000 трехмерных векторов — выполняется за 1/30 с; таким образом, пропускная способность конвейерного дисплейного про- цессора, который обрабатывает трехмерные объекты, заданные в вещественных координатах, такова, что каждые 1,5 мкс он генери- рует новый вектор! Этот результат впечатляет, если его сравнить с числом коротких векторов, заданных в 16-битовых целых координа- тах, обрабатываемых при более простых условиях предыдущими системами. Конвейер дисплейного процессора спроектирован таким образом, что просмотр иерархии и связанные с этим вычисления не приводят к заметному замедлению видовой операции и генерации векторов. В системе VG33000 применяется в основном тот же подход — используется микропроцессор М68000, а объекты, составляющие иерархию, задаются координатами с плавающей точкой. Как и в системе PS300, здесь возможна локальная модификация объектов, обработка данных, поступающих с устройств ввода и т. д. Однако в системе VG33000 применяется менее мощная аппаратура визуали- зации и поэтому производительность и стоимости системы меньше. Ко времени выхода в свет данной книги остались без ответа сле- дующие четыре вопроса:
Архитектура современных дисплеев 127 1. Будет ли достаточным быстродействие канала связи с основ- ной ЭВМ (9600 бод) для приложений, требующих частого взаимо- действия с прикладными данными и/или частых изменений изобра- жения? Конечно, просмотр графической базы данных не может быть выполнен с такой скоростью. 2. Удовлетворятся ли программисты отсутствием свободного дос- тупа к М68000 через обычный язык высокого уровня? Наличие та- кого доступа могло бы превратить систему PS300 в независимую (сателлитную) вычислительную систему; в настоящее время это только интеллектуальное внешнее устройство (интеллектуальный графический терминал). 3. Возможность регенерации от 50 000 до 100 000 коротких век- торов на порядок увеличивает сложность иерархий объектов, кото- рые могут интерпретироваться «на лету». Однако не стоит ли все же ввести ЛДФ и соответствующие ДК, чтобы еще более увеличить сложность иерархий? Например, для закраски многоугольников можно было бы использовать с успехом метод заполнения их близко расположенными параллельными векторами. Но для этого потре- буется много векторов! 4. Допускает ли конструкция конвейерного дисплейного про- цессора простую замену системы генерации векторов на устройство, несущественно замедляющее конвейер, реализующее алгоритм раст- ровой развертки и генерирующее битовую карту с двойной буфери- зацией так же, как это осуществляется в системе Megatek, описан- ной ниже? 10.8. СИСТЕМА MEGATEK7200 Функциональную модель, рассмотренную в разд, 10.6, можно использовать и для растровой графики, включив либо в ДП, либо в ДК средства, осуществляющие алгоритм развертки и позволяющие реализовать систему создания изображения. Кроме того, в функ- циональную модель включаются буфер, в котором содержится пред- ставление изображения после процесса развертки (битовая карта) (БК), и система вывода изображения (СВИ), которая читает битовую карту и осуществляет необходимые операции с таблицами, кодирую- щими цвета, прежде чем выдавать сигналы на монитор дисплея. На рис. 10.15 приведена функциональная модель с перечисленными выше изменениями и добавлениями. Нетрудно увидеть явную ана- логию-с прежней моделью: БК заменяет ЛДФ, а СВИ заменяет ДК- На самом деле, система вывода изображения часто называется дис- плейным контроллером, хотя устроена проще, поскольку имеет дело с цепочками пэлов, а не с дисплейными командами, кото- рые необходимо декодировать. В обеих моделях представление изо- бражения, используемое для регенерации, оптимально соответствует методу сканирования (произвольному или растровому). Альтерна-
128 Глава 10 Рис. 10.15. Функциональная модель высокопроизводительной растровой си- стемы. БК — битовая карта; СВИ — система вывода изобрвжения. тивной реализацией, объединяющей черты векторной и растровой архитектур и позволяющей так же, как и в системах MPS и VG3400, подключать несколько дисплейных контроллеров к одному ДП, является разработанная в 1981 г. система Megatek7200. Эта система предоставляет необычную возможность создания динамичного изображения и в векторном, и растровом режимах; в обоих режимах она обладает высокой производительностью. Это одна из первых сравнительно недорогих систем, предоставляющих средства для выполнения растровой развертки изображения в ре- альном времени. Неиерархические изображения, содержащие до 50 000 коротких соединенных векторов, могут проходить растро- вую развертку 10 раз в 1 с, что составляет ~ 160 нс на пэл. Отметим, что описание возможностей растровой системы числом векторов, которые система может выводить, связано с принятым в системе Megatek7200 методом использования векторов в растровой графике: в отличие от аналогичной по основным характеристикам системы Graphics фирмы Sanders [411], разрешающей заполнять много- угольные области произвольным образом, система Megatek7200 создает сплошные области путем растровой развертки близко рас- положенных параллельных векторов, заполняющих области. Для генерации этих векторов можно использовать поставляемый по за- казу процессор заполнения многоугольных областей. Такая «век- торно-растровая» или «растрово-векторная» система имеет следующие преимущества: она дает возможность показывать без мерцания про- извольное число динамически изменяющихся векторов и подобна растровой системе, способной создавать динамичное изображение. «Графическая машина» 7200 (рис. 10.16) имеет следующие ком- поненты: Интерфейс с основной ЭВМ. Реализует связь с основной ЭВМ. Выполняет также логические функции управления шиной графиче- ских данных и шиной графической периферии. Векторная память. Этот буфер хранит только структурирован- ный дисплейный файл, хотя в принципе мог бы содержать и линей- ный дисплейный файл. Графический процессор. Осуществляет просмотр структурирован- ного дисплейного файла и передает выбранную информацию либо поставляемому по заказу аппаратному модулю отсечения, поворота, масштабирования и переноса, либо прямо генератору векторов. Со-
пм.кд'ф. Рис. 10.16. Система Megatek7200 — «графическая машина». Архитектура современных дисплеев
130 Глава 10 держит также аппаратные средства для переноса изображения и генерации литер. Аппаратный модуль отсечения, поворота, масштабирования и переноса. Этот процессор, поставляемый по заказу, может считаться частью ДП системы Megatek7200. Выполняет ограниченный набор преобразований изображения и отсечение изображения. Возможнос- ти, предоставляемые данным модулем, неэквивалентны тем возмож- ностям, которые можно получить при использовании формируемой пользователем матрицы преобразований однородных координат или при суперпозиции матриц. Модуль не реализует также перспектив- ного проецирования или изменения яркости в зависимости от глу- бины. Таким образом, для разработчиков системы Megatek7200 вы- сокая скорость и низкая стоимость были важнее, чем функциональ- ные возможности. Этот компромисс ограничивает возможности поль- зователя при управлении процессом визуализации (или заставляет его выполнять преобразования в основной ЭВМ), но существенно увеличивает объем векторных данных, проходящих процесс раст- ровой развертки в реальном масштабе времени. Шина графических данных. Это 32-битовая двунаправленная ши- на, по которой передаются все данные, описывающие изображение, по две 12-битовые координаты одновременно. Кроме координатных данных, по шине графических данных передается также информа- ция, относящаяся к взаимодействию дисплея с периферией. Шина графической периферии. По этой шине передается пред- назначенная для основной ЭВМ информация о действиях пользо- вателя. Устройства ввода. В системе Megatek7200 имеются рычаг, шар, оцифровыватель (обычно планшет), клавиатура, функциональные переключатели, управляющие ручки и селектор (обычно локатор с аппаратным компаратором). Рычаг, клавиатура и оцифровыватель подключаются через отдельный блок управления периферией. Устройства вывода. Система Megatek7200 обеспечивает возмож- ность работы с тремя устройствами: растровым дисплеем, векторным дисплеем и устройством получения твердых копий. Растровый дисплей подключается к шине графических данных через цифровой генератор векторов. Генератор векторов выполняет преобразова- ние развертки над векторами ЛДФ, генерируемого ДП; при этом используется алгоритм Брезенхэма (гл. И). Прошедший преобра- зование развертки ЛДФ хранится в растровой памяти с двойной буферизацией, из которой он выводится на цветной растровый мони- тор. Имеется возможность выбора разрешающей способности (либо 512x512 пэлов, каждый пэл состоит из 4 битов, либо 1024x1024, но с меньшей вдвое частотой модификаций). Векторный дисплей (называемый каллиграфическим монитором) управляется непосред- ственно каллиграфическим генератором векторов, настроенным на короткие векторы. Устройство получения твердых копий (исполь- зуется обычно либо электростатический, либо ударный механизм
Архитектура современных дисплеев 131 на базе матрицы точек) управляется специальным блоком, обеспе- чивающим высокоточную развертку векторов в растр. Система Megatek7200, как и система PS300, подключается к основной ЭВМ (например, PDP-11, VAX-11/780 или DG NOVA) как интеллектуальный терминал через простой последовательный (или параллельный) интерфейс на базе микропроцессора. КДФ, отображающий прикладную модель в структурированный дисплей- ный файл, выполняется на основной ЭВМ. Такой интерфейс облада- ет гибкостью, а стоит дешевле, чем более ранний и сложный схем- ный интерфейс системы MPS и VG3400; поэтому следует ожидать, что он получит широкое распространение в начале 80-х годов. Как и в системе PS300, графический пакет основной ЭВМ передает в системе Megatek7200 высокоуровневые команды, формирующие структурированный дисплейный файл; имеются команды создания и удаления сегмента, создания примитива в текущем сегменте, уста- новки атрибутов и ввода информации с устройств диалога. Можно считать, что основная ЭВМ передает в графический терминал зако- дированный структурированный дисплейный файл и команды, ре- дактирующие этот файл. Для более простых дисплеев основная ЭВМ могла бы сама выполнять отсечение и посылать в терминал команды, формирующие сегментированный линейный дисплейный файл, ко- торый, возможно, использует дисплейные подпрограммы для сим- волов, целиком попадающих в окно. В этом случае передается только информация, соответствующая видимым объектам, и нагрузка на интерфейс меньше, чем при передаче образующей СДФ иерархии объектов, над которыми еще не выполнены преобразования и опера» ция отсечения. 10.9. МУЛЬТИПРОЦЕССОРНЫЕ И САТЕЛЛИТНЫЕ ГРАФИЧЕСКИЕ СИСТЕМЫ Если интерфейсный микропроцессор интеллектуального графи- ческого терминала, такого, как система Megatek7200, не полностью загружен процессами передачи информации и управления шинами, его можно использовать для выполнения других, независимых от приложения функций, связанных с выводом и вводом данных. Такая ситуация возможна, когда все аппаратные блоки, подключен- ные к шине, принимают участие в управлении ею и когда пропуск- ная способность канала связи с основной ЭВМ невысока. В состав функций, связанных с выводом данных, можно включить функции создания и модификации объектов и/или сегментов, локальной генерации примитивов по спецификациям высокого уровня, присы- лаемым основной ЭВМ (например, рисование сеток, произвольных конических сечений, символов, зависящих от приложения). В функ- ции ввода данных можно включить многие из известных методов диалога (гл. 5), в частности вывод эхо, «резиновую нить», буксиров-
132 Глава 10 Рис. 10.17. Графическая система Университета Брауна BUGS (Brown University Graphics System) — высокопроизводительный, многопроцессорный интеллекту- альный сателлит. ку (а возможно, и другие преобразования изображения), рисование по сетке или с ограничениями, эскизирование (т. е. рисование от руки) и установление соответствия между примитивом и объектом иерархии (для модификации объекта), если в системе имеется струк- турированный дисплейный файл. Фактически в конструкции систе- мы PS300 заложена возможность такой независимой от основной ЭВМ обработки данных. Цель локальной обработки состоит в минимизации нагрузки на основную ЭВМ и на канал связи с нею. Это особенно важно, когда основная ЭВМ работает в режиме разделения времени, а графические терминалы подключены к ней через низкоскоростные линии связи (1200—19 600 бод). Сюда относятся, например, сетевые графические системы, используемые при организации графических телеконферен- ций [3581, и канадская система Telidon (цветная вкладка 10) [62]. В системе Telidon микропроцессор, подключенный к домашнему телевизору, может генерировать (с растровой разверткой) литеры, векторы, дуги и ломаные, а также поддерживать связь через теле- фонную линию с основной ЭВМ; он реализует и функции интерфей- са, и функции ДП. Локальная обработка данных, поступающих от устройств диалога, дает возможность обеспечить мгновенную обрат- ную связь на простые действия пользователя; без этого такая обрат- ная связь была бы почти невозможна. Наконец, в случае основной ЭВМ, работающей в режиме разделения времени, любая ее разгруз- ка обычно приводит к снижению затрат, поскольку использование уже купленного встроенного процессора не требует дополнитель- ных затрат. Графическую систему, которая имеет (микропроцессор в интер- фейсе с основной ЭВМ, используемый для генерации сложных дис-
Архитектура современных дисплеев 133 плейных команд и для обработки информации, поступающей от устройств диалога, можно рассматривать не как простой интеллек- туальный графический терминал, а как сателлитную вычислитель- ную систему, способную к нетривиальной локальной обработке данных. Поскольку ее функциональные возможности ограничены и не могут быть изменены прикладным программистом, такая вы- числительная система называется сателлитом с фиксированными функциями. Если, однако, процессор обладает достаточной вычис- лительной мощностью, его представление в виде простого «черного ящика» может не удовлетворить нас; имеет смысл предоставить прикладному программисту возможность писать для сателлита произвольную прикладную программу и превратить тем самым гра- фический терминал в универсальный программируемый сателлит. Конфигурация «основная ЭВМ — сателлит» появилась впервые при- мерно на пять лет раньше системы PARC фирмы Xerox. Обе конфи- гурации являются естественным продуктом процесса последователь- ного роста мощности компонент графических систем. Системы MPS и VG3400, базирующиеся на PDP-11, могут использоваться либо самостоятельно, либо в качестве сателлита более мощной ЭВМ. Система PS300 занимает промежуточное положение между сателли- том с фиксированными функциями и программируемым сателлитом, поскольку программист может написать для М68000 специализиро- ванную программу в виде «функциональной сети», но не имеет в своем распоряжении универсального языка программирования. Интеллект интерфейса с основной ЭВМ в системе Megatek7200 мож- но поднять до уровня программируемого сателлита. Для этого не- обходимо включить в интерфейс микропроцессор Intel8086. С его помощью можно организовать локальную обработку событий, ре- шать многие задачи и выполнять программы, написанные пользо- вателем. Современные дисплейные сателлиты часто сами становятся мно- гопроцессорными системами. Например, высокопроизводительная (векторная) система Брауновского университета BUGS [474] является полностью программируемым мультипроцессором с общим полем памяти, который может работать самостоятельно или в ка- честве сателлита, подключенного к основной ЭВМ IBM370, работаю- щей в режиме разделения времени (рис. 10.17). Система BUGS состоит из двух идентичных микропрограммируемых мини-ЭВМ с циклом 90 нс (Meta-4), играющих роль центрального процессора и графического процессора. Мини-ЭВМ имеют общее поле памяти объемом 64 кбайт, в которой содержится прикладное программное обеспечение и структурированный дисплейный файл. Мини-ЭВМ Meta-44 (центральный процессор) и Meta-4B (графический процес- сор) эмулируют 16-битовую, похожую на IBM370, машину с уни- версальным набором команд; кроме того, Meta-4B имеет специаль- ные графические команды, в частности команды для просмотраСДФ. В состав системы BUGS входит также микропрограммируемая ЭВМ
134 Глава 10 с циклом 38 нс (SIMALE) с четырехканальной параллельной цело- численной арифметикой и ограниченным, но универсальным набором команд, хранящихся в управляющей памяти со страничной органи- зацией. Эта машина превосходит по своим возможностям делитель- отсекатель; она выполняет преобразования экземпляров 2-, 3- и 4-мерных объектов, тестирование оболочек (разд. 9.12), отсечение, проецирование и побуквенную обработку текста для изображения на экране текста среднего качества, а также генерирует линейный дисплейный файл с двойной буферизацией. Машины Meta-4B и SIMALE вместе образуют ДП. Система BUGS была первой дисплей- ной системой, которая прошла несколько витков спирали обновле- ний; в ней широко используется микропрограммирование для обес- печения быстродействия, гибкости и облегчения реализации. Начиная с конца 60-х годов исследователи уделяли большое вни- мание автоматическим средствам решения основной проблемы сател- литных систем: как разделить прикладную программу, чтобы полу- чить «оптимальное» распределение труда между основной ЭВМ и сателлитом? Идея решения состоит в перемещении части программ из основной ЭВМ в сателлит таким образом, чтобы обеспечить мак- симальную скорость реакции на действия пользователя и миними- зировать нагрузку на основную ЭВМ. Проблема разделения возникает на самом деле только в том слу- чае, когда интеллектуальный сателлит не обладает достаточным быст- родействием или памятью, или в нем отсутствует необходимая ап- паратура, такая, например, как блок выполнения операций с пла-' вающей точкой. Но эта ситуация, довольно характерная для сегод- няшнего дня, в будущем станет возникать все реже и реже, посколь- ку возможности процессора в сателлите растут, совершенствуется его периферия, увеличиваются скорость и объем памяти, расширя- ется набор команд. Интересно отметить, что система PS300 спроектирована так, что не может стать самостоятельной дисплейной системой (подобной персональной ЭВМ Alto, и особенно ее коммерческим вариантам, описанным в гл. 12), хотя микропроцессор М68000, несомненно, обладает необходимой для этого вычислительной мощностью. В на- стоящее время система PS300 — строго специализированная маши- на для визуализации с предопределенным разделением труда между основной ЭВМ и сателлитом. На самом деле объединение и разделение труда между основной ЭВМ и сателлитом являются элементарной формой распределенной обработки с относительно тесными связями между модулями в ос- новной ЭВМ и сателлите. Математическое моделирование [444] показало, что правила, проверенные ранее экспериментально, вер- ны в большинстве случаев: модули обработки событий и построения изображения надо поместить в сателлит, если это возможно, а более мощной основной ЭВМ поручить трудоемкие вычисления (с плаваю- щей точкой) и манипуляции с базой данных. Программы, изменяю-
Архитектура современных дисплеев 135 щие прикладную модель в ответ на действия пользователя, также желательно выполнять в сателлите. В реализованной на основе BUGS системе ICOPS [473] допуска- ется динамическая (во время работы) миграция модулей при изме- нении загрузки основной ЭВМ. Оптимальное разделение труда меж- ду машинами определяется с помощью специальной модели как функ- ция доступности основной ЭВМ: чем больше загружена основная ЭВМ, тем менее мощной она оказывается по отношению к сателлиту и тем привлекательнее выполнение программных модулей в сател- лите. Математическая модель Стоуна [444] также предсказывает су- ществование особых точек при изменении нагрузки на основную ЭВМ; в этих точках дальнейшее увеличение нагрузки на основную ЭВМ делает целесообразным миграцию на сателлит совокупностей тесно связанных модулей. Кроме проблемы оптимального разбиения программы, другой основной проблемой сателлитных систем является разработка согла- шений и программного обеспечения, которые позволяют програм- мисту писать прикладные программы как бы для «виртуального монопроцессора». Это означает, что программист может писать про- грамму на языке высокого уровня, не заботясь об окончательном разделении труда или разбиении программы, предписываемыми некоторой моделью, и ничего не зная о протоколах связи нижнего уровня или о различиях архитектуры и операционных систем основ- ной ЭВМ и сателлита. Экспериментальные системы, реализующие такую монопроцессорную модель, были созданы на базе специаль- ных компиляторов, которые генерировали модули, способные пере- мещаться из одной машины в другую. В литературе описаны такие системы для PL/1 [209] и Алгол-W [473]. В обеих системах програм- мы сегментируются на уровне процедур и передача параметров про- исходит либо обычным способом, если вызывающая и вызываемая процедуры находятся в одном процессоре, либо через специальный монитор (прозрачным для пользователя образом), использующий линии связи, если вызывающая и вызываемая процедуры находятся в разных процессорах. Хотя экспериментальные системы подтвер- дили удобство и гибкость такого подхода, данные алгоритмы, к со- жалению, не были реализованы в коммерческих системах. Вероят- но, это объясняется тем, что легче устранить проблему разделения труда (спроектировав систему либо только для автономной работы, либо для использования в качестве графического терминала) и снабдить покупателей пакетом программ низкого уровня для рабо- ты с линиями связи, на базе которого они могут осуществлять собст- венные разработки. 10.10. ЗАКЛЮЧЕНИЕ В данной главе рассмотрено несколько современных архитектур векторных систем и их функциональные возможности. Показано также, что растровые системы могут быть описаны простой функ-
136 Глава 10 циональной (конвейерной) моделью. Благодаря рассредоточению я вычислительных мощностей среди нескольких процессоров возрас- ' тут мощность и автономность дисплейных систем. Будет продол- жаться изготовление автономных систем, содержащих собственные основные ЭВМ (возможно, их можно будет в свою очередь подклю- чать в качестве сателлитов к большим основным ЭВМ), и интеллек- >’ туальных графических терминалов, которые можно подключать к i мини-ЭВМ или к большим ЭВМ по выбору покупателя (обычно через I легко реализуемые интерфейсы). < Развитие СБИС приведет к существенному улучшению соотно- шения стоимости и производительности в архитектуре дисплейных процессоров. Последние, например, смогут работать со структури- рованным дисплейным файлом, заданным в мировой системе коор- динат числами с плавающей точкой, и выполнять над ним модель- ные преобразования и видовую операцию; они смогут также вы- полнять в реальном времени растровую развертку векторов, литер и многоугольников и предоставлять тем самым возможности дина- мической растровой графики того типа, который в настоящее время реализуется только в дорогих авиационных и космических тренаже- рах (стоимостью несколько миллионов долларов). Наконец, по мере удешевления памяти и увеличения быстродействия логических схем будет повышаться разрешающая способность растровых систем и растровая графика постепенно вытеснит векторную графику, по- скольку первая отличается большей универсальностью и вырази- тельностью. Растровые системы в настоящее время конкурируют с устройствами на запоминающих трубках, поскольку способны не только создавать свободное от мерцания изображение, но динами- чески изменять и выборочно модифицировать его; их изображение обладает большей яркостью, более широким диапазоном тоновых и особенно цветовых оттенков. Растровый дисплей с динамической растровой разверткой отрезков можно использовать как псевдовек- торный дисплей, позволяющий к тому же выводить сплошные облас- ти (заполненные векторами). Единственным недостатком растровой графики является дискретный характер представления изображе- ния в виде массива пэлов, что приводит к «зазубренности» и другим визуальным эффектам, обсуждаемым в гл. 11. Со временем эти эф- фекты можно свести к минимуму, увеличивая пространственную разрешающую способность и используя более тонкое управление яркостью луча; эти темы также обсуждаются в гл. 11. УПРАЖНЕНИЯ 10.1. Архитектуру векторного дисплейного процессора обычно сравнивают с архитектурой универсального центрального процессора; например, X- и Y-pe- гистры, задающие позицию луча, могут рассматриваться как сумматоры, которые можно загружать абсолютными значениями или прибавлять к текущему их зна- чению какую-то величину; команды имеют операнды, которые обычно задаются
Архитектура современных дисплеев 137 непосредственно (т. е. прямо в команде), но можно использовать адресацию одного и более уровней; очень схожи средства управления последовательностью команд, особенно если дисплейный процессор может работать с подпрограммами. Тем ие менее имеются некоторые отличия. Например, обсудите форматы команд вектор- ного дисплея и команд типичных центральных процессоров; рассмотрите формат команд установки режимов и т. д. 10.2. Какова идеальная архитектура для реализации ПГП? (Сначала опреде- лите, что имеется в виду под словом «идеальный».) Обратная задача: какой гра- фический пакет наиболее пригоден для архитектуры с графической структурой данных? 10.3. Исследуйте синтаксис и семантику средства для обхода матрицы теку- щего преобразования в системе Core (разд. 9.4, рис. 9.6). Как бы вы реализовали это средство на высокопроизводительном векторном дисплее, таком, как PS300? 10.4. Проанализируйте какую-либо современную векторную систему с реге- нерацией изображения и определите, какие из имеющихся в системе средств обес- печивают работу пакета модельный преобразований (н какие именно его компонен- ты), а какие предназначены для графического пакета (для трехмерного канала вывода). Обратите внимание на системы координат, ограничения, накладываемые на преобразования, сохранение состояния, атрибуты, различия в обработке текс- та и других примитивов и т. д. 10.5. Рассмотрите архитектуру, с которой вы имели дело при выполнении упражнения 4, и определите, сколько в ней фигурирует процессоров и проме- жуточных представлений? Каков самый нижний уровень архитектуры, который видим программисту и потенциально управляем при написании программ на зави- симом от устройства языке уровня ассемблера? Какие из этих функциональных возможностей недоступны программисту при использовании ПГП? Каковы соот- ношения стоимости и эффективности для этих двух уровней программирования? 10.6. Преобразования в пространстве изображения можно рассматривать как «модельные преобразования бедняка». При каких условиях их можно использо- вать в таком качестве? Для чего можно их использовать в случае, когда модель- ные/видовые преобразования доступны в полном объеме? 10.7. Находите ли вы удобства в наличии в графической системе (в самом гра- фическом терминале) средств для отсечения векторов в пространстве изображения подобно тому, как есть средства для выполнения преобразований в пространстве изображения? Что можно сказать о растровых системах? 10.8. Как лучше охарактеризовать производительность векторной системы с регенерацией изображения? В какое место существующей высокопроизводитель- ной системы, такой, как PS300, необходимо, по вашему мнению, добавить обра- батывающие средства и/или память (если стоимость системы не имеет значения), чтобы еще более увеличить степень конвейеризации/параллелизма? Как можно использовать несколько конвейерных подсистем и/или специализированных об- рабатывающих машин? 10.9. Какими достоинствами и недостатками обладает архитектура дисплей- ных систем, в которых центральный процессор и дисплейный процессор совместно используют одну память? Как, по вашему мнению, должен решаться этот вопрос в идеальной системе и почему? 10.10. Обсудите, как атрибуты аппаратуры (такие, как возможность созда- ния цветного изображения) могут отражаться в пакете модельных преобразований и/нли в графическом пакете? 10.11. В гл. 9 не упоминается проблема, связанная с прикладными структу- рами данных/моделями, которые частично хранятся во внешней памяти (за исклю- чением библиотек символов). Обсудите проблему аппаратного просмотра моделей, не помещающихся целиком в оперативной памяти; используйте при этом подходя- щие аналоги с проблемами, возникающими при работе со структурами данных в обычных центральных процессорах. (В 1981 г. для большинства архитектур этот вопрос оставался важным, однако его острота будет снижаться по мере того, как стоимость памяти будет «стремиться к нулю».)
Глава 11 Алгоритмы и программное обеспечение растровой графики 11.1. ВВЕДЕНИЕ Данная глава посвящена новой, быстро развивающейся области растровой графики. Прогресс растровой графики основан на дости- жениях в микроэлектронике: в настоящее время процессоры и па- мять большого объема с произвольной выборкой создаются на не- больших кремниевых кристаллах (чипах). В системе генерации изображения, которая выполняет преобразование примитивов вы- вода (таких, как отрезки, литеры, многоугольники и т. д.) из век- торной формы в растровую, используются процессор и небольшое число чипов памяти. Существенно больше чипов памяти требуется для буфера регенерации, с помощью которого изображение построч- но выводится на экран графического устройства. В гл. 1 приведены некоторые основные сведения о развитии растровой графики, в гл. 3 описана общая структура типичного растрового дисплея. В первой части данной главы представлено несколько алгоритмов развертки векторного изображения в растровое, а во второй части рассмотре- ны средства, которые целесообразно включить в пакет графических подпрограмм для растровой графики. В гл. 12 детально рассмотрено аппаратное обеспечение растровой графики. Алгоритмы развертки, применяемые при построении растрового изображения, вызываются очень часто (как правило, сотни или даже тысячи раз) при каждом создании или модификации изображения. Поэтому алгоритмы должны не только порождать визуально прием- лемые образы, но также делать это как можно быстрее. В самом деле, скорость или качество изображения — основной компромисс при выборе алгоритмов развертки: одни алгоритмы быстры, но генери- руют неровные (с зазубринами) ребра, другие более медленны, но порождают более гладкие ребра. Независимо от способа выбора компромиссного решения предпочтение отдается быстродействию. Поэтому в алгоритмах используются пошаговые методы, в резуль- тате чего минимизируется число вычислений (особенно умножений и делений), производимых во время каждой итерации. Дополни- тельного увеличения скорости можно добиться за счет применения параллельных процессоров, одновременно выполняющих преобра- зование примитивов вывода из векторной формы в растровую для многовходового буфера регенерации.
Алгоритмы и программное обеспечение растровой графики 13? 11.2. ПРЕОБРАЗОВАНИЕ ОТРЕЗКОВ ИЗ ВЕКТОРНОЙ ФОРМЫ В РАСТРОВУЮ Главной задачей алгоритма развертки отрезков является вы- числение координат пэлов, лежащих вблизи отрезков на двумерной растровой сетке. При решении этой задачи будем предполагать, что начальная и конечная точки отрезка имеют целочисленные коорди- наты (обобщение предоставляем читателю выполнить в качестве уп- ражнения). Методика, использованная в алгоритме развертки отрез- ка в гл. 3, заключалась в пошаговом увеличении х, вычислении у= =тх+Ь и подсвечивании пэла в точке (х, ROUND (у)). Вычисление произведения т-х, однако, требует времени и замедляет процесс разложения в растр. Более того, для обеспечения достаточной точ- ности придется воспользоваться представлением данных с плаваю- щей точкой (или в двоичных дробях). 11.2.1. Простейший пошаговый алгоритм Операцию умножения можно устранить, если заметить, что при Ах=1 т=к.у/\х сводится к т=\у, т. е. изменение х на 1 приводит к изменению у на т (тангенс угла наклона отрезка). Таким образом, если х/+1=хг+1, то yi+1=yi+tn для всех точек (x;, yt) отрезка, т. е. последующие значения х и у определяются, исходя из преды- дущих значений (рис. 11.1). Если tri>\, шаг по х будет приводить к шагу по у, большему 1. Поэтому следует х и у поменять ролями, придавая у единичное приращение, а х будет увеличиваться на Nc=\ylm=\lm. Поэтому алгоритм назван пошаговым алгоритмом: на каждом шаге производятся инкрементальные вычисления, осно- ванные на предыдущем шаге. Процедура LINE, реализующая этот метод для случаев —1<т<1, приведена ниже. Процедура WRITE- PIXEL, используемая в процедуре LINE, помещает значение value Рис 11.1. Пошаговое вычисление у, при котором выбор пэла (обозначаемого чер- ным кружком) осуществляется путем округления у.
140 Глава 11 в пэл буфера регенерации, координаты которого задаются двумя первыми аргументами. procedure LINE ( {предполагается, что тангенс угла лежит между 1 и — 1} xl~, yl, {начальная точка} y2, у2, {конечная точка} value: integer); {значение, которое заносится в пэлы. var dy, dx, y, tn; real; begin if xl< >«2 then begin dy := y2 — (/1; dx := x2 — xl; m dy/dx; у = y^; for x := xl to x2 do близкие к отрезку} begin WRITE-PIXEL (х, ROUND(y), value); {заносим value в пэл} у := y + m {шаг по у на величину тангенса угла наклона т} end end {если «отрезок» на самом деле точка, изображаем ее, в противном слу- чае ошибка} else if yl = y2 then WRITE-PIXEL (xl, yl, value) else ERROR end {LINE} 11.2.2. Алгоритм Брезенхэма для отрезков прямых Трудности применения процедуры LINE состоят в том, что ок- ругление у до целого значения требует времени и, кроме того, у и т должны быть вещественными переменными или двоичными дробями, но не целыми переменными, так как тангенс угла наклона есть дробь. Более привлекателен в этом отношении алгоритм Брезенхэма [58], поскольку для него необходима только целая арифметика. Вещест- венные переменные не используются совсем и, следовательно, ок- ругление не требуется. Для простоты будем считать, что тангенс угла наклона принимает значения в диапазоне 0—1. В алгоритме используется управляющая переменная dt, которая накаждомшаге пропорциональна разности между s и t (рис. 11.2). На рис. 11.2 приведен i-й шаг, когда пэл уже найден как ближайший к реальному изображаемому отрезку, и теперь требуется определить, какой из пэлов должен быть установлен следующим: 1\ или Если s<Zt, то S; ближе к отрезку и необходимо выбрать его; в про- тивном случае ближе будет Тг. Другими словами, если s—/<0, выбирается St, в противном случае выбирается Tt. Изображаемый отрезок проводится из точки (xl, у!) в точку (х2, у2). Пусть первый отрезок находится ближе к началу коорди- нат, тогда перенесем обе точки при помощи Т (—xl, —у!) так, чтобы
Алгоритмы и программное обеспечение растровой графики 141 Рис. 11.2. Геометрическое обоснование алгоритма Брезенхэма. Черными круж- ками обозначены пэлы, выбранные с помощью этого алгоритма. начальной точкой отрезка стала точка (0, 0), а конечной —(dx, dy), где dx—x2—xl и dy~y2—yl. Уравнение прямой теперь имеет вид y=(dy/dx)x. Обозначим координаты (после переноса) Рг_! через (г, <?), как показано на рис. 11.2. Тогда 5;=(г+1, q) и Тг=(г4-1, <7+1)- Из рис. 11.2 следует, что s = |(r+l)-<7, ^ = <7+l-g(r+l). Поэтому s-i = 2g(r+l)-2?-l. (11.1) Если s—i<0, выбираем 5г. Преобразуя выражение (11.1), получаем dx (s—f)=2 (г -dy—q -dx)+2dy—dx. Величина dx положительна, поэтому dx(s—/)<0 можно использо- вать в качестве проверки при выборе S;. Обозначим часть неравен- ства через d(. Тогда di=2 (г -dy—q -dx)+2dy—dx. Поскольку r=X;-_i и q=yi_l, то di=2x,-_1 ‘dy—2yi_1dx+2dy—dx. (И-2) Прибавляя 1 к каждому из индексов, имеем dI-+i=2xi -dy—2yt -dx+2dy—dx. Вычитая dt из di+i, получаем dj+i di~2dy (xt x^_j) 2dx (tji у ;_i). Известно, что xt—хг_!=1. Учитывая это, запишем dl+i=dt+2dy—2dx (yt—у^).
142 Глава 11 Если d,^0, выбирается Tit тогда «/t-—1 и di+1=dt+2(dy—dx). (11.3) Если же dj<0, выбирается St, тогда у^у^ и di+1—d£+2dz/. (11.4) Таким образом, мы получили итеративный способ вычисления dz_t по предыдущему значению dt и выбора между и Т t. Начальное значение dx можно найти из выражения (11.2) при i=l с учетом того, что (х0,z/о) =(0, 0). Тогда di=2dy—dx. (11.5) Для вычисления по формулам (11.3)—(11.5) требуются мини- мальные арифметические возможности: они включают сложение, вычитание и сдвиг влево (для умножения на 2). Это важно, посколь- ку исключается длительная по времени операция умножения. Более того, как видно из следующей реализации алгоритма Брезенхэма (отметим, что эта версия работает только для отрезков, тангенсы углов наклона которых-находятся в диапазоне 0—1; обобщение алгоритма предоставляем читателю выполнить в качестве упражне- ния), выполняемый в нем цикл очень прост: procedure BRESENH AM(xl, yl, х2, у2, value: integer); -> .... . „ xend: integer; begin dx ABS(x2 — xl); dy := ABS(y2~yl); d — T^dy-dx; incrl := 2*dy; incr2 := 2.*(dy—dx); if xl > x2 then begin x := x2; У := y2; xend : — xl end else begin x := xl; У := yl', xend := x2 end WRITE_PIXEL(x, y, value); while x < xend do begin x := х+Л if d < 0 then d := d-)-incrl else begin У = у+1-, d := d-\-incr2 end WRITE_PIXEL(x, y, value) {начальное значение для d из (11.5)} {константа, используемая в качестве при- ращения, при d < 0} (константа, используемая в качестве при- ращения при d 0} {начинаем из точки с меньшим значением х} {первая точка отрезка} {выбираем S;, у не меняется} {выбираем Ту возрастает} {выбранная вблизи отрезка точка} end {while} end {BR ESENHAM}
Алгоритмы и программное обеспечение растровой графики 143 Для отрезка, проведенного из точки (5, 8) в точку (9, 11), после- довательными значениями d будут 2, 0, —2, 4 и 2. На рис. 11.3 показаны установленные пэлы и идеальное прохождение отрезка. и сглаживания. Эти методы, корнями уходя- щие в теорию метода выборок, впервые были применены к графике Кэтмулом [81, 83], Кроу [ 110] и Шоупом [424]. Их основная идея Рис. 11.3. Отрезок, про- веденный из точки (5, 8) в точку (9, 11) с помощью алгоритма Брезенхэма. состоит в том, что пэл, имеющий ненулевую площадь на экране, должен быть использован для представления области с ненулевой площадью в мировом пространстве, которая отображается на этот пэл (рис. 11.4). Прямым следствием является то, что видимые отрез- ки и литеры в реальном мире имеют ненулевую толщину; это отнюдь не математические объекты, состоящие из отрезков нулевой тол- щины. Как использовать этот факт? На рис. 11.5 показан отрезок нену- левой толщины, наложенный на растр. Растровая сетка сдвинута Рис. 11.4. Отображение прямоугольной области в мировых координатах в об- ласть, покрывающую один пэл на экране. по х и у на половину единицы, так как мы хотим сосредоточить вни- мание на области, покрытой пэлами, которые теперь располагаются в центре каждой ячейки сетки, а не на ее пересечениях. Таким обра- зом, пэл представляется прямоугольной областью внутри сетки. (В сущности это идеализация: распределение интенсивности под- свеченного пэла является приблизительно нормальным, и хвосты распределения налагаются на соседние пэлы.)
144 Глава 11 Рис. 11.5. Отрезок ненуле- вой толщины, проведенный из точки (1, 2) в точку (8, 6). Каждый пэл, перекрываемый отрез- ком, должен иметь интенсивность, про- порциональную площади пэла, занятой отрезком. Так, для белого отрезка на черном фоне пэл (2, 2) был бы почти на 50% белым, в то время как пэл (3, 2) — лишь на 10%) Такие пэлы, как (2, 4), были бы полностью черными. (Для от- резков с интенсивностью, меньшей мак- симальной, эти соотношения должны быть соответственно промасштабирова- ны.) На рис. 11.6 показаны линии, полученные при использовании и без использования такого рода выравнива- ния. Отметим, что сглаживание линий достигается за счет не- которого размывания их границ. На вычисление части каждого пэла, закрываемой прямоугольной областью отрезка, может потребоваться довольно много времени. Рис. 11.6. Линии, изображенные при использовании (а) и без использования выравнивания (б) (с разрешения Джесси Барроса и Генри Фуча). Кроу [112] и Фуч [180] разработали довольно эффективные способы организации вычислений, однако этот процесс все еще остается слишком медленным, и в общем случае он непригоден для интерак- тивных графических приложений. В будущем быстродействие может увеличиться (Пиллер [372] и Гапта и Спрулл [205] предложили подходы, основывающиеся на аппаратно реализованной параллель- ной обработке), но в настоящее время, если требуется более быстрый диалог, приходится либо мириться с неровными линиями, либо ис- пользовать больший буфер регенерации вместе с ЭЛТ, обладающей высокой разрешающей способностью. При удвоении буфера реге- нерации по х и у от обычных 512 пэлов до 1024 число пэлов увели- чивается в четыре раза, а время, необходимое для перевода отрезка в буфер,— в два раза. При этом «лестничный» эффект устраняется не полностью. Однако разложение отрезка в растр с удвоенным раз- решением выполняется быстрее, чем его выравнивание при исходном разрешении.
Алгоритмы и программное обеспечение растровой графики 145 11.2.4 . Линии постоянной яркости С помощью выравнивания решается также другая проблема, возникающая при более простых подходах. Рассмотрим два разло- женных в растр отрезка (рис. 11.7). Диагональный отрезок имеет тангенс угла наклона 1 и, следовательно, он в V2 раз длиннее, чем горизонтальный отрезок. Тем не менее каждый из отрезков представляется одним и тем же числом пэлов (10). Если яркость каждого пэла равна 1, яркость на еди- ницу длины отрезка А будет также равна 1, а для отрезка В она составит всего лишь 1/К2, что легко обнару- жить визуально. Проще всего в дан- ном случае компенсировать яркость Рис. п,7. отрезки неодинако- отрезка в зависимости от его накло- вой яркости. на. Можно также использовать вы- равнивание, поскольку область, покрытая отрезком, задает рас- пределение интенсивности вдоль длины отрезка. Если предста- вить отрезки, изображенные на рис. 11.7, как прямоугольники с высотой w, отрезок А будет покрывать Юоу единиц площади, а отрезок В — 10^2® единиц, яркость же на единицу длины будет постоянной. 11.2.5 . Эффективность процесса записи в буфер регенерации Рассмотрим еще один вопрос, касающийся разложения отрезков в растр. До сих пор мы не затрагивали процедуру WRITE_PIXEL (х, у, value), которая помещает value в пэл, расположенный в точке (х, у). Некоторые буферы регенерации на самом деле организованы так, чтобы использовать пару х и у непосредственно как составной адрес. Мы же будем предполагать, что система воспринимает обыч- ные последовательные адреса. Как этот адрес связан с х и у? (От- метим, что эта проблема аналогична определению адреса элемен- та в двумерном массиве.) Если в буфере регенерации содержатся пэлы от (0,0) до (хгааХ, утак), которые располагаются по строкам, начиная с base, то address(х, y)—base+y(xmaKA-^)JrX. (11.6) Если же в систему координат буфера входят адреса от xrain до хтах и от уга1й до г/гаах, то address (х, у) =base+ (у—yrain) (xmax—xmin+1)+ (х—xmln). (11.7) Применив алгебраические преобразования и вычислив заранее по-
146 Глава 11 лучившиеся константы, можно свести требуемые арифметические операции к умножению и двум сложениям. Умножения исключены из основного тела алгоритма Брезенхэ- ма, однако если на каждом шаге итерации будет вызываться проце- дура WR1TE_P1XEL и будет вычисляться адрес, то все равно останется потребность в одном умножении на итерацию. Этого мож- но избежать, если учесть, что address(х+1, у) =address(х, у) 4-1 (11.8) и address (х, у+\)== address (х, у)+(хтах—хт1п4-1). (11.9) Эти рекуррентные соотношения можно использовать для модифи- кации алгоритма, чтобы исключить умножение из вычисления адре- са. Обращение к процедуре WRITE_PIXEL заменяется операцией прибавления константы и вызовом процедуры PIXEL_AT_ADDR (address, value), которая помещает value в address. Проведение реаль- ных изменений в программе оставляем читателю в качестве упраж- нения. 11.3. РАСТРОВАЯ РАЗВЕРТКА ЛИТЕР В гл. 3 рассмотрен общий метод изображения литер, основанный на матрице точек. Тот же метод используется и при построении раст- ровых изображений: точечное представление литеры помещается в заданную позицию буфера регенерации. Наименьшей сеткой, с по- мощью которой можно описывать литеры с приемлемым качеством, является сетка 5x7; для представления прописных и строчных литер необходима матрица размером 5X9. Для символов более высокого качества требуется еще большая матрица. 11.3.1. Пропорциональное размещение литер. Нижние выносные элементы Можно очень легко построить растровый генератор литер, обеспе- чивающий две возможности обычной типографской печати, которые отсутствуют во многих дисплейных системах: пропорциональное размещение литер и нижние выносные элементы букв. Пропорцио- нальное размещение — это изменение интервалов между центрами литер с учетом различия в их размерах по ширине, например между I и йу. В случае пропорционального размещения не все литеры будут занимать одно и тоже число растровых единиц по горизонтали. Ниж- ние выносные элементы (части литер, опущенные ниже базовой ли- нии, как в строчных буквах g, /, р, q и у) изображаются путем сдвига описывающих их матриц вниз по отношению к другим литерам (рис. 11.8).
Алгоритмы и программное обеспечение растровой графики 147 Рис. 11.8. Литеры с верхним (А) и нижним (g) выносными элементами, а также узкая литера (i). Связанный с каждой литерой код представляет собой матрицу, которая состоит из разрядов, описывающих литеру. Значение true каждого разряда в матрице свидетельствует о том, что пэл с соот- ветствующими координатами внутри матрицы является частью литеры и поэтому окрашивается в цвет, отличающийся от фона. Пропорциональное размещение литер и их нижние выносные эле- менты реализуются путем связывания с каждой точечной матрицей, определяющей литеру, ее ширины, а также булевой переменной, истинность которой означает, что литера имеет нижний выносной элемент. Следующая программа на Паскале показывает, как можно задавать и изображать литеры: type char-def = record char-array, array [0..6, 0..8] of boolean; width: integer; {ширина литеры—1} descend: boolean {true, если есть нижний выносной элемент} end; charset = array[32..1271 of char-def; {печатаемые литеры в коде ASCII) procedure CHARACTER^ definition: char-def; { описание изображаемой литеры) x,y: integer; {нижннй левый угол литер, не имею- щих нижних выносных элементов} value: integer); {значение, которое заносится в бу- фер регенерации} var у-offset,i,j.’integer; begin if definition.descend then y-offset := —3 else y-offset := 0 for i :— 0 to definition.width do for j := 0 to 8 do if definition.char-array[i,l] then WRITE-PIXEL(x-f-i, y+l+ysffset, value) end {CHARACTER}
148 Глава 11 11.3.2. Выравнивание литер Рис. 11.9. Форма «М» и ее описание с помощью четырех уровней яркости. В процедуре CHARACTER предполагается, что все пэлы, со- ставляющие литеру, высвечиваются с одним и тем же значением яркости. Однако выше при рассмотрении " выравнивания мы видели, что для проведе- ния достаточно ровных диагональных от- резков необходимо менять яркость про- порционально площади пэла, покрытой изображаемым объектом. Если в качестве объекта, накладываемого на пэлы, взять литеру (рис. 11.9), можно вычислить зна- чение яркости для каждого пэла. Это бы- ло проделано для изображения на рис. 11.9 в предположении, что имеются уровни яркости от 0 до 3. Процедуру CHARACTER можно моди- фицировать, чтобы путем замены массива булевых переменных на массив целых чи- сел (содержащий информацию о подсветке пэлов) заносить различные значения ярко- сти в буфер регенерации. Тогда тело итерационного процесса при- мет вид if definition.char „аг ray[i,j] > О then WRITE-PI XEL(x-j-i, y-f- j-\-y ..offset, definition.char „array [/,/]) Последний параметр процедуры CHARACTER (value) больше не используется: он неявно присутствует в описании литеры. В даль- нейших модификациях, которые оставляем читателю выполнить в качестве упражнения, значения в def ini tion.char „array рассматри- ваются как дробные величины, используемые для масштабирования яркости, которая устанавливается параметром value. При этом процедура WRITE„PIXEL заменяется процедурой PIXEL„AT_ ADDR. 11.4. РАСТРОВАЯ РАЗВЕРТКА ОКРУЖНОСТЕЙ Существует несколько очень простых, но неэффективных спосо- бов преобразования окружностей в растровую форму. Рассмотрим для простоты окружность с центром в начале координат, для кото- рой x2+y2=/?2. Решая это уравнение относительно у, получим у = ±/Яг—х2. (И.Ю)
Алгоритмы и программное обеспечение растровой графики 149 Чтобы изобразить четвертую часть окружности, можно увеличивать х с единичным шагом от 0 до R и на каж- дом шаге вычислять +у (остальные четверти изображаются симметрично). Этот метод работоспособен, но не эф- фективен, поскольку в него входят операции умножения и извлечения квадратного корня. Более того, при значениях х, близких к R, в окруж- ности появляются заметные незапол- ненные промежутки, так как при этих значениях х тангенс угла наклона касательной к окружности стремится к бесконечности (рис. 11.10). Неэф- фективным методом, при использова- Рис. 11.10. Четвертая часть ок- ружности, построенная с исполь- зованием единичных шагов по х и вычисленная с последующим округлением значений у. нии которого также не удается избе- жать больших разрывов, является изображение R cos 0 или R sin 9 путем пошагового изменения 9 от 0 до 90°. 11.4.1. Восьмисторонняя симметрия Процесс преобразования окружностей в растровую форму мож- но улучшить, если полнее использовать симметрию окружности. Рассмотрим сначала окружность с центром в начале координат. Если точка (х, у) лежит на окружности, очень просто вычислить семь дру- гих точек, принадлежащих окружности (рис. 11.11). Поэтому, если применять уравнение (11.10) или некоторый другой более эффектив- ный механизм вычисления у по значениям х из диапазона 0 — R/yr 2 (точка, в которой х=у), можно получить еще семь дополнительных точек на окружности; этот диапазон х соответствует дуге окружно- сти 45°, показанной на рисунке. Точки окружности с центром в на- чале координат можно изобразить с помощью процедуры CIRCLE. POINTS (эту процедуру легко обобщить на случай окружностей, имеющих произвольные центры): procedure CIRCLE_POINTS(x, у, value', integer); begin WRITE.P!XEL(x, y, value)-, WRITE_PIXEL(y, x, value)', WRITE.PIXEL(y, —x, value); WRITE_PIXEL(x, —y, value); WRITE _PIXEL(~x, —y, value); WRITE.PI XEL(—y, —x, value); WRITE.PIXEL(—y, x, value); WRITE.PIXEL(—x,y, value) end {CIRCLE.POINTS}
150 Глава 11 11.4.2. Алгоритм Брезенхэма для окружностей Брезенхэм [59] разработал пошаговый генератор дуг, который более эффективен, чем каждый из рассмотренных выше методов. С помощью этого алгоритма, предназначенного для использования на графопостроителях, генерируются все точки окружности с цент- ром в начале координат путем пошагового обхода вокруг окружности Рис. 11.12. Контрольные точки для ге- нератора окружностей Брезенхэма. Рис. 11.11. Восемь симметричных точек на окружности. на 360°. Рассмотрим адаптацию алгоритма на случай обхода лишь дуги окружности 45° от х=0 до х=7?/]/"2 и воспользуемся процеду- рой CIRCLE_POINTS для изображения точек на всей окружности. На каждом шаге алгоритм выбирает точку Pt(xi, yt), которая яв- ляется ближайшей к истинной окружности, и поэтому ошибка будет близкой к нулю; т. е. |D(P;)| минимизируется на каждом шаге. Как и в случае алгоритма Брезенхэма для отрезков прямых, основ- ная идея здесь заключается в выборе ближайшей точки при помощи управляющих переменных, значения которых можно вычислить в пошаговом режиме с использованием лишь небольшого числа сло- жений, вычитаний и сдвигов. Для выбора точки достаточно проана- лизировать знаки переменных. Какой же требуется анализ? Рассмотрим рис. 11.12, на котором показан небольшой участок сетки пэлов, а также различные воз- можные способы (от А до 0) прохождения истинной окружности че- рез сетку1’. Предположим, что точка была выбрана как бли- жайшая к окружности при х=х/_1. Теперь найдем, какая из точек (Tt или St) расположена ближе к окружности при х=хг_1+1. 1) В Действительности алгоритм Брезенхэма для случая окружностей не огра- ничивается рассмотрением лишь дуги 45° (как здесь) и поэтому в нем анализируют- ся случаи F и G, в которых может быть выбрана точка, расположенная непосред- ственно под
Алгоритмы и программное обеспечение растровой графики 151 Выражения D (S,.) = [(X,-. + I)2 + Ол- J3]—, (11.11) D (Т:) = [(х^ + I)2 + (у^-I)2]-/?2 (Н.12) описывают разности между квадратами расстояний от начала ко- ординат (центра окружности) до 5г (или до Tt) и до истинной окруж- ности, Если |D(Si)|i>|D(T'j)|, то Тг ближе к реальной окружности, чем 5г. Наоборот, если |D(Si)|<p(7’i)|, то 5г ближе к этой окруж- ности, чем Тг. Если ввести НЯ(5О(Л)1- точка Тt будет выбираться при d;^0, в противном случае будет ус- танавливаться S;. Для случая С D(St)>0, поскольку Sz лежит за пределами ок- ружности, a D(Ti)<0, так как Тг находится внутри окружности, по- этому dt=D(St)+D(Tt). (11.13) Если d^O, будет выбрана точка Ту, в противном случае (dt<0) вы- бирается S;. Рассмотрим случаи А и В, а также соответствующее им значение di из выражения (11.13). Ясно, что О(Т{)<20, поскольку точка Т{ расположена внутри истинной окружности. Аналогично О(5г)^0 (равенство соответствует случаю В, неравенство — случаю А). Сле- довательно, в случаях А и В dt<0. Те же правила выбора, что и в случае С, приведут поэтому с помощью выражения (11.13) к альтер- нативе S;. И наконец, рассмотрим случаи D и Е. Прежде всего О(5г)>0, поскольку Sf лежит за пределами истинной окружности. Аналогич- но £)(Тг)^0 (равенство достигается в случае D, неравенство — в случае Е). Следовательно, в случаях D и Е d^Q, поэтому правила выбора, полученные выше для случая С, применимы также и здесь: если d^O, выбираем точку Т;. Пока мы еще не закончили процесс: для вычисления управляю- щей переменной dz в том виде, как она выражена сейчас, тре- буется несколько умножений. Однако алгебраические преобразова- ния показывают, что d1=3—2R. Если выбирается S; (когда d;<0), di <.i=d;+4xj_1+6; если же выбирается Тг (когда d^O), di+i=d|+4(Х; _ j—yt _ i)+10. Эти частные алгебраические результаты, а также приведенный ниже
152 Глава 11 алгоритм были получены Дж. Мичнером с помощью метода Бре- зенхэма. В выражение (11.13) для dt подставляются выражения (11. 11) и (11.12). Заменяя i на i—1, получаем выражение для d;_i, за- тем формируем разность di—dt_t и оцениваем ее для каждого из двух возможных перемещений. На этих результатах построена сле- дующая процедура1’: procedure MICH _CIRCLE(radlus, value', integer); {предполагается, что центр окружности находится в начале координат) var х, у, d: integer; begin x:= 0; y:=radius', d'.= 3—2*radius; while x< у do begin CIRCLE-POINTS(x, y, value)', if d < 0 then d := d-(-4*x-{-6 {выбор S) else begin {выбор T — приращение у} d := d-{-4*(x—f/) +10; У := «/—1 end x := x+ 1 end {while} if x~-y then CIRCLE-PCINTS(x, у, value)', end {MICH-CIRCLE} Если процедура CIRCLE-POINTS вызывается при x=y или r=l, каждый из четырех пэлов устанавливается дважды. В случае растрового дисплея это не создает ника- ких трудностей. Однако, если изображе- ние фиксируется на фотопленке, яркость таких точек вследствие двойной экспози- ции от источника света была бы выше, чем для остальных точек. На рис. 11.13 показана восьмая часть окружности ра- диусом 17, построенная с помощью рас- смотренного алгоритма (сравните эти результаты с рис. 11.10). Для изображения окружностей, а также более общих кривых, чем ок- ружности, были разработаны другие методы [17, 128, 223, 445]. Джордан, Леннон и Холм [248] предложили общий и эффективный метод построения боль- шинства кривых, представимых в ви- де f(x, у)=0 и имеющих непрерывные производные. Позднее было показано, что этот метод обладает ограничениями [30, 383]. Осо- быми кривыми являются, в частности, конические сечения (в том Рис. 11.13. Одна восьмая ок- ружности, построенная с по- мощью алгоритма Брезенхэ- ма; вторая восьмая часть построена симметрично. 4 Другой аналогичный подход, предложенный Брезенхэмом, описан в упраж- нении 11.29.
Алгоритмы и программное обеспечение растровой графики 153 числе окружности) и прямые линии. Хотя для этих частных случа- ев алгоритм можно упростить, действий в нем на одну итерацию тре- буется все-таки больше, чем в алгоритмах Брезенхэма для отрезков и окружностей. Этот факт немаловажен, если учесть ограничения на быстродействие, накладываемые алгоритмами разложения в растр. В алгоритме Питвэя [373] (хотя его вывод более сложен) на каждую итерацию требуется меньше вычислений, чем в алгоритме Брезенхэма в его общей формулировке с обходом вокруг полной окружности (360°). По быстродействию этот алгритм эквивалентен алгоритму, приведенному здесь, когда производится обход лишь дуги, равней 45°. 11.5. ЗАПОЛНЕНИЕ ОБЛАСТИ Область представляет собой группу примыкающих друг к дру- гу связанных пэлов. Области можно создавать и определять, либо присваивая некоторое значение всем пэлам, принадлежащим обла- сти, либо определяя одинаковым образом пэлы, окружающие об- ласть. На рис. 11.14 и 11.15 приведены примеры таких областей: на рис. 11.14 показаны области, образованные черными пэлами, а на рис. 11.15 — области, которые окружены границей, состоящей из черных пэлов. Все эти четыре области, за исключением одной, имеют внутренние отверстия и все области невыпуклые. Другой спо- соб определения области, основанный на многоугольниках, рассмат- ривается в последующих разделах. Во многих интерактивных растровых приложениях, особенно в машинных мультипликации и «живописи», пользователь интер- активно определяет области, состоящие из примыкающих друг к другу пэлов. Эти области должны быть заполнены пэлами, имею- щими заданное значение, которое обозначим через new_value. В некоторых случаях требуется заполнить область узором, образо- ванным пэлами, которые принимают различные (а не одно-единст- венное) значения. Используя эту возможность, можно строить рас- крашенные изображения (цветная вклейка 8). Пользователь в ин- терактивном режиме схематически очерчивает область, затем выби- рает цвет и указывает на произвольную точку области. В ответ на
154 Глава 11 Рис. 11.15. Гранично-определенные 4-связные области, которые окружены грани- цами, состоящими из черных пэлов. Пэлы, находящиеся за пределами границы, могут принимать те же значения, что и граничные пэлы. это ЭВМ закрашивает область. Ту же последовательность действий можно использовать для построения гистограммы, в которой столбцы будут иметь различные цвета. 11.5.1. Типы областей Области, заданные своими внутренними значениями, называют- ся внутренне-определенными', все пэлы в области имеют значение old_value, и ни один из пэлов, принадлежащих границе, не при- нимает этого значения. Алгоритмы, которые работают с такими об- ластями, чтобы установить все их пэлы в new _ value, называются внутренне-заполняющими алгоритмами. Области, задаваемые границей, называются гранично-определен- ными: пэлы, принадлежащие границе, имеют значение boundary _ value, в то время как пэлы внутри области принимают значение, от- личное от new_value. Алгоритмы, работающие с такими областя- ми, чтобы установить все определяющие их значения в new_va- lue, называются гранично-заполняющими алгоритмами. Прежде чем рассматривать алгоритмы, необходимо более точно определить понятие связной области, образованной примыкающи- ми друг к другу пэлами. Это важно, поскольку нас интересуют два типа областей: 4-связные и 8-связные. Алгоритмы для 8-связных об- ластей будут применимы и к 4-связным областям, обратное неверно. Каждый из пэлов 4-связной области достижим из любого другого пэла этой области с помощью произвольной последовательности пе- ремещений на один пэл из четырехэлементного набора: вверх, вниз, влево, вправо. На рис. 11.14 две внутренне-определенные 4-связ- ные области обозначены черным цветом. Отметим, что внутри об- ласти (случай б) допустимы отверстия. На рис. 11.15 изображены две гранично-определенные 4-связные области, границы которых ок- рашены черным цветом, а внутренние части — белым и серым.
• Алгоритмы и программное обеспечение растровой графики 155 В этом случае пэлы, лежащие внутри области, могут иметь любое значение, которое отличается от черного. На рис. 11.15, а внутрен- нее прямоугольное поле определяет одну область — участок за пре- делами этого прямоугольника,— но внутри внешней границы за- дает вторую (внешнюю) область, в которой внутренний прямоуголь- ник образует отверстие. На рис. 11.15, б внутренние черные пэлы также образуют отверстия в области. Каждый из пэлов 8-связной области достижим из любого дру- гого пэла этой области с помощью произвольной последовательно- сти перемещений на один пэл из восьмиэлементного набора шагов Рис. 11.16. Внутренне-определенные 8-связные области, образованные чер- ными пэлами. Рис. 11.17. Гранично-определенные 8- связные области, которые окружены границами, состоящими из черных пэлов. по вертикали, горизонтали или диагоналям. На рис. 11.16 показа- ны внутренне-определенные 8-связные области, состоящие из чер- ных пэлов, а на рис. 11.17 — гранично-определенные 8-связные об- ласти, которые окружены черными границами. Отметим, что гра- ница 8-связной области 4-связна, в то время как граница 4-связной области 8-связна. Алгоритм, который обрабатывает 8-связные области, должен легко «проходить» диагональные соединения между пэлами, выда- вая при этом неожиданные результаты. Например, если применить 8-связный алгоритм заполнения к верхнему левому квадрату, изоб- раженному на рис. 11.16, б, то нижний правый квадрат также бу- дет закрашен, даже если мы этого не хотим. В то же время исполь- зование для верхнего левого квадрата 4-связного алгоритма запол- нения не будет приводить к одновременному закрашиванию ниж- него правого квадрата. 11.5.2. Простой рекурсивный алгоритм Очень простым алгоритмом, позволяющим установить пэлы 4-связной внутренне-определенной области, является следующий: procedure FLOOD_FILL~4( x, у, {начальная точка 4-связной внут- ренне-определенной области}
156 Глава 11 old _value, {значение внутренне-определенной области} new-value'.integer); {значение, заменяющее old-value} {old_value не должно совпадать с new-value} begin if READ_PIXEL(x,y)=old_value then begin WRITE-PIXEL(x, y, new-value); {заменяем значение} {стараемся продвинуться в каждом из четырех направлений} FLOOD_FILL-4(x, у—1,old-value, new-value); FLOOD-FILL-4(x, y-\-I< old-value, new-value); FLOOD-FILL-4(x — 1, y, old-value, new-value); FLOOD-FILL-4(x-\-1, y, old-value, new-value) end end {FLOOD-FILL-4} Основная стратегия алгоритма прежде всего состоит в том, чтобы определить, является ли пэл с координатами (х, у) частью области, в которой мы еще не были и которая поэтому имеет значение old- value. Если это так, значение заменяется и затем проверяются че- тыре соседних пэла. Путем замены четырех направлений на восемь можно приспособить алгоритм для заполнения внутренне-определен- ной 8-связной области. Аналогично простым алгоритмом, позволяющим установить пэлы гранично-определенной 4-связной области, является следую- щий: procedure BOUNDARY-FILL-4{ х,у, {начальная точка гранично-определенной 4-связной области} boundary-value, {значение на границе} neau_oa/ue:integer); {заменяющее значение} {допускается, чтобы new-value = boundary-value; иначе ни один нз пэлов области не сможет быть установлен вначале в new-value} begin if READ-PIXEL(x,y)<>boundary-value {не достигается граница и} and READ_PIXEL(x, у) < >new-value {не достигаются ранее окра- шенные пэлы} then begin WRITE-PIXEL(x, у, new-value); {заменяем значение} {стараемся продвинуться в четырех направлениях} четыре вызова BOUNDARY-FILL-4 end end {BOUNDARY-FILL-4} Основная стратегия здесь та же, что и в предыдущем случае (FLOOD_FILL-4). Однако тест, является ли пэл с координата- ми (х, у) частью области, в которой мы еще не были, состоит теперь из двух шагов: сравнения с boundary_value (для определения при- надлежности пэла части области) и проверки на совпадение с new_ value (для выяснения, не был ли рассмотрен этот пэл ранее). Из это- го теста становится понятным ограничение, в соответствии с кото- рым ни один пэл области не может быть вначале установлен в new.
Алгоритмы и программное обеспечение растровой графики 157 value (за исключением случая new_value=boundary„value, в ре- зультате чего пэлы, уже установленные в new „value, будут ле- жать на границе области, а не являться ее частью). Эта процедура также может быть преобразована в процедуру BOUNDARY. FILLS путем замены четырех направлений на восемь. 11.5.3 . Уменьшение глубины рекурсии Рассмотренные выше процедуры просты, но существенно рекур- сивны, а наличие многих уровней вложенности требует времени и может вызывать переполнение стека, когда отведенная память огра- ниченна. Имеются значительно более эффективные методы заполне- ния области [290, 433, 366]. Логически они значительно сложнее, однако, за исключением разве что вырожденных случаев, никаких осложнений со стеком не возникает. Основной алгоритм оперирует с полосами, которые представляют собой горизонтальные группы прилежащих друг к другу пэлов внутри области. С обоих концов полосы ограничиваются пэлами, имеющими значение boundary- value, и не содержат пэлов со значением new.value. Полосы за- полняются итеративно в цикле. Полоса определяется своим правым пэлом; по крайней мере одна полоса из каждой незаполненной части области находится в стеке. Алгоритм выполняется следующим образом: сначала заполня- ется горизонтальная полоса примыкающих друг к другу пэлов, ко- торая содержит начальную точку. Затем, чтобы найти самый пра- вый пэл каждой полосы, справа налево проверяется строка, преды- дущая по отношению к только что заполненной полосе. Адреса най- денных пэлов заносятся в стек. То же самое выполняется и для стро- ки, следующей за последней заполненной полосой. Когда полоса обработана таким образом, в качестве новой начальной точки ис- пользуется пэл, адрес которого берется с верхнего элемента стека. Если стек пуст, алгоритм завершается. На рис. 11.18, взятом из статьи Смита [433], показано, как работает алгоритм. На рис. 11.18, а заполняется полоса, содержащая начальную точку, и адреса за- нумерованных пэлов помещаются в стек. Эти номера определяют расположение элементов в стеке: первый элемент находится внизу и обрабатывается последним. На рисунке показана только часть процесса заполнения области. Надеемся, что читатель шаг за ша- гом проследит этот процесс для оставшейся части области. 11.6. ОТСЕЧЕНИЕ МНОГОУГОЛЬНИКОВ Одно из преимуществ, растровой графики заключается в том, что можно изображать закрашенные области. В предыдущем разделе было показано, как заполнять области, которые определяются зна- чениями пэлов в буфере регенерации. Во многих приложениях, од-
158 Глава 11 В 8 3 е Рис. 11.18. Заполнение гранично-определенных областей; пэлы с номерами по- мещаются в стек нако, требуется закрашивать области, задаваемые многоугольни- ками, вершины которых хранятся в прикладной структуре данных. Но многоугольники должны сначала подвергнуться видовому пре- образованию, пройти процесс отсечения, затем должны быть пере- ведены в систему координат устройства; лишь после этого они могут быть закрашены. В этом разделе рассмотрена операция отсечения, а в следующем — процесс заполнения многоугольников. Алгоритм, который отсекает многоугольник и порождает но- вый многоугольник (или многоугольники), должен уметь обраба- тывать самые различные случаи (рис. 11.19). Случай, показанный
Алгоритмы и программное обеспечение растровой графики 159 Рис. 11.19. Примеры отсечения многоугольников. на рис. 11.19, а, особенно сложен: в результате отсечения невыпук- лого многоугольника получаются два отдельных многоугольника. Работа, которую необходимо выполнить при отсечении, достаточно большая. Каждое ребро многоугольника следует сопоставить с каж- дой из границ окна, при этом должны быть добавлены новые ребра, а существующие — отброшены, сохранены или разделены. Иногда в результате отсечения одного многоугольника получается сразу несколько многоугольников. Требуется упорядоченный способ об- работки всех этих случаев. 11.6.1. Алгоритм Сазерленда — Ходгмана В алгоритме отсечения многоугольников Сазерленда и Ходгмана [453] применяется стратегия «разделяй и властвуй», которая позво- ляет решение общей задачи свести к решению ряда простых и по- хожих подзадач. Примером такой подзадачи является отсечение мно- гоугольника относительно одной отсекающей границы. Последова- тельно проведенные отсечения относительно четырех таких границ, каждая из которых является стороной окна (рис. 11.20), эквивалент- ны отсечению прямоугольным окном. Реальный алгоритм на самом деле более сложен: можно произ- вести отсечение многоугольника (выпуклого или невыпуклого) от- носительно произвольного выпуклого отсекающего многоуголь- ника, а в случае трех измерений — выполнять отсечение многоуголь- ников по выпуклым многогранным объемам, составленным из пло- скостей. На вход алгоритма поступает последовательность вершин многоугольника Vi, ц8, ..., vn. Ребра многоугольника проходят от
160 Глава 11 Лебоя отсекающая граница Рис. 11.20. Последовательные шаги отсечения многоугольников. а — до начала отсечения; б — отсечение по правой границе; в — отсечение по иижней гра- нице; г — отсечение по левой границе; д — отсечение по верхней границе. Усекаемый много угольник Отсекающая граница. Внутри Вне Случай 3 (_нет Выхода) Случай 1 Случай 2 Рис. 11.21. Четыре случая, возникающие при отсечении многоугольников. Vj к ui + 1 и от vn к Vi. С помощью алгоритма производится отсечение относительно ребра и выводится другая последовательность вер- шин, описывающая усеченный многоугольник. Алгоритм, называемый здесь S_H_CLIP, «обходит» вокруг многоугольника от vn к 14 и затем обратно к v„, проверяя на каждом шаге соотношение между последовательными вершинами и отсекаю- щей границей. Нуль, одна или две вершины добавляются в выход- ной список вершин, определяющий усеченный многоугольник. Должны быть проанализированы четыре возможных случая (рис. 11.21). Рассмотрим изображенное на рис. 11.21 ребро многоугольника, соединяющее вершину s с вершиной р. В случае 1, когда ребро мно- гоугольника лежит полностью внутри отсекающей границы, к вы- ходному списку добавляется вершина р. В случае 2 в качестве вер-
Алгоритмы и программное обеспечение растровой графики 161 шины выводится точка пересечения i, поскольку ребро пересекает границу; начальная точка уже была выведена при анализе случая 1. В случае 3 обе вершины находятся за пределами границы и ни одна из них не выводится. В то же время в случае 4 к выходному списку добавляются и точка пересечения i и вершина р. На вход процедуры S.H .CLIP, приведенной ниже, поступает массив вершин in.v, а на выходе формируется другой массив вер- шин out.v. С целью упрощения программы мы не рассматриваем Рис. 11.22. Отсекающая граница, заданная направленным отрезком от Pi к Р2. Точка Р3 находится внутри (_PiP2X Р1Р3 имеет отри- цательную г-компоненту), а точка Pi расположена вне (РгР2Х РгР 4 имеет положительную г компонен- ту)- Рис. 11.23. Усеченный много- угольник (с восемью ребрами) проверки на ошибочные выходы за границы массива, а используем для помещения вершины в out.v процедуру OUTPUT (out.v). Функция INTERSECT (s, р, clip .boundary) вычисляет пересе- чение ребра многоугольника, соединяющего вершины s и р, с отсе- кающей границей cliр.boundary, которая задается двумя ле- жащими на ней точками. Функция INSIDE принимает значение true, если вершина находится во внутренней части границы; «внут- ри» здесь означает справа от отсекающей границы, если смотреть из первой точки, определяющей границу, на вторую (рис. 11.22). Проверка основана на векторном произведении вектора, проведен- ного из точки Pi в точку Р2, на вектор, соединяющий точку Рг с ис- следуемой точкой. Если направление векторного произведения сов- падает с положительным направлением оси г, точка лежит слева и, следовательно, вне; если же оно направлено противоположно оси z, точка находится внутри. Векторным произведением двух векторов и=(иж, цу) и ш=(шгс, шу), принадлежащих плоскости ху, является вектор, значение z-компоненты которого есть vxwtJ—vywx. Если эта величина отрицательна, проверяемая точка расположена внутри. В нашем случае мы положили v=PtP2 и w^PiP^ или PiPs.
162 Глава 11 type vertex = array [1..2] of real; boundary = array [1..2] of vertex; vertex-array = array [l..max] of vertex; {max есть описанная константа} procedure S_H_CLIP( in_v:vertex-array, out _v;vertex-array, in-length;integer, out -length:integer clip-boundary’.boundary); var i,p,s;vertex, j: integer; {входной массив вершин} {выходной массив вершин} {фактическая длина in_v} {фактическая длина out_v} {ребро, относительно которого бу- дет проводиться отсечение} begin out- length := 0; s := in_v[in-length); for / := Ito in-length do begin p := in-v [j]; {теперь s и p соответствуют вершинам, показанным на рис. 11.21} if INSIDE(p, clip-boundary) {используется в OUTPUT} {начинаем с последней вершины in_v} then {случаи 1 и 4} if INSIDEfs, clip-boundary then OUTPUTS) {случай 1} else begin {случай 4} i ; = INTERSECT^, p, clip-boundary); OUTPUT(i); OUTPUT(p) end else if end end {случаи 2 и 3} INSIDE(s, clip-boundary) then begin {случай 2} i INTERSECT(s, p, clip-boundary); end {никаких действий для случая 3} := р {переходим к следующей паре вер- шин} {цикл for} {S-H.CLIP} s Сазерленд и Ходгман показали, как структурировать этот ал- горитм, чтобы он был реентерабельным [453]. Как только алгоритм отсечения вычислил вершину, он обращается к себе же, передавая эту вершину как параметр, и производит отсечение относительно сле- дующей отсекающей границы. Поэтому не требуется промежуточ- ной памяти для частично усеченного многоугольника. По существу многоугольник проходит по «конвейеру отсекателей», причем каж- дый шаг может быть реализован аппаратно без использования бу- ферного пространства. 11.6.2. Алгоритм Вейлера — Азертона При отсечении многоугольника (рис. 11.19, а) возникает проб- лема, связанная с тем, что появляются ребра, частично совпадаю- щие с границей окна (рис. 11.23). Лишние ребра можно устранить, введя дополнительную обработку или воспользовавшись более об-
Алгоритмы и программное обеспечение растровой графики 163 щим (и более сложным) алго- ритмом Вейлера — Азертона [490]. С его помощью произво- дится отсечение одного невыпук- лого многоугольника по другому невыпуклому многоугольнику, причем внутри каждого из этих многоугольников допустимы от- верстия. Алгоритмы Сазерлен- да—Ходгмана и Вейлера—Азер- тона могут быть приспособлены для вывода как внутренней, так и внешней частей усеченного многоугольника. В алгоритме Вейлера—Азер- тона обрабатываемый много- 12 13 Обрабатываемый 11 Рис. 11.24. Отсечение с помощью мето- да Вейлера — Азертона: в качестве на- чальной точки можно взять любую точ- ку; в результате получаются два много- угольника (заштрихованные на ри- сунке). угольник отсекается по грани- цам отсекающего многоугольника путем отслеживания в направ- лении по часовой стрелке гра- ницы обрабатываемого мно- гоугольника вплоть до ее пересечения с отсекающим мно- гоугольником. Если ребро входит в отсекающий многоуголь- ник, то алгоритм продолжает обход вдоль ребра обрабатываемого многоугольника. Если же ребро выходит из отсекающего много- угольника, производятся поворот направо и отслеживание отсека- ющего многоугольника. Однако в любом случае точка пересечения запоминается и используется для обеспечения гарантии, что все пути пройдены ровно один раз. На рис. 11.24 приведена последо- вательность шагов, которую выполняет алгоритм в ситуации, по- казанной первоначально на рис. 11.19, а. 11.7. РАСТРОВАЯ РАЗВЕРТКА МНОГОУГОЛЬНИКОВ После того как многоугольники усечены и преобразованы в сис- тему координат растрового устройства, их можно разложить на стро- ки и поместить в буфер регенерации так, чтобы ребрам и внутрен- ним частям многоугольников присваивались желаемые значения. Основная идея заключается в том, чтобы в каждый момент времени порождать и заполнять лишь одну строку развертки (строку пэ- лов). Алгоритмы, работающие по этому принципу, называются алго- ритмами построчного сканирования.
164 Глава 11 11.7.1. Заполнение области и многоугольника Между заполнением области и преобразованием многоуголь- ника в растровую форму имеется существенное различие. В случае заполнения область задается значениями пэлов в буфере регенера- ции. При растровой развертке многоугольника область определя- ется вершинами многоугольника, причем не делается абсолютно никаких предположений о начальных значениях, которые нахо- дятся в буфере регенерации. Заполнение области для реализации развертки многоугольника можно использовать лишь в частных случаях. С этой целью вначале в буфер регенерации следует зане- сти значение old_value-, затем преобразовать ребра многоуголь- ника в растровую форму, присвоив им при этом значение bounda- ry_value; найти некоторую внутреннюю точку многоугольника (х, у) и обратиться к процедуре BOUNDARY_FILL_4 (х, у, boundary „value, new_value) С другой стороны, ребра можно перевести в растровую форму, ис- пользуя некоторое резервированное значение пэла для ребер много- угольника. После того как область заполнена с помощью процеду- ры BOUND ARY „FILL „4, ребра снова подвергнутся разложе- нию в растр, но на этот раз им будет присвоено нерезервирован- ное значение. Однако ни одно из этих решений не является удовлет- ворительным, поскольку требуемые начальные условия практиче- ски никогда не выполняются, использование специально выделен- ного значения для ребер ограничивает гибкость, а доступ к буферу регенерации может оказаться затрудненным или слишком медлен- ным, либо этот буфер может вообще отсутствовать. 11.7.2. Использование списка вершин и когерентности сканирующих строк Алгоритм развертки, описанный ниже, позволяет устранить все эти трудности, так как работает не с буфером регенерации, а со списком вершин многоугольника. На рис. 11.25, который иллюстри- рует процесс сканирования многоугольника, показаны многоуголь- ник и одна сканирующая строка, проходящая через него. Необхо- димо определить, какие пэлы этой строки находятся внутри много- угольника (в нашем случае 2—4 и 9—13), и присвоить им соответ- ствующие значения. Повторяя данный процесс для каждой скани- рующей строки, пересекающей многоугольник, мы преобразуем в растровую форму весь многоугольник. Простым способом выделения пэлов сканирующей строки, попа- дающих внутрь многоугольника, является поочередная проверка всех пэлов. Однако такой процесс неэффективен, поскольку после- довательность соседних пэлов обычно принадлежит многоуголь-
Алгоритмы и программное обеспечение растровой графики 165 Рис. 11.25. Многоугольник и сканирующая строка. нику. Это наблюдение основывается на понятии пространственной когерентности: при перемещении от пэла к пэлу или от одной ска- нирующей строки к следующей рассматриваемый многоугольник в большинстве случаев остается постоянным. Такая когерентность, безусловно, полезна, так как можно искать только те пэлы, в кото- рых когерентность нарушается. В рассматриваемом случае мы име- ем когерентность сканирующих строк; ниже мы будем пользовать- ся также когерентностью ребер. На сканирующей строке 8 (рис. 11.25) внутри многоугольника находятся две полосы пэлов, которые можно закрасить с помощью трехшаговой процедуры: 1. Найти пересечения сканирующей строки со всеми ребрами многоугольника. 2. Упорядочить точки пересечений по возрастанию координаты х. 3. Раскрасить все пэлы между парами точек пересечения. Для рис. 11.25 в упорядоченном списке х-координат точек пере- сечения будут числа (2, 4, 9, 13). Поэтому закрашиваются все пэлы в интервалах 2—4 и 9—13. На первом шаге производятся простые вычисления пересечений каждой сканирующей строки с каждым ребром многоугольника, пересекающим эту строку. Горизонтальные ребра не могут пересе- кать сканирующие строки и поэтому не рассматриваются. Следую- щие два шага процесса — сортировка и закраска,— по-видимому, также просты для выполнения. 11.7.3. Пересечения вершин (особый случай) При сортировке и закраске пэлов могут возникнуть трудности. Если число точек пересечения в отсортированном списке нечетно, процедура раскраски работает неправильно. Это возможно, когда
166 Глава 11 Рис. 11.26. Укорачивание ребра многоугольника. сканирующая строка пересекает вершину, в результате чего в спи- сок пересечений заносятся две точки пересечения. Рассмотрим, на- пример, строку с у=3 (рис. 11.25). Она пересекается с ребрами мно- гоугольника в точках 2, 2 и 10. Тогда последовательность пэлов от 2 до 2 (т. е. пэл в точке х=2, у=3) закрасилась бы, совокупность пэлов от 3 до 9 осталась бы незакрашенной, а последовательность от 10 до правой границы буфера закрасится. На самом же деле сле- довало бы закрасить лишь группу пэлов от 2 до 10. Очевидно, прохождение сканирующей строки через вершину следует считать за одно пересечение. Однако это не приводит к пра- вильным результатам в случаях, когда с вершинами пересекаются строки 1, 7, 9 или 11. Разумным является решение, в соответствии с которым пересечения с вершинами, представляющими собой ло- кальные минимумы и максимумы, считаются как два пересечения, а пересечения со всеми другими вершинами учитываются как одно пересечение. В вершине достигается локальный минимум, когда «/-координаты предыдущей и последующей вершин больше, чем у рассматриваемой вершины. 'Аналогично определяется локальный максимум. Вершины, расположенные на сканирующих строках 1 и 7, представляют собой локальные минимумы, а вершины на строках 9 и 11 — локальные максимумы. Все они учитываются как два пересечения с соответствующими сканирующими строками, а вершины, через которые проходят строки 3 и 5, считаются за одно пересечение. Убедиться, что такие промежуточные вершины пере- секаются только один раз, довольно легко: одно из смежных ребер укорачивается до того, как вычисляются пересечения (рис. 11.26). Такое укорачивание проводится только в том случае, если вершина лежит на сканирующей строке, что случается всегда, когда коор- динаты вершин — целые числа, и редко, если координаты вершин представлены с более высоким разрешением, чем сама растровая ветка.
Алгоритмы и программное обеспечение растровой графики 167 11.7.4. Когерентность ребер и алгоритм построчного сканирования Первый шаг процедуры, т. е. вычисление пересечений, может оказаться медленным. Каждое ребро многоугольника требуется срав- нивать с каждой сканирующей строкой. Во многих случаях лишь небольшое число ребер будет представлять интерес. Более того, необходимо отметить, что многие из ребер, пересекаемых строкой i, будут пересекаться также строкой i+1. Такая когерентность ре- бер (аналогичная когерентности сканирующих строк, рассмотрен- ной выше) проявляется всякий раз, когда сканирующие строки пе- ресекают ребро. При переходе от одной строки к другой можно вы- числить новую х-координату точки пересечения ребра, используя х-координату старой точки пересечения (аналогично случаю раз- вертки отрезков): xi+1 = Xi + ^, (Н.14) где т — тангенс угла наклона ребра. Параметр т равен Az//Ах, a Az/=1, так что 1/т=Ах. Можно воспользоваться когерентностью ребер и устранить лиш- ние сравнения сканирующих строк и ребер путем построчного раз- ложения многоугольника в растр снизу вверх (или сверху вниз), используя алгоритм построчного сканирования. Для каждой ска- нирующей строки рассматриваются только те ребра, которые пере- секают строку. Они задаются таблицей активных ребер (ТАР). При переходе к следующей строке новые значения х-координат точек пересечения вычисляются с помощью уравнения (11.14), все новые ребра, пересекаемые следующей сканирующей строкой, добавляют- ся в ТАР, а те ребра, которые содержатся в ТАР, но не пересекают- ся со следующей строкой, удаляются. Ребра, содержащиеся в ТАР, упорядочиваются по значениям х-координат точек пересечения, по- этому можно легко находить последовательности пэлов, которые сле- дует закрасить. Для эффективной реализации включения ребер в ТАР введем таблицу ребер (ТР), которая содержит все ребра, упорядоченные по значениям их меньших //-координат. ТР обычно строят с помощью групповой сортировки п, выделяя столько же групп, сколько име- ется сканирующих строк. Внутри каждой группы ребра располага- ются в порядке возрастания х-координат наиболее низких точек. Этот порядок устанавливается с помощью сортировки вставками. Каждый элемент ТР содержит большую у-координату ребра (//шах), х-координату нижней точки (xmin) и приращение х, используемое для перехода от одной сканирующей строки к следующей (1/т). Согласно Кнуту (Кнут Д. «Искусство программирования для ЭВМ. Том 3. Сортировка и поиск».— М.: «Мир», 1978), групповая сортировка является одной из разновидностей распределяющей сортировки.— Прим, перев.
168 Глава 11 Рис. 11.27. Отсортированная группами таблица ребер, изображенных на рис. 11.25. Указатель Xmax х 1 т Указатель б Рис. 11.28. Таблица активных ребер. а — сканирующая строка 9; б — сканирующая строка 10. На рис. 11.27 показано, как были бы отсортированы шесть ребер, изображенные на рис. 11.25, в предположении, что соответствую- щие ребра были предварительно укорочены на одну строку каждое, чтобы избежать двойных пересечений. На рис. 11.28 приведена ТАР в случае сканирующих строк 9 и 10 для многоугольника, показан- ного на рис. 11.25. После того как ТР сформирована, алгоритм построчного скани- рования складывается из следующих шагов: 1. Установить у, равным минимальному значению координаты у среди элементов ТР, т. е. совпадающей с у-координатой первой не- пустой группы.
Алгоритмы и программное обеспечение растровой графики 169 2. Инициализировать ТАР, сделать ее пустой, 3, Повторять шаг 3 до тех пор, пока ТАР и ТР не станут пу- стыми: 3.1. Слить информацию из группы у в ТР с информацией в ТАР, сохраняя упорядочение пох-координате. 3.2. Занести желаемые значения в пэлы на сканирующей стро- ке, определяемой текущим значением у, используя пары х-координат из ТАР. 3.3. Удалить из ТАР те элементы, в которых у=утах. 3.4. Для всех элементов, содержащихся в ТАР, заменить х на х+1/m. Тем самым пересечение со следующей сканирую- щей строкой заносится в каждый элемент ТАР. 3.5. Поскольку на предыдущем шаге могла нарушиться упоря- доченность ТАР по х, провести пересортировку ТАР. 3.6. Увеличить у на 1 и, таким образом, перейти к следующей ска- нирующей строке. В этом алгоритме для эффективности преобразования много- угольника в растровую форму используются когерентность ребер и сканирующих строк, а также сортировка. В гл. 15 показано, как этот алгоритм можно применить для удаления скрытых поверх- ностей. 11.7.5. Выравнивание многоугольников При рассмотрении процесса растровой развертки мы до сих пор пренебрегали лестничным эффектом, возникающим при изображе- нии ребер многоугольника, и не использовали методов выравни- вания для их сглаживания. Можно ослабить этот эффект, если при определении значения яркости или цвета пэла рассмотреть всю об- ласть мирового пространства, которая отображается в пэл (рис. 11.4). Для оценки площади частей каждого пэла, который делится ребром многоугольника, Питвей и Уоткинсон разработали эффек- тивное расширение алгоритма Брезенхэма для отрезков прямых [374]. Для простоты предположим, что прямая описывается урав- нением у=тх, где 0^/n^l. Рассмотрим величину тх—у, вычислен- ную в середине отрезка, соединяющего пэлы Т{ и (рис. 11.2). Ко- ординаты этой точки (хг_1+1, У<-1+0,5). Если эта величина отри- цательна, выбирается Sit в противном случае Tt. Вычислим вели- чину d=(mx—у)+(1—т), которая лежит в диапазоне 0—1.Тогда про- верка будет производиться относительно 1—т, а не нуля, как в пер- воначальном алгоритме. Переменная d служит для оценки покрытия пэла на каждом шаге: чем ближе d к 1, тем большая часть пэла пере- крыта и тем выше должна быть соответствующая яркость. Основ- ная структура алгоритма для случая прямой у=тх, где т изменя- ется от 0 до 1, следующая:
170 Глава 11 х ;= 0; У : = 0; а : = 1 — пт, d = 0.5; WRITE-.PlXEL(x,y,d) repeat if d < a then d : = d-j-m {горизонтальное перемещение} else begin {диагональное перемещение} d := d—a; У := p+1 end x := x+ 1 WRITE.-PlXEL(x, y, d) until x = x_end На рис. 11.29 показан отрезок y—(5/7)x, проведенный из точки (О, 0) в точку (7, 5). Пэлы, сгенерированные основным алгоритмом Брезенхэма, затемнены, а сверху приведены значения d, которые Рис. 11.29. Закраска ребра. Рис. 11.30. Узкие многоугольники, для которых простой метод выравни- вания неэффективен. применялись к каждому пэлу. С помощью этих значений d можно определять соответствующие значения пэлов путем интерполяции между яркостями пэла с каждой стороны ребра. Этот алгоритм быстр и -эффективен при условии, что через об- ласть, покрытую пэлом, проходит только одно ребро многоуголь- ника. Считается, что при рассмотрении вершин многоугольника, а также в случае очень узких многоугольников, т. е. в таких ситуа- циях, которые показаны на рис. 11.30, требуются более детальные вычисления. В этих ситуациях, кроме того, предполагается, что вершины многоугольника не обязательно должны иметь целые ко- ординаты, совпадающие с центрами пэлов. Кроу показал, что в тех случаях, когда для изображения длинных тонких многоугольников применяется достаточное число уровней яркости, человеческий глаз
Алгоритмы и программное обеспечение растровой графики 171 Рис. 11.31. Определение яркости для Значения пэлов на сетке полагаются равными числу частей пэлов, установленных на сетке слева. способен различать детали на уровне частей пэла [112]. Таким об- разом, большое число уровней яркости можно в некоторых преде- лах использовать для улучшения пространственного разрешения г снижая при этом разрешение по яркости. Можно получить и про- тивоположный эффект (см. гл. 17); увеличить разрешение по ярко- сти за счет ухудшения пространственного разрешения. Нет необходимости вычислять площадь перекрытия с большей точностью, чем та, которая требуется для изображения: если пэл может иметь любое из восьми значений яркости, достаточна точ- ность 1/8. В любом случае дополнительная точность становится бес- полезной в диапазоне от 1/32 до 1/64, поскольку глаз не сможет вос- принять различия. Если требуется только низкая точность, разло- жение в растр можно произвести с помощью стандартных методов на воображаемой сетке, в два или три раза более мелкой, чем в реаль- ном дисплее [113]. Число частей пэлов, оказавшихся внутри сет- ки, подсчитывается и используется в качестве значения яркости для реальных устройств (рис. 11.31). Кэтмул [831 предложил метод, в ко- тором для лучшего устранения лестничного эффекта область, за- нимаемая пэлом, представляется как окно, и все лежащие поблизо- сти многоугольники отсекаются относительно него. Таким образом, определяется часть окна (т. е. пэла), покрытая каждым многоуголь- ником. Описанные здесь методы преобразования многоугольников в ра- стровую форму можно распространить и на области, границами ко- торых являются комбинации отрезков и кривых. Понятие когерент- ности сканирующих строк распространяется на криволинейные ребра и делается это совсем просто, если кривая монотонна. Если же кривая не монотонна, она разбивается на монотонные сегменты и каждый сегмент затем рассматривается как ребро в таблицах ТР и ТАР, при этом последовательные пересечения со сканирующими строками вычисляются с помощью разностных уравнений.
172 Глава 11 11.8. ^СЕГМЕНТИРОВАННЫЙ ПАКЕТ ГРАФИЧЕСКИХ ПОДПРОГРАММ С ВРЕМЕННЫМ ПРИОРИТЕТОМ Мы рассмотрели ряд алгоритмов для отображения примитивов вывода в буфер регенерации. Теперь возникает вопрос: как на ос- нове объединения этих алгоритмов с другими полезными функци- ями создать общий пакет подпрограмм для растровой графики? Сначала рассмотрим простой случай, когда буфер регенерации содержит одно-единственное описание графического образа. Это в некоторой степени аналогично дисплею на запоминающей труб- ке — различие лишь в том, что ЭВМ может считывать содержимое буфера регенерации, но не имеет возможности прочитать информа- цию с экрана запоминающей трубки. Хотя не существует ни сег- ментированного дисплейного файла, ни псевдодисплейного файла в том смысле, который в них вкладывается в графическом пакете ПГП, рассмотренном в гл. 2 и 4, обычно всегда имеется прикладная структура данных. При отображении примитивов вывода в буфер регенерации по- следние изображаемые примитивы могут перекрывать, а следова- тельно, и заменять уже существующие примитивы (или их части); таким образом, для них имеет место временной (зависящий от вре- мени) приоритет. Для примитивов вывода временной приоритет яв- ляется единственным возможным приоритетом, если только в гра- фическом пакете явно не установлен порядок записи графических примитивов. Отметим, что при выводе на фотопленку эффект был бы другим: при перекрытии примитивов произошло бы смешение цветов. Таким образом, временной приоритет самым тесным обра- зом связан с существованием буфера регенерации. В качестве отправной точки при разработке пакета подпрограмм для растровой графики воспользуемся всеми возможностями, со- держащимися в ПГП, за исключением сегментов и логического се- лектора, который нельзя использовать, если сегменты не имеют имен. 11.8.1. Операции над буфером регенерации Двумя наиболее фундаментальными операциями, которые сле- дует добавить в ПГП для растровой графики, являются функции считывания и модификации указанных пэлов в буфере регенерации. Для получения и модификации значения, расположенного в точке (х, у), можно воспользоваться введенными выше в этой главе про- цедурами READ _PIXEL (х, у, value) и WRITE_PIXEL (х, у, value) соответственно. Способ, которым параметр value воздействует на записываемый пэл в процедуре WRITE_P1 XEL, неявно задается другой про- цедурой:
Алгоритмы и программное обеспечение растровой графики 173 RASTER_OP(op). Параметр ор используется для указания того, как value влияет на значение пэла в точке (х, у). Если op—replace, то старое значение (в буфере регенерации) заменяется на value (такое значение ор уста- навливается по умолчанию). Если ор=ог, то над value и старым значением производится логическая операция ИЛИ; если op=and,то выполняется операцияИ;а если ор—хог,применяется ИСКЛЮЧАЮ- ЩЕЕ ИЛИ. В последнем случае, если все разряды value будут уста- новлены в true, то все разряды старого значения заменятся на про- тивоположные. В общем случае можно использовать каждую из 16 булевых функций двух переменных, а также и небулевы опера- ции, такие, как сложение значений пэлов или их вычитание. В ряде серийных растровых систем имеются все операции. Полезность не- которых из них будет проиллюстрирована в следующей главе. Довольно часто группу пэлов требуется заносить в буфер реге- нерации, считывать их из буфера или перемещать в пределах бу- фера (например, при изображении или сохранении образа, пред- ставленного в виде массивов пэлов, при переносе части образа, та- кого, как кусок текста). Эти операции можно выполнить с помощью функций: READ-BLOCK(to_array, xmin, xmax, ymin, ymax) WRITE_BLOCK(from_array, xmin, xmax, ymin, ymax) COPY _BLOCK(from_xmin, from-xmax, from-ymin, from_ymax, to-xmin, to-ymin) Предполагается, что массивы to_array и from_array содержат (xmax — xmiti-L1) (ymax — ymin+1) значений пэлов, упорядоченных по строкам. В процедуре COPY_ BLOCK необходимо указывать лишь нижний левый угол области места назначения, поскольку ширина перемещаемой области неявно задается как часть исходной спецификации. Значение ор, устанав- ливаемое процедурой RASTER_OP, воздействует на результаты всех операций перемещения. При обращении к процедуре COPY-BLOCK исходная область и область места назначения могут перекрываться в буфере регене- рации (рис. 11.32). Процесс копирования при этом производится таким образом, что ни в один из пэлов, принадлежащих области перекрытия, нельзя ничего записать до того, как его значение не бу- дет считано. Эта процедура не изменяет исходной области в буфере регенерации, за исключением тех мест, где возникают наложения. Три упомянутые операции, ориентированные на обработку бло- ков, можно объединить и представить в виде одной процедуры копи- рования, с помощью которой можно переписать информацию из произвольного источника (массива в памяти или в буфере регене- рации) в произвольное место назначения (также представляющее со- бой массив в памяти или в буфере регенерации). Как показано в гл.
174 Глава 11 Область места назначения Исходная область Буфер регенерации Рис. 11.32. Перемещение группы пэлов из исход- ной области в область места назначения. ют особенно полезны 12, такое представление особенно жела- тельно, если буфер регенерации является частью общего адресного пространства ЭВМ, поскольку в этом случае все три ко- пии могут быть получены с помощью одной и той же программы. Операция переписи разрядов группами, имеющаяся в системе Alto (разд. 12.6), является примером ап- паратной реализации процесса копирова- ния. Внутренне-заполняющую и гранично- заполняющую процедуры (разд. 11.5) так- же можно включить в наш пакет подпро- грамм для растровой графики. Они быва- в интерактивной «живописи». 11.8.2. Примитивы вывода Операции, рассмотренные выше, предназначены для работы лишь с пэлами или массивами пэлов и являются аппаратно-зависимыми в том смысле, что они ориентированы на буфер регенерации опре- деленного размера. В пакет подпрограмм для растровой графики должны быть также включены имеющиеся в ПГП машинно-незави- симые примитивы вывода с расширениями по крайней мере для не- которых дополнительных возможностей, необходимых в растровой графике: заполнения ограниченных областей, использование много- цветное™ и изменения внешнего вида всех пэлов, имеющих задан- ное значение, путем модификации таблицы цветов. Мы не будем за- трагивать вопросы, связанные с использованием других возможно- стей растровых пакетов, таких, как средства общей системы построе- ния изображения (гл. 12). Из примитивов вывода хорошо известны отрезок, текстовая стро- ка и текущая позиция (ТП). Можно, конечно, рассматривать также окна, поля вывода и даже трехмерные примитивы вывода из ПГП. Использование ограниченных областей предполагает наличие но- вой конструкции — многоугольника, который может быть задан следующим образом: BEGIN .POLYGON- MOVEL) LINEG); LINE(,) LINE(£ END.POLYGON Заключенные в скобки параметры обращений к процедурам MOVE и LINE задают последовательность отрезков, которые автоматиче- ски замыкаются процедурой END .POLYGON, образуя тем са-
Алгоритмы и программное обеспечение растровой графики 175 мым многоугольник. Такой подход применяется в нескольких су- ществующих пакетах. Однако при этом предполагается, что одни и те же примитивы вывода используются как для рисования от- резков, так и для описания многоугольников. Усложняется отлад- ка программы, так как значение каждого обращения к процедуре LINE зависит от того, находится ли оно в поле действия процедуры BEGIN-POLYGON. Кроме того, для задания многоугольника требуется большое число вызовов подпрограмм. Первую трудность можно устранить, если ввести в рассмотре- ние примитив вывода VERTEX, который будет использоваться внут- ри пары BEGIN-POLYGON...END-POLYGON вместо процеду- ры LINE: BEGIN-POLYGON-, VERTEX^,): VERTEX^): VER ТЕ XL); END-POLYGON Однако даже после введения процедуры VERTEX, для задания каждого многоугольника требуется много обращений к подпрограм- мам. Предпочтительнее использовать процедуру типа: POLYGON_ABS_2 (x_array, y_array, п) При этом п вершин запоминаются в двух массивах. Многоугольник автоматически замыкается ребром, соединяющим n-ю и первую вер- шины, первая вершина становится текущей позицией. Можно легко ввести аналогичные процедуры для круга и других ограниченных областей. 11.8.3. Трудности использования временного приоритета Каждый примитив вывода (отрезок, строка текста или область) преобразуется в растровую форму и изображается так, как предпи- сывает ПГП, независимо от пространственной связи с другими при- митивами. Модификация значений пэлов всегда определяется зна- чением ор. Режим немедленной визуализации примитивов вывода (как двумерных, так и трехмерных) создает между ними отношения, построенные на основе временного приоритета. При изображении примитивов скрытые поверхности не удаляются. При использова- нии временного приоритета отпадает необходимость в псевдодисплей- ном файле и реализация графического пакета существенно упро- щается. В следующем разделе рассмотрена альтернатива времен- ному приоритету. Несмотря на свою простоту, временной приоритет может ока- заться неудобным средством для прикладного программиста. На- пример, если программист должен переместить часть буфера ре-
176 Глава 11 б Рис. 11.33. Перемещение некоторой области буфера регенерации, ранее закрытой другой областью. генерации и при этом хочет продолжать видеть прежнее изображе- ние, прикладная программа должна сохранить и вызвать снова ин- формацию, находящуюся ранее на экране. Эта операция, довольно обычная, лежит в основе обработки текстов и автоматизации управ- ленческого труда и широко используется в персональных ЭВМ, та- ких, как система Alto (упоминается в гл. 1 и 10), для интерактив- ного программирования, при котором на различные перекрываю- щиеся области экрана выдаются программы, меню и результаты вы- числений [258, 458, 69]. Для пояснения проблемы обратимся к рис. 11.33 (заимствован из работы [440]). Рис. 11.33, а иллюстрирует рассматриваемую опе- рацию. Существуют три возможных решения проблемы. Одно из них состоит в том, что области Rx и R2 окрашиваются в цвет фона, и после этого вся область вызывается на экран (в новом месте) из 1 прикладной структуры данных. Этот процесс довольно медленный. 1 Другой возможностью является копирование Rx в R'x и R2 в область RB затем окрашивается в цвет фона и вызывается снова на| экран из прикладной структуры данных с соответствующими окном! и полем вывода. В третьем варианте вся затененная область, до тогой как быть закрытой, запоминается и восстанавливается по необхо-| ди мости. 1
Алгоритмы и программное обеспечение растровой графики 177 Рис. 11.34. В качестве другого примера рассмотрим рис. 11.34, а, на котором изображены три перекрывающиеся закрашенные области. Если со- отношения между приоритетами видимости этих областей изменить так, как показано на рис. 11.34, б, то области вызывались бы снова на экран прикладной программой в следующем порядке: треуголь- ник, квадрат, окружность. 11.8.4. Атрибуты примитивов вывода Атрибуты примитивов вывода имеют особенно важное значение в растровой графике, где приходится иметь дело с цветом (или яр- костью) и заполнением многоугольников. Поскольку в растровых системах часто имеются видеотаблицы цветов, неразумно рассмат- ривать цвет как статический атрибут примитива. В качестве такого атрибута лучше использовать индекс цвета, указывающий на эле- мент таблицы цветов. Тогда становится возможным динамическое изменение связи между индексом цвета и самим цветом путем заме- ны таблицы цветов. С помощью процедуры SET_CURRENT_INDEX(index) значения пэлов, составляющих отрезки и символы, а также форми- рующих внутренность многоугольников, устанавливаются равны- ми величине index. Для систем, в которых отсутствует таблица цве- тов, связь index с цветом или яркостью зафиксирована; если же та- кая таблица имеется, то с помощью процедуры REDEFINE-INDEX (index, red, green, blue) можно задать новую связь, которая устанавливается одновременно и мгновенно1’ для всех пэлов, имеющих значение index. 1> В некоторых растровых системах отсутствуют средства, позволяющие управлять моментом модификации таблицы: если изменения вносятся во время процесса растрового сканирования, то могут появляться кратковременные пере- ходные визуальные эффекты. Если происходит модификация сразу многих элемен- тов друг за другом, этот эффект может оказаться более заметным, поскольку будет длиться дольше. В идеальной растровой системе выполняется двойная буфериза- ция таблицы цветов, причем попеременное обращение к таблицам происходит только во время возврата луча в исходную точку в конце цикла сканирования.
178 Глава 11 для заполнения многоугольника. Другие характерные для растровой графики атрибуты опреде- ляют, заполняются ли многоугольники и каким образом. Имеются по крайней мере три возможности, которые задаются с помощью про- цедуры SET_CURRENT_POLYGON_TYPE(type) Многоугольник можно заполнить одним значением (которое ука- зывается как текущий индекс), и тогда его внутренность будет иметь постоянный цвет. С другой сто- роны, многоугольник можно за- полнить повторяющимся рисун- ком (узором), составленным из значений пэлов. В этом случае координаты вершин многоуголь- ника преобразуются в коорди- наты устройства и получившие- ся в результате границы за- полняются узором, начиная с некоторой опорной точки (рис. 11.35). В частном случае массив рисунка может оказаться до- статочно большим, чтобы мож- но было закрасить многоуголь- ник, не производя повторений. Сам узор задается с помощью про- цедуры SET_PATTERN(pattern_array, x_size, y_size) а опорная точка в нормированных координатах с помощью проце- дуры SET_REF_POINT(x, у) В последнем варианте многоугольник заполняется полутоновым или цветным узором в мировых координатах до того, как произво- дится его проецирование. Каждая из квадратных частей многоуголь- ника, покрытая цветным элементом из массива узора, проециру- ется на растровую сетку устройства и затем изображаются соот- ветствующие значения пэлов. При необходимости эти значения вы- числяются с учетом дробных частей каждой ячейки растровой сет- ки устройства, на которые наложены различные части рисунка. С помощью этого метода можно, например, наносить изображения на стены зданий. В результате фактура будет отображена на экра- не такой, какой она получилась бы на фотоснимке. На рис. 11.36 схематически показан простой случай закраски многоугольника в мировых координатах, когда повернутый прямо- угольник плотнее покрыт значениями пэлов, чем более редкая сет- ка дисплея. Величина яркости или цвета, с которой высвечивается каждый пэл этой растровой сетки, определяется как взвешенное
Алгоритмы и программное обеспечение растровой графики 179 среднее значение элементов узора, покрывающего прямоугольник. На рис. 11.37 приведен более сложный случай. Прямоугольник, ко- торый покрыт массивом, описывающим узор, проецируется из некоторого центра на растровую сетку дисплея. На заштрихован- ную площадь пэла растровой сетки дисплея накладываются нере- гулярные части четырех различных областей спроецированных узо- ров, поэтому при определении Рис. 11.37. Сложный случай заполне- ния многоугольника. Сетка массива узора проецируется из неко- торого центра на растровую сетку дисплея. Повернутая сетка массива узора Рис. 11.36. Простой случай заполнения многоугольника в мировых коорди- натах. Массив узора с высоким разрешением по- вернут и наложен на растровую сетку дис- плея, обладающую более низким разреше- нием. во внимание цвета четырех областей. Оба рассмотренных случая лучше всего обрабатываются с использованием понятий выравни- вания, введенных выше в этой главе. Математическое описание этого процесса содержится в работах'Веймана [492], Кэтмула и Смита [87]. На вклейках 13 и 33 приведены примеры реальных приложе- ний данного метода. На другие атрибуты примитивов вывода, такие, как тип линии и шрифт литер, различие между векторной и растровой техноло- гиями не оказывает никакого влияния. Можно использовать все имеющиеся в ПГП возможности ввода, за исключением селектора, для которого, как отмечалось выше, необходимы сегменты. Таким образом, пакет подпрограмм для растровой графики, построенный на основе временного приоритета, является комбинацией описан- ных здесь функций, средств построения изображений двумерных и трехмерных объектов, а также большей части функций ввода, рас- смотренных в предыдущих главах. 11.9. СЕГМЕНТИРОВАННЫЙ ПАКЕТ ГРАФИЧЕСКИХ ПОДПРОГРАММ, ПОСТРОЕННЫЙ НА ОСНОВЕ ПРИОРИТЕТОВ При использовании временного приоритета прикладному про- граммисту для получения желаемого результата приходится порож- дать примитивы вывода в определенном порядке, что довольно за-
180 Глава 11 труднительно. Этот недостаток можно устранить с помощью гра- фического обеспечения за счет его усложнения и, возможно, уве- личения времени ответа, затрачиваемого на модификацию образа. 11.9.1. Явный приоритет Простей пей формой невременного упорядочения (по отношению к видимости) является явный приоритет, когда порядок приписы- вается непосредственно группам примитивов вывода. Этот метод предполагает использование сегментации (гл. 2), чтобы приоритет можно было задавать в явной форме, как атрибут сегмента, причем меньшие числа должны соответствовать более высоким приорите- там. Отсюда, в частности, следует, что графический пакет должен поддерживать псевдодисплейный файл. С помощью фрагмента программы GRE ATE-SEGMENT®; SET-PRIORITY® 3); {сегмент 5 имеет приоритет 3} TRI ANGLE', {треугольник} CLOSE SEGMENT; CREATE SEGMENT®); SET-PRIORITY(31,2); {сегмент 31 имеет приоритет 2} SQUARE', {квадрат} CLOSE-SEGMENT; CREATE SEGMENT®); SET-PRIORITY®, 5); {сегмент 17 имеет приоритет 5} CIRCLE; {круг} CLOSE-SEGMENT; UPDATE строится рис. 11.34, а. Обращение к процедуре UPDATE в конце программы приводит к тому, что графический пакет изображает все существующие сегменты в соответствии с их приоритетами; прими- тивы вывода тем временем накапливаются в псевдодисплейном файле. Приоритеты имеют относительный характер, поэтому не обязательно использовать все приоритеты из последовательности 0...N. Общий вид процедур SQUARE, TRIANGLE и CIRCLE (пред- полагается, что все они существуют) показан ниже на примере про- цедуры TRIANGLE; procedure TRI ANGLE; begin SET-CURRENT-POLYGON-TYPE(solid-f Hied); SET-CURRENT-INDEX®; REDEFINE-INDEX® 0.8, 0.8, 0.8); {равные значения красного, зеленого и голубого=> интенсивностью 0.8} {последующие примитивы вывода до тех пор, пока не переопределится ин- декс 6, будут обладать интенсивностью 0.8} (в каждой процедуре должен использоваться свой индекс} BEGIN .POLYGON; VERTEX®0, 5.0); VERTEX®.0, 5.0);
Алгоритмы и программное обеспечение растровой графики 181 VERTEX(\0.0, 15.0); END-POLYGON end {TRIANGLE} Если приоритет сегмента будет динамическим атрибутом, обра- щения SET PRIORITY(i7, 1); UPDATE (выполненные после предыдущего фрагмента программы) приведут к построению рис. 11.34, б. Простым способом реализации явных приоритетов является про- ведение сортировки сегментов в соответствии с их приоритетами Рис. 11.38. Удаление круга путем окраски пэлов в цвет фона. Рис. 11.39. Присвоение значения фона оболочке круга. Рис. 11.40. Повторное изображение областей, лежащих внутри обо- лочки круга. всякий раз, когда вызывается процедура UPDATE. Затем сегмен- ты можно изобразить (преобразовать в растровую форму) в следую- щем порядке: первыми высвечиваются сегменты, обладающие наи- высшим числовым приоритетом, а последними — сегменты, обла- дающие наименьшим числовым приоритетом. В этом состоит один из возможных способов удаления скрытых поверхностей (другие методы рассматриваются в гл. 15). При разработке сегментированного пакета подпрограмм для растровой графики важное значение имеет эффективность. Посколь- ку при каждом обращении к процедуре UPDATE выполняется боль- шое количество вычислений, возникают трудности с временем от- вета. Самым радикальным решением является применение для уда- ления скрытых поверхностей и растровой развертки более быстрых и/или параллельных процессоров [179, 255, 364]; имеются, однако, другие, более простые, частные решения. Быстро, но неточно мож- но удалять скрытые части, окрашивая все пэлы удаленного сегмен- та (при его преобразовании в буфер регенерации) в цвет фона. При этом некоторым пэлам будут присвоены неверные значения. На рис. 11.38 показан результат удаления круга на рис. 11.34, а. Эти проб- лемы решаются, если некий процесс в операционной системе, имею- щий низкий приоритет, может после этого снова вывести на экран
182 Глава 11 оставшиеся сегменты. В этом случае получатся правильные резуль- таты (рис. 11.40). Другой способ повышения эффективности основан на экранных оболочках, которые введены в гл. 4. Вначале прямоугольная оболочка удаляемого сегмента окрашивается в цвет фона (рис. 11.39). Затем на экран вызываются снова только те части оставшихся сег- ментов, которые лежат внутри оболочки удаляемого сегмента (рис. 11.40). С этой целью сегменты отсекаются относительно оболочки и все, что остается после завершения процесса отсечения, вновь изоб- ражается. Хотя отсечение требует времени, на самом деле можно получить даже выигрыш за счет сокращения объема повторно выво- димой информации. Другой способ уменьшения времени ответа состоит в исполь- зовании двух режимов рисования: быстрого и приоритетного. В ре- жиме быстрого изображения выводимый многоугольник рисуется, но не заполняется, т. е. многоугольники появляются на экране в том порядке, в котором они генерируются. Лишь в режиме приори- тетного изображения вступают в силу приоритеты и закрашиваются многоугольники. Необходимо, чтобы пользователь при работе в ин- терактивном режиме мог выбирать тот или иной режим; для быстро- го взаимодействия следует выбирать режим быстрого рисования, а для получения качественного изображения требуется режим прио- ритетного рисования. 11.9.2. Геометрический приоритет Более богатой, но с вычислительной точки зрения и более слож- ной формой невременнбго приоритета является геометрический при- оритет, известный как удаление скрытых поверхностей. Чтобы оп- ределить, какие примитивы вывода (или их части) видимы, восполь- зуемся х, у и z-координатами примитивов вывода, а также видовыми параметрами (нормалью к картинной плоскости, вертикалью и т. д., введенными в гл. 8). Алгоритмы удаления скрытых поверхностей описаны в гл. 15. Для удаления не требуются сегменты, поскольку приоритеты неявно следуют из геометрии. Разумеется, нет никаких оснований для исключения сегментов, которые оказываются таки- ми же полезными для взаимодействия при использовании геомет- рического приоритета, какими были в случае временного или яв- ного приоритетов. Однако при использовании геометрического приоритета возни- кают осложнения. Изображение часто содержит несколько видов одного и того же объекта, имеющих различные ориентации и, воз- можно, построенных с использованием разных способов проециро- вания. Типичное изображение может состоять из передней, верхней и боковой ортографических проекций, а также косоугольной проек- ции, причем каждая из них расположена в отдельном поле вывода. Однако, если два поля вывода частично перекрываются, одного лишь
Алгоритмы и программное обеспечение растровой графики 183 Видовая поверхность Рис. 11.41. Построение изображения, составленного из двух видимых объемов. На видовой поверхности отображается параллельная проекция содержимого трех- мерного нормированного пространства. геометрического приоритета становится недостаточно, поскольку он определяет видимость примитивов вывода в рамках единствен- ного поля вывода, но не между такими полями. Таким образом, тре- буется некоторый способ управления приоритетами между полями вывода. Одним из них является присвоение полю вывода явного приоритета; однако в этом случае для изменения приоритета поля вывода потребуется название поля, что приведет к введению в гра- фический пакет дополнительных концепций. Попытаемся решить проблему перекрывающихся полей вывода с помощью уже имеющихся концепций трехмерного нормирован- ного координатного пространства (НК-пространства) и трехмерных полей вывода. Видимый объем, заданный в мировых координатах, преобразуется в свое трехмерное поле вывода, как показано на рис. 11.41. Операция удаления скрытых поверхностей производится при вызове процедуры UPDATE над всем содержимым трехмер- ного НК-пространства, причем в качестве направления визирова- ния выбирается параллельное проецирование на переднюю грань НК-пространства. Поэтому удаление скрытых поверхностей выпол- няется как в пределах одного поля вывода, так и между содержи- мым различных полей вывода.
184 Глава 11 Трехмерное поле вывода с видом объек- та спереди Трехмерное поле вывода с видом сверх на объект Трехмерное НК-пространство Направление проецирования на видовую поверхность Рис. 11.42. Размещение трехмерных полей вывода, при котором результирующее изображение на видовой поверхности состоит из четырех отдельных рисунков. Трехмерное поле вывода с вырезанным и увеличенным — срраементом объекта Трехмерное НК-пространство уг Направление проецирования на видовую поверхность Рис. 11.43. Размещение двух трехмерных полей вывода, при котором на результи- рующем изображении ближнее поле вывода налагается на дальнее поле вывода. г = 0,0 имеющий самый Высохни приоритет Направление проецирования на оиЭобую поверхность Рис. 11.44. Использование полей вывода, находящихся на параллельных плос- костях в трехмерном нормированном пространстве, для реализации явного (21/в) приоритета по глубине.
Алгоритмы й программное обеспечение растровой графики 185 В одних случаях (таких, как изображение взлетной полосы аэ- ропорта и окружающих ее строений) можно ограничиться одним трехмерным полем вывода, совпадающим по размеру с единичным кубом. Если же одновременно требуется построить виды спереди, сверху и сбоку, а также изометрическую проекцию объекта, следует использовать несколько непересекающихся полей вывода (рис. 11. 42). В других случаях при построении изображения объекта, на которое наложен рисунок, показывающий в увеличенном размере некоторый фрагмент объекта, удобно воспользоваться перекрываю- щимися (если смотреть с видовой поверхности) полями вывода (рис. 11.43). Содержание всех примитивов вывода внутри трехмерных полей вывода можно учесть в алгоритмах удаления скрытых поверх- ностей и тем самым избежать ненужных сравнений между примити- вами, находящимися в разных полях вывода. Геометрический приоритет в применении к трехмерным полям вывода включает временной и явный приоритеты как частные слу- чаи. Рассмотрим сначала временной приоритет. По умолчанию счи- тается, что поле вывода (являющееся двумерным) располагается на передней грани трехмерного НК-пространства. В этом случае примитивы вывода после преобразования в нормированные коорди- наты не имеют глубины и, следовательно, алгоритмы удаления скры- тых поверхностей не имеют информации, на основании которой они могли бы определить, какие из примитивов видимы. Это та же си- туация, что и при использовании временного приоритета. Временной приоритет применяется к проекциям примитивов вывода на кар- тинную плоскость, поэтому им можно воспользоваться для изобра- жения примитивов, заданных в двумерных или в трехмерных ми- ровых координатах и попадающих на переднюю грань НК-простран- ства. Рассмотрим теперь явный приоритет, при котором каждый сег- мент обладает приоритетом, определяющим его видимость. Чтобы задать приоритеты в системе с геометрическим приоритетом, сег- мент, который имеет приоритет Р, помещается в поле вывода, распо- ложенное на плоскости z=PIN трехмерного НК-пространства, с уг- ловыми точками (xmin, P/N) и (xmax, #max, P/N), как показано на рис. 11.44. Когда все сегменты определены, выполняется удаление скрытых поверхностей. Сегменты (а следовательно, и плоскости) могут задаваться в произвольном порядке. Приоритеты сегментов можно сделать динамическими, при- меняя к сегменту преобразование образа. При этом для перемеще- ния образа сегмента на другую плоскость, имеющую постоянную координату г, используется перенос вдоль оси г НК-пространства. В данном и предыдущем разделах показано, как следует стро- ить графические пакеты, чтобы можно было воспользоваться неко- торыми из уникальных возможностей растровых дисплеев, выпол- няя при этом основные построения изображений с использованием концепций векторной графики. И действительно, многоугольники
186 Глава 11 и другие заполняемые области, атрибут цвета и три типа приори- тета удалось определить и включить в систему Core [163, 164, 167, 498]. Реализация системы, подобной Core, которая способна удалять скрытые поверхности, приведена в работе [275]. Таким образом, можно одновременно под управлением одной и той же прикладной программы использовать векторные и растровые дисплеи. Конечно, операции, выполняемые непосредственно над буфером регенерации (такие, как копирование блока пэлов), не будут иметь смысла для векторного дисплея. Поэтому следует искать разумное сочета- ние возможностей векторной и растровой графики. УПРАЖНЕНИЯ 11.1. Обобщите алгоритм Брезенхэма на случай изображения отрезков с произвольным наклоном. 11.2. Выведите формулу яркости пэлов, образующих отрезок с тангенсом угла наклона т, которая поддерживала бы постоянную яркость на единицу длины отрезка. 11.3. Напишите программу для микро- или миникомпьютера, реализующую алгоритм Брезенхэма для отрезков прямых. Оцените время, которое потребуется алгоритму на инициализацию и каждую итерацию. 11.4. Используя уравнения (11.8) н (11.9), запишите алгоритм Брезенхэма так, чтобы избежать обращения к процедуре WRITE-PIXEL (и, таким образом, при вычислении адреса обойтись без умножения), вызывая вместо этого процедуру PIXEL-АТ-ADDR, как показано в конце разд. 11.2. 11.5. Определите, можно ли в алгоритме Брезенхэма для отрезков прямых вос- пользоваться симметрией, выполняя одновременное вычерчивание с обоих концов отрезка по направлению к центру с использованием переменной d. Правильно ли в вашей процедуре обрабатывается случай равных ошибок для обоих направлений, который возникает, когда х и у имеют наибольший общий множитель с и dx/c четно, в то время как dytc нечетно (0<dz/<dx), как для отрезка, соединяющего точ- ки (0, 0) и (24, 9)? Рассматривается ли в ней случай, в котором dx является целым, кратным r2dy, как, например, для отрезка, соединяющего точки (0, 0) и (16, 4)? (Предложено Дж. Брезенхэмом.) 11.6. В алгоритмах преобразования отрезков из векторной формы в растро- вую, изложенных в разд. 11.2, считается, что крайние точки отрезков имеют це- лые координаты. Разработайте алгоритмы, для которых такое предположение от- сутствует. 11.7. Каков визуальный эффект применения процедуры LINE из разд. 11.2 к отрезкам, тангенсы углов наклона которых больше 1 или меньше —1? 11.8. Покажите, что в алгоритме Брезенхэма для отрезков прямых разумно используется соответствующий знак для правильного проведения линии в вырож- денных ситуациях, когда текущая выбранная точка есть (х, у), а истинное пересе- чение отрезка со следующей абсциссой х+ 1 лежит не между значением ординаты у и z/+1, а попадает в диапазон: а) между у и у—1 (как для точки (2, 1) в случае отрезка, соединяющего (0, 0) с (7, 2)); б) между у+1 и Z/+2 (как для точки (2, 1) в случае отрезка, проведенного из (0, 0) в (7, 5)). (Предложено Дж. Брезенхэмом.) 11.9. Модифицируйте процедуру CHARACTER так, как предложено в конце разд. 11.3, чтобы можно было вместо процедуры WRITE-PIXEL использовать процедуру PIXEL-АТ-ADDR. 11.10. Напишите подпрограмму TEXT для изображения в точке (х, у) текс- товой строки, предполагая, что индексами массивов с описаниями литер служат коды литер.
Алгоритмы и программное обеспечение растровой графики 187 11.11. Основываясь на процедуре MICH-CIRCLE, напишите процедуру для изображения окружности, которая устанавливала бы пэлы на границе окруж- ности в b-value, а внутри ее в i-value. 11.12. Получите выражения для управляющей переменной, используемой в процедуре MICH-CIRCLE. 11.13. Реализуйте алгоритмы проведения кривой Брезенхэма, Питвэя [373] и Джордана [248]. Оцените время, необходимое для инициализации и для каждой из итераций. 11.14. Обобщите процедуры CIRCLE-POINTS и MICH-CIRCLE, чтобы можно было работать с окружностями, центры которых расположены в произволь- ных точках с целыми координатами. 11.15. Разработайте для окружностей преобразователь в растровую форму, который устранял бы лестничный эффект. 11.16. Проведите завершающие шаги по заполнению области, показанной на рнс. 11.18. Обратите внимание на то, как при заполнении происходит «закручи- вание» вокруг внутренних отверстий области. 11.17. Реализуйте способ заполнения области, описанный в конце разд. 11.5. Если потребуется, обратитесь за более подробными сведениями к работе [434]. 11.18. Разработайте внутренне-заполняющий алгоритм, который позволял бы новому внутреннему значению new_value совпадать с boundary-value. 11.19. Разработайте алгоритм растровой развертки многоугольников, с по- мощью которого граничные пэлы устанавливались бы в одно значение, а внутрен- ние пэлы — в другое. Получающаяся граница в общем случае будет 8-связна. 11.20. Рассмотрим выпуклый многоугольник, который имеет п вершин и от- секается по границам прямоугольного окна. Каково максимальное число вершин в получившемся усеченном многоугольнике? Минимальное число? Рассмотрите ту же проблему для случая невыпуклого многоугольника. Сколько многоуголь- ников может получиться в результате? Если получается один многоугольник, какое наибольшее число вершин он может иметь? 11.21. Включите алгоритм Питвэя — Уоткинсона [374] в преобразователь многоугольников в растровую форму. 11.22. Объясните, почему с помощью алгоритма Сазерленда — Ходгмана можно проводить отсечение только по выпуклым областям. 11.23. Некоторые буферы регенерации размещаются в последовательных ячейках памяти, таких, что ячейка буфера (0, 0) помещается в base, а ячейка (хтах, Утах) — в base—(хтах+1) * Umax+1); т. е. буфер располагается в памяти в убывающем, а не в возрастающем порядке. Запишите уравнения (11.6) — (11.9) так, чтобы этот факт учитывался. 11.24. Запрограммируйте процедуру COPY-BLOCK из разд. 11.8 в пред- положении, что имеются процедуры READ-PIXEL и WRITE-PIXEL. 11.25. Напишите модифицированную процедуру COPY-BLOCK, которая помещала бы значение пэла replace-value во все части исходной области, не пере- крываемые областью места назначения. 11.26. Покажите, как можно использовать WRITE-BLOCK в процедуре изображения цепочек литер. 11.27. Цапишите процедуру PATTERN-FILL (pattern-array, xsize, ysize, X-min, x-tnax, y-tnin, У-tnax), которая заполняла бы указанную прямоугольную область значениями пэлов из массива рисунка размером xsize на ysize. Если pattern-array меньше, чем область, то повторяйте рисунок столько раз, сколько это необходимо для за- полнения всей области. Значение нижнего левого угла pattern-array должно оказаться в (x-min, y_min). 11.28. Расширьте процедуру PATTERN-FILL до процедуры POLY-FILL (pattern-array, xsize, ysize, x-ref, y-ref, n, x-array, у-array). 11.29. Напишите процедуру MICH-CIRCLE для случая дуги окружности 45° с целым радиусом, воспользовавшись управляющей целой переменной е, где d/=2ei+l и е0=1—R.
188 Глава 11 Отметим, что если О(Т)>0, то D(S)>0 и, следовательно, D(Ti)+D(Si)=di>0, так что проверка di или 0.5d£- ускорила бы выбор правильной точки Т, когда D (7^>0. Вводя вспомогательные переменные и/=1+2х/, «о—1> V;= Ц-2х—2у, v0= 1—2R, заметим, что в случае, когда координаты центра окружности, а также ее радиус — целые числа, d; не может быть нулем, и, следовательно, е; не может равняться —0.5. Это позволяет применить следующее правило выбора: Если е,<0, перемещаемся аксиально (т. е xi-+i=xI'+ 1 и yt+i—yi) и корректи- руем «1 + 1=«1+2, v('+i=vH-2, ei+i=ei+ui + 1. Если перемещаемся по диагонали (т. е. х/+1=Х(-Н и yi + i=yi—1) и корректируем tii+l=Ui+2, п(Ч-1=пг+4, ei+i=ei+vi+l. В пересмотренном подходе трудоемкость итерации уменьшилась и стала такой же, как в алгоритме Питвэя для окружностей, а так как радиус и координаты центра окружности — целые числа, траектории также совпадут. (Предложено Дж. Бре- зенхэмом.) 11.30. Проанализируйте поведение алгоритма Питвэя — Уоткинсона (разд. 11.7.5) в случае, когда d представлено с ограниченной точностью. Какая возмож- на накопленная ошибка? 11.31. Покажите, как можно модифицировать алгоритм растровой развертки многоугольников, чтобы во время начальной групповой сортировки при построе- нии ТР упорядочивать монотонно-возрастающие последовательности ребер, а не отдельные ребра. В результате сократится число элементов в ТР, а следовательно, уменьшится число переупорядочений ТАР по х. Отметим, что каждый элемент ТР и ТАР теперь является последовательностью ребер, а не отдельным ребром, поэтому в алгоритмы следует внести некоторые изменения. 11.32. Реализуйте алгоритм Сазерленда — Ходгмана или Вейлера — Азер- топа для отсечения в трехмерном случае. 11.33. Расширьте возможности алгоритма Сазерленда — Ходгмана, чтобы можно было удалять излишние ребра многоугольника, показанные на рис. 11.23. 11.34. Расширьте возможности любого из алгоритмов отсечения многоугольни- ка, чтобы можно было получать многоугольники, находящиеся как внутри, так и вне отсекающей области.
Глава 12 Архитектура растровых дисплеев 12.1. ВВЕДЕНИЕ Организация аппаратуры растровых графических систем в об- щих чертах рассмотрена в гл. 3 при описании графической аппара- туры. В гл. II обсуждено программное обеспечение растровой гра- фики. В данной главе аппаратура растровых графических систем ЭВМ Система создания изобрюке* ния 1_ —► буфер регене- рации —► Система вывода изображе- ния "'> Дисплей Диалоговые устройства Рис. 12.1. Базовая архитектура полной растровой дисплейной системы. изучается более подробно. В разд. 12.2 представлена простая раст- ровая дисплейная система (рис. 12.1) и ее набор команд. В разд. 12.3 показано, как программировать эту растровую систему; в качестве примеров использованы короткие последовательности дисплейных команд, создающие различные визуальные эффекты. В разд. 12.4, посвященном системе вывода изображения и связанной с ней таб- лице цветов, особое внимание уделено различным способам исполь- зования таблицы цветов. В разд. 12.5 и 12.6 рассмотрены другие растровые архитектуры, отличающиеся организацией буфера ре- генерации и способом включения его в общую систему. 12.2. ПРОСТАЯ РАСТРОВАЯ ДИСПЛЕЙНАЯ СИСТЕМА Растровый дисплей состоит из систем создания, хранения (буфер регенерации, битовая карта, буфер кадра) и вывода изображения. Набор команд и скорость работы системы создания изображения определяют большинство характеристик растрового дисплея. Кроме того, эта система обладает большой гибкостью, поскольку обычно реализуется на базе микропроцессора. Дисплейные команды интер- претируются непосредственно программой в микропроцессоре. В данном разделе мы предполагаем, что в буфере регенерации хранится 512x512 пэлов (три бита в каждом пэле) и начало системы
190 Глава 12 координат находится в левом нижнем углу. На практике используют- ся буферы регенерации и других размеров (а также с другим нача- лом системы координат); буфер, хранящий 480 строк по 640 пэлов в строке, соответствует растру большинства телевизионных монито- ров, что обеспечивает эффективное использование площади экрана без применения неоднородного масштабирования по х и у для отоб- ражения буфера регенерации на экран. Начало системы координат иногда помещается в левый верхний угол для совмещения с точкой начала растрового сканирования. Однако такой выбор не дает каких- либо преимуществ. Мы предполагаем также, что таблица цветов в системе вывода изображения состоит из восьми элементов по шесть битов на элемент: два бита для красного цвета, два для зеленого и два для синего. В описании команд, воспринимаемых системой создания изобра- жения, используются мнемонические имена, поскольку нас не инте- ресует конкретное кодирование операции и операндов. Если нет специальных указаний, все данные считаются заданными непосред- ственно: адреса в командах обычно не используются. Дисплей имеет некоторое число регистров, которые определяются по мере необхо- димости при описании конкретных команд. Набор команд описывае- мого дисплея содержит следующие команды: 1. MOVE X, Y. В регистры X и Y, определяющие текущую по- зицию (ТП), засылаются значения X и Y. Поскольку буфер регене- рации имеет размеры 512x512, X- и Y-регистры должны иметь длину, равную 9 бит. 2. MOVER DX, DY. Значения DX и DY прибавляются к ре- гистрам X и Y и тем самым осуществляется относительное измене- ние ТП. 3. LINE X, Y. Отрезок, соединяющий ТП с точкой (X, Y), под- вергается растровой развертке. В пэлы, соответствующие отрезку, засылается текущее значение 3-битового регистра цвета. ТП пере- мещается в точку (X, Y). 4. LINER DX, DY. Отрезок, соединяющий ТП с точкой ТП + + (DX, DY), подвергается растровой развертке. ТП сдвигается по координате х на DX, по координате у на DY. Отметим, что отсутству- ет явная команда создания точки; для создания точки необходимо выполнить следующую последовательность команд: MOVE X, Y LINER 0, 0 5. TEXT N, STR ING. Начиная с ТП, изображаются N литер, коды которых хранятся в строке STRING. Литеры определяются на сетке пэлов размером 7x9; расстояние между литерами и строка- ми равно двум единицам растра. Если в процессе создания изобра- жения цепочки литер встретилась правая граница буфера регене- рации, вставляются коды «возврата каретки» и «перевода строки». Если встретилась нижняя граница буфера регенерации, ТП перено-
Архитектура растровых дисплеев 191 сится в левый верхний угол буфера. В процессе растровой развертки литер в буфер регенерации используется значение регистра цвета. ТП перемещается в точку, в которой была бы изображена (N-j-l)-H литера, если бы она существовала. 6. RECT X, Y. В буфер регенерации помещается заполненный прямоугольник с одним углом в ТП, другим углом — в точке (X, Y). ТП модифицируется. Во все пэлы на границах прямоугольника и внутри его засылается значение содержимого регистра цвета. ТП переносится в точку (X, Y). Весь буфер регенерации заполняется значением регистра цвета следующими командами: MOVE О, О RECT 511, 511 7. RECTR DX, DY. В буфер регенерации помещается заполнен- ный прямоугольник, один угол которого находится в ТП, а другой — в ТП+(ОХ, DY). ТП модифицируется. 8. BFILL I. Пэлы, принадлежащие гранично-определенной 4-связной области, ограниченной пэлами со значением I и содержа- щей ТП в качестве внутренней точки, заполняются значением регист- ра цвета. Пэлы со значением I не изменяются. Отметим, что, если ненных содержимым регистра цвета (заштрихованные участки). Черная точка представляет ТП. область не замкнута, заполняется весь буфер регенерации, за исклю- чением пэлов со значением I. На рис. 12.2 приведены несколько примеров работы данной команды заполнения областей. BFILL не изменяет значения ТП. 9. FFILL I. Пэлы, принадлежащие внутренне-определенной 4-связной области, определенной пэлами со значениями I и содер- жащей ТП в качестве внутренней точки, заполняются значением регистра цвета. FFILL не изменяет ТП. 10. COLOR I. В 3-битовый регистр цвета записывается 3-битовое значение I. Это значение затем помещается в буфер регенерации командами рисования отрезков, текста, прямоугольников и облас- тей. 11. TABLE I, V. В элемент I таблицы цветов записывается зна- чение V. Значение I изменяется в диапазоне 0—7, значение V— в диапазоне 0—63.
192 Глава 12 12. WBLOCK X, Y, VALUES. Запись блока. Прямоугольная область буфера регенерации, определенная ТП и точкой (X, Y), заполняется значениями из списка VALUES, следующего за коман- дой. ТП смещается в точку (X, Y). Список VALUES хранится в упорядоченном по строкам виде (слева направо, сверху вниз). Длина списка VALUES должна быть равна числу пэлов в прямоугольни- ке. 13. WBLOCKR DX, DY, VALUES. Относительная запись блока. В буфере регенерации заполняется прямоугольная область, опреде- ленная ТП и точкой ТП + (DX, DY). ТП смещается на DX по оси х и DY — по оси у. 14. RBLOCK X, Y, ADDR. Чтение блока. В память ЦП, начиная с адреса ADDR, считывается прямоугольная область в построчном порядке. Значения пэлов в буфере регенерации не изменяются. 15. RBLOCKR DX, DY, ADDR. Относительное считывание блока. 16. CBLOCK XMIN, ХМАХ, YMIN, YMAX, ХТО, YTO. Ко- пирование блока. Прямоугольный блок значений пэлов (ХМIN, ХМАХ, YMIN, YMAX) копируется внутри буфера регенерации. Левый нижний угол копируемого блока помещается в точку (ХТО, YTO). Таким образом, изменяются значения пэлов блока ХТО, ХТО + (ХМАХ—XMIN), YTO, YTO + (YMAX—YMIN). Если исходный и конечный блоки частично перекрываются, копирование выполняется таким образом, что в исходном блоке информация не пропадает. Оба блока определяются без помощи ТП, поскольку дан- ная команда отличается от всех предыдущих: примитивы вывода не записываются в память изображения и не считываются из нее. 17. RDLOCATOR ADDR. Считать координаты, заданные локато- ром, и поместить их в память по адресу ADDR. Эта команда работа- ет с локатором, подключенным к системе создания изображения; значения обеих координат изменяются от 0 до 511. 18. FEEDBACK SWITCH. Включить или выключить обратную связь для локатора в зависимости от значения переменной SWITCH. Обратная связь для локатора представляет собой малень- кий курсор, который система вывода изображения накладывает на изображение, определяемое буфером регенерации. 19. WMODE MODE. Режим записи значений в буфер регенера- ции устанавливается в одно из двух состояний: замещение или Исключающее-или. В режиме замещения новые значения помещаются в пэлы буфера регенерации на место старых значений. (Для просто- ты предыдущие команды были написаны так, как если бы замещение было единственным возможным режимом записи.) В режиме Исклю- чающего-или новые значения подвергаются операции Исключающее- или со старыми значениями пэлов и результаты этой операции по- мещаются в пэлы. Режим записи распространяется на все команды, изменяющие аначения пэлов: LINE, LINER, TEXT, RECT, RECTR, FFILL,
Архитектура растровых дисплеев 193 BFILL, WBLOCK, WBLOCKR и CBLOCK. Использование режима Исключающего-или демонстрируется ниже. Здесь мы только отме- тим, что если значение пэла А дважды подвергается операции Иск- лючающее-или с одним и тем же значением В, то результатом.будет исходное значение пэла. Это можно показать с помощью следующе- го выражения (используя свойство ассоциативности): На рис. 12.3 перечислены команды, воспринимаемые нашим прос- тым растровым дисплеем. Отметим, что совокупность команд, оп- ределяющих изображение, не требуется исполнять 30 раз в 1 с; процесс регенерации выполняет система вывода изображения. Та- ким образом, при подготовке команд вопросы эффективности не являются критическими и мы не будем рассматривать подробности, связанные с этим процессом. Следующий вопрос касается способа, которым команды передаются системе создания изображения. 1. MOVE X, Y 2. MOVER DX, DY 3. LINE X, Y 4. LINER DX, DY 5. TEXT N, STRING 6. RECT X, Y 7. RECTR DX, DY 8. BFILL I 9. FFILL I 10. COLOR I 11. TABLE I, v 12. WBLOCK X, Y, VALUES 13. WBLOCKR DX, DY, VALUES 14. RBLOCK X, Y, VALUES 15. RBLOCKR DX, DY,VALUES 16. CBLOCK XMIN, XMAX, YMIN, YMAX, XTO, YTO 17. RDLOCATOR ADDR 18. FEEDBACK SWITCH 19. WMODE MODE Рис. 12.3. Команды растрового дисплея. Растровые дисплейные системы, имеющие описанную выше общую структуру (системы создания, хранения и вывода изображения), получают команды через интерфейс от универсальной ЭВМ. Интер- фейс может быть каналом прямого доступа в память или линией связи. В любом случае графическая прикладная программа и пакет графических подпрограмм выполняются на ЭВМ, создают одну или более дисплейных команд и посылают их в дисплей для фактическо- го исполнения. Отметим, что некоторые из команд (RBLOCK, RBLOCKR, RDLOCATOR) требуют пересылки информации в ЭВМ.
194 Глава 12 Суммарное время, за которое можно изменить всю или часть памяти изображения, зависит от времени выполнения соответствую- щей части прикладной программы, формирования дисплейных ко- манд, передачи команд в дисплей и выполнения команд системой создания изображения. Эти процессы, конечно, частично перекрываются, поскольку могут выполняться различными процессорами. Чаще всего узким местом является выполнение команд системой создания изображе- ния, поскольку алгоритмы растровой развертки обычно требуют многих итераций. Как правило, верно следующее утверждение: чем быстрее этот процесс, тем меньше общее время реакции системы на действия пользователя. Как уже много раз. говорилось выше, время реакции является основным фактором в оценке пользователем качества системы. Большинство растровых дисплеев в настоящее время слишком медленны, однако их скоростные характеристики улучшаются с каждым годом. Самая быстродействующая коммер- ческая система в 1981 г. [315] использовала специализированную аппаратуру, с помощью которой выполняла растровую разверт- ку отрезков со скоростью 6 пэлов в 1 мкс, т. е. рисовала отрезок во весь экран (512 пэлов) менее чем за 100 мкс. Некоторые современные растровые дисплеи имеют дополнитель- ные команды. Например, команда WMODE позволяет выполнять еще некоторые логические или арифметические операции, кроме Исключающего-или и замещения (разд. 11.8.1). Некоторые системы имеют набор регистров отсечения (иногда их называют регистрами окна). Эти регистры определяют прямо- угольную область внутри буфера регенерации и, следовательно, экрана. Примитивы вывода отсекаются по границам этого поля вы- вода, а операции RBLOCK и WBLOCK применяются только к его внутренней части. Поле вывода может использоваться в команде CBLOCK (копирование блока) также в качестве исходного или ко- нечного блока; это позволяет уменьшить число явно задаваемых операндов в данной команде. (CBLOCK иногда называется командой «перемещения битов»). Команда Bit-Bit (пересылка блока битов), впервые реализован- ная в персональной ЭВМ Alto, вобрала в себя многие из названных выше идей [257, 232]. (В работе [353] команда Bit-Bit описывается как команда RasterOp.) Эта команда предоставляет мощное средство для операций над битами в прямоугольных областях буфера регене- рации, в котором каждому пэлу соответствует один бит. Для обеспе- чения эффективности следует предпочесть аппаратную или микро- программную реализацию команды Bit-Bit. Данная команда копирует исходный массив в конечный, заменяя старые значения конечного блока результатом применения задан- ной операции к старому и копируемому значениям. Можно задать любую из 16 логических операций или арифметическую операцию, такую, как сложение и вычитание. Применение Исключающего-или
Архитектура растровых дисплеев 195 иллюстрируется в разд. 12.3.2. Логическое И использует исходный блок как маску для выборочной очистки частей конечного блока, в то время как логическое ИЛИ выборочно устанавливает его части. Таким образом, операция ИЛИ позволяет «красить» фигуры в буфере регенерации, возможно, под управлением мыши или план- шета. Другим применением операции ИЛИ является занесение ли- тер, определенных массивами битов, в буфер регенерации; при этом не изменяются фоновые пэлы, расположенные вокруг пэлов, образующих собственно литеру. Это существенно, если прямоуголь- ники, содержащие литеры, перекрываются, как, например, при изоб- ражении литер курсивом. В системах, где пэл содержит не один бит, массив битов используется как маска для выборочной записи (разд. 11.3). В некоторых версиях команды Bit-Bit используется дополни- тельная маска в виде массива пэлов размером 16x16 [232]. Этот массив может заменять исходный блок или объединяться с ним с помощью логического И, прежде чем воздействовать на конечный блок. Если в дополнительном массиве значения пэлов чередуются, объединение его с исходным блоком создаст в конечном блоке эф- фект текстуры. Если вспомогательный массив меньше исходного блока, он повторяется столько раз, сколько нужно. Эта же версия команды В it-Bit позволяет связать с конечным блоком область от- сечения. С ее помощью можно, например, обеспечить отсечение литер, определенных массивами битов; такое отсечение реализуется гораздо легче, чем с помощью видовой операции. Получаемый здесь выигрыш в скорости имеет очень большое значение, особенно при организации плавного движения текста по экрану (снизу вверх), когда единичное смещение меньше высоты литеры. Команды R BLOCK и WBLOCK нашего простого растрового дисплея могут иметь биты-модификаторы для управления последо- вательностью чтения или записи пэлов в буфер регенерации. Воз- можны восемь видов последовательностей, образуемых различными комбинациями направлений просмотра блока: по столбцам или по строкам, сверху вниз или снизу вверх, слева направо или справа налево. Это позволяет, например, инвертировать изображение, прочитав буфер сверху вниз, а записав снизу вверх. Многие системы имеют также регистр маски для задания битов пэла, модифицируе- мых при записи значений в буфер регенерации. Обычно все биты этого регистра устанавливаются в 1, однако, если необходимо за- претить изменения всех битов пэлов, кроме бита 2, в регистр за- писывается значение 1002. Тогда при выполнении последующих команд, записывающих информацию в буфер регенерации, будет изменяться только бит 2 каждого пэла. Это средство полезно при размещении различных изображений в разных плоскостях буфера регенерации (разд. 12.4.1). Полезен также регистр маски чтения; он позволяет организовать выборочный доступ к значениям пэлов при операциях чтения, копирования, заполнения областей и т. д.,
196 Глава 12 организации двойной буферизации для двух изображений, каждое из которых находится на собственной плоскости (плоскостях). Обычно имеются дополнительные примитивы вывода, кроме тех, что рассматриваются в данной книге, например конические се- чения, сетки и даже простые круговые или столбчатые диаграммы. Наличие таких примитивов полезно для приложений, ориентирую- щихся на конкретный дисплей, но включение их в универсальный, независимый от устройства графический пакет может усложнить опе- рацию отсечения и видовые преобразования. Микропрограммный интерпретатор дисплейных команд обычно хранится в ПЗУ. Однако в некоторых системах допускается исполь- зование ОЗУ и имеются механизмы для записи в ОЗУ микропрограмм для интерпретации дополнительных команд или для изменения существующих микропрограмм. Наличие таких средств позволяет расширить возможности системы. Обычным для растровых дисплеев устройством ввода является алфавитно-цифровая клавиатура, часто снабженная программируе- мыми функциональными клавишами. Введенные литеры отображают- ся на экране в позиции, задаваемой загружаемым регистром. Не- которые растровые дисплеи даже имеют световое перо, которое выдает при прерывании координаты (х, у) пэла, вызвавшего преры- вание. Все эти устройства имеют специальные регистры, из которых можно получить информацию о состоянии устройства или выдавае- мые им данные, и другие регистры — для записи управляющей ин- формации (включить/выключить и т. д.). 12.3. ПРОГРАММИРОВАНИЕ РАСТРОВОГО ДИСПЛЕЯ На нескольких простых примерах покажем, как можно исполь- зовать команды нашего простого растрового дисплея. В примерах предполагается, что таблица цветов сформирована следующим об- разом: Номер элемента Содержимое (двоичное) Цвет 0 000000 Черный 1 000011 100%-ный синий 2 001100 100%-ный зеленый 3 110000 100%-ный красный 4 111111 Белый 5 001001 67%-ный зеленый, 33%-ный синий 6 010010 67%-ный синий, 33%-ный красный 7 100100 67%-ный красный, 33%-ный зеленый
Архитектура растровых дисплеев 197 12.3.1. Простые рисунки Белая линия на черном фоне рисуется следующим образом: WMODE REPLACE Режим замещения COLOR 0 Пэл co значением 0—черный MOVE 0, 0 RECT 511, 511 Сделать все изображение черным COLOR 4 Пэл со значением 4—белый MOVE 100, 100 LINER 300, 300 Провести линию из точки (100, 100) в точку (400, 400) Рис. 12.4- Изображение, которое соз- дано программой, приведенной в тексте. IMAGE BUFFER IMAGE DISPLAY Блок-схема, нарисованная на рис. 12.4, создается следующи- ми командами: WMODE REPLACE Режим замещения COLOR 4 Пэл co значением 4—белый MOVE 0, o RECT 511, 511 Белый фон на все изображение COLOR 0 Пэл, со значением 0—черный MOVE 50, 200 Начало левого прямоугольника RECTR 150, 80 Черный прямоугольник размером 150x80 MOVE 200, 240 Начало отрезка LINER 100, 0 Нарисовать отрезок MOVE 300, 200 Начало правого прямоугольника RECTR 150, 80 Черный прямоугольник размером 150x80 COLOR 2 Пэл со значением 2—зеленый MOVE 70, 250 TEXT 5, “IMAGE” MOVE 70, 220 TEXT 6, “BUFFER” MOVE 320, 250 TEXT 5, “IMAGE” MOVE 320, 220 TEXT 7, “DISPLAY”
198 Глава 12 12.3.2. Рисование отрезков в режиме резиновой нити На приведенном ниже примере показано, как использовать ре- жим записи для организации рисования отрезков методом резиновой нити, описанным в гл. 5. Этот метод легко обобщить на случай буксировки объектов. Ниже рассмотрены три различные последо- вательности дисплейных команд. Первая последовательность ини- циализирует процесс путем рисования отрезка в режиме Исключаю- щего-или от начальной точки до конечной точки резиновой нити. В нашем примере запись команды позиционирования в виде MOVE X ST ART, YSTART следует интерпретировать следующим образом: значения перемен- ных XSTART, YSTART содержатся в команде MOVE как непосред- ственные данные. В последовательности инициализации будут такие команды: IN IT: WMODE XOR Установить режим Исключа- ющего-или COLOR 7 В операции Исключающего-или используется двоичное число 111, т. е. все биты инвертиру- ются MOVE LINE XSTART, YSTART XEND, YEND Нарисовать отрезок Нарисованная линия неоднородна по цвету. Цвет каждого пэла определяется результатом операции Исключающее-или, применен- ной к исходному значению пэла и коду 111; получившийся резуль- тат используется как индекс в таблице цветов. Например, если зна- чение пэла вначале равно 100 (белый цвет), новое значение будет ОН (красный цвет). Если бы элементы таблицы цветов с номерами 3 и 4 имели одинаковую спецификацию цвета, цвет пэла остался бы прежним. Вторая последовательность дисплейных команд выполняется 20—30 раз в 1 с с целью обеспечения динамики, необходимой для метода резиновой нити. Она может запускаться таймером или пре- рыванием от дисплея после завершения каждого цикла растрового сканирования. В данной последовательности также используется операция Исключающее-или с кодом 111с целью возвращения всех пэлов, находящихся в данный момент на отрезке, моделирующем резиновую нить, в исходное состояние. Затем прикладная програм- ма считывает данные с локатора и рисует отрезок в определяемую им новую позицию: ERASE: MOVE LINE XSTART, XEND, YSTART YEND RDLOCATOR XEND, YEND Стереть текущий от- резок, представляю- щий резиновую нить Считать заданные ло- катором координаты в XEND, YEND
Архитектура растровых дисплеев 199 DRAW: MOVE LINE XSTART, XEND, YSTART YE ND Нарисовать новый от- резок, представляю- щий резиновую нить Третья последовательность команд, посылаемая ЭВМ в дисплей, когда пользователь указал (возможно, с помощью функциональной клавиатуры), что отрезок находится в своем конечном положении, рисует отрезок требуемым цветом (например, зеленым): FINI: WMODE COLOR MOVE LINE REPLACE Режим замещения 2 Цвет зеленый XSTART, YSTART XEND, YEND Нарисовать отрезок зеленым цветом Общая схема программы, включающей эти три последовательнос- ти команд, выглядит следующим образом: Инициализировать рисование отрезка методом резиновой нити Послать в дисплей последовательность команд IN IT repeat Послать в дисплей последовательность ERASE Послать в дисплей последовательность DRAW until действие пользователя Послать в дисплей последовательность FINI При повторной растровой развертке того же отрезка с целью возвращения в исходное состояние пэлов, измененных при первой развертке, важно, чтобы начальная и конечная точки задавались в том же порядке, поскольку некоторые алгоритмы развертки отрез- ков могут не пройти по тем же пэлам при перестановке конечных точек. 12.4. СИСТЕМА ВЫВОДА ИЗОБРАЖЕНИЯ Система вывода изображения читает буфер регенерации построч- но для управления растровым сканированием. Многие растровые дисплеи (так же, как и коммерческие телевизионные приемники) используют перемежающийся растр: за 1/60 с выводятся все нечет- ные строки растра, за следующую 1/60 с — все четные строки; для вывода всего кадра требуется 1/30 с. Перемежающийся растр позво- ляет устранить мерцание, поскольку соседние строки растра выво- дятся на экран каждую 1/60 с, хотя каждая отдельная строка по- казывается только через 1/30 с. Мерцание возникает для горизон- тальных отрезков шириной, равной 1 пэлу, поскольку они регене- рируются только с частотой 30 Гц. Однако в настоящее время на- метилась тенденция к увеличению частоты регенерации: во многих современных системах и прежде всего в тех, разрешение которых ниже 1280X 1024 пэлов, используется удвоенная частота регенера- ции. Это решение устраняет все проблемы с мерцанием, однако
200 Глава 12 при такой частоте требуется большее число чтений буфера регене- рации (и/или более быстрые чтения), выполняемых за 1 с, и значи- тельно более широкополосные усилители в отклоняющей системе. Альтернативным решением является выбор люминофора с более длительным временем послесвечения, однако на этом пути возникает проблема остаточных изображений. Таблица цветов системы вывода изображения полезна не только для присваивания цветов или яркостей значениям пэлов. Для того чтобы упростить приводимые ниже примеры других применений этой таблицы, предположим, что наш дисплей одноцветный, в каж- дом пэле содержится три бита и в каждом элементе таблицы цветов — также три бита. Кроме приведенных ниже двух примеров, в гл. 17 обсуждается применение таблицы цветов для гамма-коррекции. Другие примеры можно найти в работе [427]. 12.4.1. Хранение нескольких изображений в буфере регенерации Обычно предполагается, что буфер регенерации объемом 512 X 512x3 содержит одно изображение с тремя битами в каждом пэле. Однако можно предположить также, что в буфере содержится два изображения (одно с двумя битами в пэле, другое о одним) или даже три отдельных изображения, каждое с одним битом в пэле. С по- мощью таблицы цветов можно выбирать или комбинировать отдель- ные изображения, чтобы сформировать одно составное изображение, показываемое на экране. Например, чтобы показывать только изоб- ражение 2, определяемое старшим битом каждого пэла, необходимо сформировать таблицу цветов так, как показано на рис. 12.5. Номер элемента (десятичный) Номер элемента (двоичный) Содержание таблицы цветов (десятичное) 0 ООО 0 1 0 0 1 0 2 0 1 0 0 3 0 1 1 0 4 1 0 0 7 5 1 0 1 7 6 1 1 0 7 7 1 1 1 7 Изображения 0 = черный цвет 2 1 0 7 = белый цвет Рис. 12.5. Таблица цветов, которая выделяет изображение, кодируемое старшими битами пэлов.
Архитектура растровых дисплеев 201 Номер элемента (десятичный) Номер элемента (двоичный) Содержимое таблицы цветов (десятичное) 0 0 0 0 0 1 0 0 1 2 2 0 1 0 2 3 0 1 1 4 4 1 0 0 2 5 1 0 1 4 6 1 1 0 4 7 1 1 1 Изображения 2 1 0 6 Рис. 12.6. Таблица цветов, суммирующая три изображения. Для показа изображения 0, определяемого младшим битом каждого пэла, необходимо поместить код 7 в те элементы таблицы, в номере которых младший бит равен 1; в другие элементы надо поместить 0: 0, 7, 0, 7, 0, 7, 0, 7. Если необходимо показать изображение, являющееся суммой трех изображений, и каждое изображение должно дать вклад в яр- кость, равный двум единицам, Плоскость с изо6ра)((ениемО таблицу цветов необходимо сфор- плоскость с изображением 1 мировать так, как показано на рис. 12.6. Если один из трех битов пэла равен 1, из таблицы выбирается 2; если два бита из трех равны 1, из таблицы выби- рается 4; если все три бита равны 1, выбирается 6. В последнем примере пред- ставим себе, что изображе- ния определены на параллель- ных плоскостях (рис. 12.7). Плоскость с изображением 2 находится ближе всего к наблюдателю, плоскость с изоб- ражением 0 — дальше всего. Таким образом, изображение 2 засло- няет и изображение 1, и изображение 0, в то время как изображение 1 заслоняет только изображение 0. Эта приоритетность может быть отражена в таблице цветов (рис. 12.8). В этом случае изображение 2 показывается с яркостью 7, изображение 1—с яркостью 5, а изоб- ражение 0—с яркостью З.так что более ближние изображения кажут- ся ярче более дальних. Точки, в которых отсутствует изображение, имеют яркость 0. Направление наблювения Рис. 12.7. Связь изображений с на- правлением наблюдения.
202 Глава 12 Номер элемента (десятичный) Номер элемента (двоичный) Содержимое таблицы цветов (десятичное) 0 ООО 0 нет изображения 1 0 0 1 3 видимо изображение 0 2 0 1 0 5 видимо изображение 1 3 0 1 1 5 видимо изображение 1 4 1 0 0 7 видимо изображение 2 5 1 0 1 7 видимо изображение 2 6 1 1 0 7 видимо изображение 2 7 1 1 1 Изображения 2 1 0 7 видимо изображение 2 Рис. 12.8. Таблица цветов, приписывающая изображениям приоритеты. Данный метод можно использовать для приписывания сегментам динамических приоритетов, если число сегментов в изображении не превышает числа плоскостей в буфере регенерации (в действи- тельности это условие выполняется только в особых случаях). «Диспетчеры окон», подобные описанным в работе [459], предостав- ляют специальную форму явных приоритетов для окон, поля вывода которых перекрываются на экране. Они легко реализуются данным методом. Таблица цветов используется также для получения взвешенной суммы яркостей двух изображений, что позволяет создать эффект «двойной экспозиции». Если вес, приписанный одному изображению, уменьшается со временем, а вес другого изображения растет, соз- дается эффект «ослабления» и «усиления» изображений. Если ис- пользуются цветные изображения, последовательность цветов, показываемая в ходе «ослабления — усиления», зависит от цветового пространства, в котором вычисляется взвешенная сумма (гл. 17). 12.4.2. Создание мультипликаций Другое применение таблицы цветов (простая мультипликация повторяющихся действий) описано в работе [425]. Существующие в настоящее время ограничения на скорость выполнения процесса развертки не позволяют изменять содержимое буфера регенерации 30 раз в 1 с, за исключением тех случаев, когда изображение явля- ется очень простым или используется специальная дорогостоящая аппаратура. Однако таблицу цветов можно легко изменить в конце очередного цикла сканирования, когда электронный луч возвраща- ется в верхний левый угол экрана. Если в буфер регенерации были записаны соответствующие изображения, изменение таблицы цветов
Архитектура растровых дисплеев 20} регенерации, позволяющее соз- дать изображение подпрыгива- ющего мяча. позволяет создавать мультипликацию — показывать последова- тельные фазы изменения изображения. Предположим, что необходимо создать на экране изображение подпрыгивающего мяча. На рис. 12.9 показано, как необходимо за- грузить буфер регенерации; числа обозначают значения пэлов, помещен- ные в каждую область буфера. На рис. 12.10 показано, как надо было бы формировать таблицу цветов на каждом шаге, чтобы создать на экра- не последовательность изображений, соответствующую подпрыгивающему мячу (от верхней точки до следующей верхней точки). Идея состоит в том, чтобы показывать все мячи, кроме одного с фоновым цветом 0. Циклически изменяя содер- жимое таблицы цветов, можно соз- дать эффект движения. В более сложных мультипли- кациях, например при вращении сложного «проволочного» объекта, не всегда удается избежать пере- крытий в буфере регенерации. Это приведет к тому, что некоторые изображения будут иметь «дыры». Небольшое количество таких дыр не слишком мешает восприятию, особенно если реалистичность изображения не является обязательной. С увеличением числа дыр мультипликация теряет эффективность. 12.4.3. Преобразование буфера регенерации В некоторых системах вывода изображения отсутствует прямое, фиксированное соответствие между позициями в буфере регенера- ции и позициями на видовой поверхности (например, на экране ЭЛТ). Как же определяется в этом случае связь между буфером и экраном? Для этого служит преобразование образа, являющееся по существу тем же преобразованием, что было определено в гл. 8. Буфер регенерации содержит изображение, прошедшее операцию отсечения и преобразованное (а возможно, и спроецированное) из мировых координат в координаты устройства. Преобразование об- раза переводит изображение из представления в буфере регенерации в представление на экране. В общем случае это преобразование мо- жет включать перенос, масштабирование, поворот и дополнительную операцию выделения окна. В коммерческих системах имеются толь- ко перенос и целочисленное масштабирование, но были разработаны прототипы систем, выполняющих поворот и непрерывное увеличение части изображения («наезд») [493].
Номер элемента Цвет, записываемый в таблицу на каждом шаге 1 2 3 4 5 6 7 8 9 10 II 0 Белый Белый Белый Белый Белый Белый Белый Белый Белый Белый Белый 1 Черный Черный Черный Черный Черный Черный Черный Черный Черный Черный Черный 2 3 4 5 6 7 Красный Красный Красный Красный Красный Красный Красный Красный Красный Красный Красный Глава 12 Рис. 12.10. Таблица цветов, создающая эффект движения для красного мяча, отскакивающего от черной поверхности (на белом фоне). Все явно не заданные элементы таблицы кодируют белый цвет.
Архитектура растровых дисплеев 205 Рис. 12.11. Увеличение части буфера регенерации до размеров экрана. На рис. 12.11 иллюстрируется тип преобразований, имеющийся в некоторых растровых дисплеях. Часть буфера регенерации, оп- ределенная окном, увеличивается до размеров всего экрана. Раз- меры экрана должны превышать в целое число раз размеры окна (на рис. 12.11 сторона экрана в 3 раза больше стороны окна). Пэлы буфера регенерации, находящиеся вне окна, не используются, и значения пэлов не изменяются: преобразования выполняются (30 раз в 1 с) системой вывода изображения. Преобразование образа может выполняться много раз в 1 с (до 30), что позволяет создавать динамические эффекты панорамирова- ния и/или наезда. Другой способ создания динамического изобра- жения состоит в разбиении буфера регенерации на 4, 8 или 16 облас- тей и формировании в каждой области отдельного изображения. Преобразование образа периодически изменяется так, чтобы по- казывать сначала одну область, затем другую и т. д. Масштабирование, необходимое для увеличения изображения, выполняется тривиально, путем повторного использования значе- ний пэлов, принадлежащих окну. Для увеличения изображения в два раза значение каждого пэла используется четыре раза — дважды на каждой из двух последовательных строк растра. На рис. 12.12 показан эффект увеличения буквы и отрезка в два раза. Если систе- ма хранения изображения не обладает большей разрешающей спо- собностью, чем экран, наезд не выявит в изображении никаких но- вых подробностей: оно будет просто более крупным и «зазубренным». Таким образом, данный способ создания динамического изображения приводит к потере пространственного разрешения, но сохраняет полный спектр цветов, в то время как способ, описанный в предыду- щем разделе, сохраняет пространственное разрешение, но уменьшает число цветов, доступных в одном кадре. В более общих применениях преобразования образа увеличен- ное изображение занимает только часть экрана, определенную полем вывода (рис. 12.13). В этом случае необходимо указать системе, что должно появиться на видовой поверхности вне поля вывода. Можно, например, заполнить экран некоторым фоном с постоянным цветом или яркостью; на рис. 12.13 иллюстрируется другой спо- соб — изображение буфера регенерации с тождественным преоб-
206 Глава 12 Рис. 12.12. Увеличение изображения в два раза. Б Рис. 12.13. Изображение буфера регенерации с тождественным преобразованием образа. а — буфер регенерации; б — видовая поверхность. разованием образа. Аппаратная реализация такого подхода проста. Регистры, содержащие координаты границ поля вывода, сравнива- ются с X- и Y-регистрами, определяющими текущую позицию гене- рируемого растра. Если электронный луч находится в поле вывода, пэлы извлекаются из окна в буфере регенерации и копируются не- обходимое число раз. В противном случае берутся пэлы из позиций буфера регенерации, имеющих те же координаты, что и электрон- ный луч. Уже созданы кристаллы СБИС, реализующие многие из перечис- ленных функций системы вывода изображения, поэтому эти возмож- ности станут, по-видимому, довольно обычными. Концепция рабо- чей станции, нашедшая отражение в пакете графических подпрог- рамм GKS, создает возможности для предоставления этих средств прикладному программисту [137]. 12.4.4. Смешение изображений Другой важной функцией системы вывода изображения является смешение изображений. Можно слить два изображения — одно, оп- ределенное буфером регенерации, и другое, определенное аналого- вым видеосигналом, поступающим с телевизионной камеры, видео-
Архитектура растровых дисплеев 207 Входной Видеосигнал Рис. 12.14. Смешивание изображения, определенного видеосигналом, с изобра- жением, определенным буфером регенерации. магнитофона, видеодиска или даже от другой графической системы, и показать на экране составное изображение. Этот метод часто ис- пользуется в коммерческом телевидении. На рис. 12.14 показана общая организация подобной системы. Основным вопросом в смешении изображений является выбор для каждого пэла значения, которое нужно использовать для построе- ния изображения: брать значение из буфера регенерации (или таб- лицы цветов, если она существует) или использовать значение, получающееся при обработке аналогового видеосигнала? Этот вы- бор обычно осуществляется на основании содержимого регистра- смесителя. Если значение пэла из буфера регенерации равно содер- жимому регистра-смесителя, показывается видеосигнал; в против- ном случае показывается значение пэла из буфера регенерации. Обычно в регистр-смеситель засылается значение, равное фону в буфере регенерации, однако можно использовать и другие значения, получая при этом различные интересные эффекты. Такая форма смешения в настоящее время применяется только в системах, имеющих 480 строк в растре, поскольку именно прибли- зительно такое число видимых строк содержится в растре широко- вещательного цветного телевидения (подробнее об этом см. гл. 17). Большинство растровых систем позволяют получить видеосигнал, соответствующий стандартам цветного телевидения. Этот сигнал используется для записи изображения или управления стандартны- ми телевизионными приемниками. К сожалению, полоса частот стан- дартного телевизионного сигнала не согласуется со строкой растра из 512 пэлов. Поэтому резкие цветовые переходы обычно размывают- ся, приводя к потере деталей изображения. Другой формой смешения, выполняемой системой вывода изоб- ражения, является наложение символа курсора на показываемое изображение. Некоторые системы имеют несколько различных сим- волов курсора; наиболее гибкие системы разрешают определять сим- вол курсора пользователю, например в растре размером 32x32 пэла. Такое средство позволяет реализовать динамическое перемещение небольших символов в требуемую позицию с помощью планшета или другого локатора без изменения содержимого буфера регенера- ции.
208 Глава 12 12.5. АЛЬТЕРНАТИВНЫЕ АРХИТЕКТУРЫ РАСТРОВЫХ ДИСПЛЕЕВ В предыдущих разделах буфер регенерации, система создания изображения и ЭВМ рассматривались как три различные подсисте- мы. Это соответствует архитектуре, используемой в большинстве коммерческих растровых систем. Однако существуют несколько важных модификаций этой схемы, которые рассмотрены ниже. Все модификации основываются на том, что для растровой сис- темы требуются три области памяти: 1) для прикладной программы и прикладных данных; 2) для программ и данных системы создания изображения (ал- горитмы растровой развертки); 3) для буфера регенерации. Имеются также два активных процесса: процесс прикладной программы и процесс создания изображения. Все области памяти традиционно размещаются в трех отдельных адресных пространствах, а процессы выполняются на двух раздель- ных процессорах. В двух описываемых ниже архитектурах число процессоров и адресных пространств уменьшено до одного процессо- ра и одного адресного пространства. 12.5.1 . Однопроцессорная система Система создания изображения почти неизбежно реализуется как микропроцессор. Почему не использовать этот процессор также и для выполнения прикладной программы? В этом случае мы имеем систему с одним ЦП (рис. 12.15). Такое решение снижает затраты на систему, поскольку в ней теперь присутствует только один про- цессор. Однако такая система работает более медленно, поскольку при выполнении алгоритма растровой развертки бездействует прик- ладная программа и наоборот. Эта ситуация подобна ситуации в сателлитных графических систе- мах, кратко рассмотренной в гл. 10. Многие растровые системы можно представить себе как сателлитные графические системы с фиксированными функциями: система создания изображения выпол- няет фиксированный набор графически ориентированных функций. Добавив прикладное программирование, мы получим программируе- мый сателлит. В предельном случае такая система может стать независимой от основной ЭВМ. Сателлитные графические системы развивались как раз в обратном направлении: первые системы сос- тояли из одной ЭВМ и дисплея, современные системы содержат две ЭВМ с целью разгрузки центральной ЭВМ. Многие однопроцессорные растровые дисплеи организованы та- ким образом, что к графическим функциям можно обращаться любым из трех способов:
Архитектура растровых дисплеев 209 Рис. 12.15. Однопроцессорный растровый дисплей. вызовом подпрограммы из прикладной программы, выполняе- мой на единственном процессоре; вводом соответствующей команды с клавиатуры; посылкой команды по линии связи из некоторой другой ЭВМ. Таким образом, сфера применений однопроцессорных систем до- вольно разнообразна. 12.5.2 . Система с одним адресным пространством Другая архитектурная модификация касается связи буфера ре- генерации с памятью системы создания изображения. Буфер и эта память обычно находятся в отдельных адресных пространствах, поскольку хранение миллиона пэлов, описывающих изображение, требует 20-битового адреса, в то время как типичная ЭВМ, исполь- зуемая в системе создания изображения, имеет в большинстве слу- чаев 16-битовый адрес. Система с одним адресным пространством (рис. 12.16), реализованная либо на ЭВМ с большим адресным про- странством, либо на дисплее с низким разрешением, может упрос- тить программирование системы создания изображения. Большинст- во персональных ЭВМ имеют такую архитектуру, например мощные Alto и PERQ (обсуждаемые в гл. 1 и в разд. 12.6) и система, опи- санная в работе [29]. Программирование таких систем осуществляется особенно прос- то, если имеются режимы адресации, позволяющие рассматривать буфер регенерации как двумерное адресное пространство, а не как обычное для памяти одномерное пространство. Полезна также воз- можность начинать регенерацию изображения с любого адреса. Это позволяет создавать новое изображение в одной части памяти, в то время как другое изображение регенерируется из другой части памяти. Часть показываемого изображения можно быстро изменить путем пересылки значений пэлов в памяти. Такая простая архитектура должна быть реализована с особой тщательностью, так как частый доступ к памяти, необходимый для регенерации изображения, может существенно замедлить выполне- ние процессором команд. Считывание нового пэла каждые 100 нс для системы с разрешающей способностью 512x512 (разд. 3.5)
210 Глава 12 Рис. 12.16. Система с одним адресным пространством. может полностью заблокировать процессор, оставив ему только время для обратного хода луча. Для устранения этих трудностей •следует расслаивать память так, чтобы в каждом цикле доступа извлекалось более одного пэла. Типичные системы извлекают в од- ном цикле 8, 16 или даже 32 пэла. 12.5.3. Организация буфера регенерации Модификации архитектуры растровых дисплеев, которые рас- смотрены в данном разделе, касаются организации буфера регенера- ции. До сих пор предполагалось, /V в 1 Справочник строк растра Рис. 12.17. Раздельное хранение строк изображения. что каждый пэл имеет отдельную ячейку памяти и пэлы, располо- женные рядом в строке (или, наоборот, в столбце), занимают смежные ячейки в буфере реге- нерации. Ни одно из этих пред- положений не является обяза- тельно истинным. Можно легко представить се- бе схему, в которой отдельные строки растра физически не- прерывны в памяти, но сами строки образуют связанный спи- сок. Тогда строка растра состоя- ла бы из памяти, необходимой для хранения пэлов строки, и дополнительной ячейки, кото- рая содержит адрес, указываю- щий на следующую строку раст- ра. Система вывода изображения могла бы использовать этот адрес для нахождения следующей строки растра во время перевода луча с правого края экрана на левый. Возможно другое решение: орга- низация физически непрерывного вектора адресов (называемого справочником строк растра), указывающих на каждую строку раст- ра (рис. 12.17). Такие схемы облегчают быстрое изменение частей изображения. Большая гибкость достигается, если адрес справочника строк раст- ра не фиксирован, а задается в регистре. Другая возможность, опи- санная в работе [340], состоит в добавлении к адресу строки растра счетчика повторений, который указывает, сколько раз нужно пов- торить каждый пэл данной строки. Изображение с невысоким раз-
Архитектура растровых дисплеев 211 Л г h I А) «----о ]----м-----------02---------м—------D з-----—► Рис. 12.18. Кодирование полос. решением можно сформировать, заслав в W последовательных элементов справочника адрес одной и той же строки и задав N в ка- честве счетчика повторений. С помощью данного метода можно одной строкой, состоящей из одного пэла, закрасить постоянным цветом весь экран. Метод кодирования полос, давно используемый для передачи факсимиле и фотографий, исключает повторную спецификацию рав- ных значений пэлов. Каждая строка растра разбивается на после- довательность полос пэлов с одинаковыми значениями. На рис. 12.18 показана строка растра, состоящая из трех полос пэлов Dit каждая с яркостью Каждую полосу можно представить в виде пары (pt, Ц). Значение /г может представлять яркость или тройку кодов цветов Rt, Git Bp It может быть также индексом в таблице цветов системы вывода изображения. При хранении Dtn Ц обычно занима- ют по байту. Известен вариант метода кодирования полос, допускающий ли- нейное изменение яркости в полосе. Он используется при закраске методом Гуро (гл. 16). В этом случае каждый отрезок представляет- ся тройкой чисел: длиной Dt, начальной яркостью /г и изменением яркости при переходе к следующему пэлу dlt. Если d!t=0, отрезок показывается с постоянной яркостью. Таблица цветов обычно не используется. Если же она применяется, ее необходимо формировать очень тщательно, чтобы все значения индексов для каждой полосы, определенные выражением liPkdP, k=Q, 1, 2..... Dt, представляли разумные последовательности яркостей или цветов. С помощью кодирования полос можно существенно уменьшить объем памяти, необходимый для хранения изображения. Выигрыш максимален для изображений, состоящих из небольшого числа длин- ных полос. При выделении на каждую полосу двух байтов многие очень реалистические машинные изображения могут храниться в памяти, составляющей 10% той памяти, которая требуется при ис- пользовании традиционного буфера регенерации, где каждый пэл занимает 1 байт. Такое десятикратное уплотнение информации приобретает осо- бенно большое значение при передаче изображений по линиям свя- зи и при создании динамического изображения, поскольку подго- товка нового изображения 30 раз в 1 с для экрана с разрешающей способностью, составляющей 512x512x8 бит, требует обработки 7,5 млн. байтов информации в 1 с. Такие объемы вычислений с та-
212 Глава 12 о- а з о. о, оь б Рис. 12.19. Модификация изображения при использовании метода кодирования полос. а — до вставки; б — после вставки. * кой большой скоростью обеспечить трудно, в то же время в 10 раз ( меньшие объемы и скорости реальны. Небольшой современный | магнитный диск объемом 64 Мбайт может хранить минутный «фильм» | при условии показа в 1 с 15 кадров, состоящих в среднем из 20 000 ’ отрезков, каждый из которых кодируется 16 бит [231]. Для хране- ния эквивалентного фильма при обычном кодировании потребова- лось бы (для дисплея с разрешением 512x512 пэлов) 256 Кбайт X X15 кадров/с X 60 с=230,4 Мбайт, причем пропускная способ- ность канала ввода-вывода должна составлять 15x256 Кбайт/с - или 3,75 Мбайт/с, что находится за пределами возможностей диско- - вых контроллеров интерфейса ввода-вывода и внутренних шин , большинства мини- и микро-ЭВМ. Почему же метод кодирования полос не используется широко? Потому что, кроме преимуществ, он обладает существенными недос- татками. Во-первых, при уменьшении средней длины полос быстро | увеличивается объем памяти, занимаемой изображением. При при- | ближении длины полосы к 1 объем памяти вдвое превышает объем, , требуемый для традиционных систем. Во-вторых, система вывода изображения, уже ставшая более сложной вследствие необходимос- ти декодировать полосы, обычно не может показывать длинные пос- ледовательности очень коротких полос: ей просто не хватает време- ни на выборку и декодирование большого числа последовательных полос (на пэл отводится ~100 нс для дисплея с разрешением 512Х Х512), каждая из которых имеет длину, равную одному пэлу. В-третьих, если даже метод кодирования полос хорошо соответ- i ствует характеру изображения, возникает другое неудобство: j трудно изменить изображение. Рассмотрим длинную полосу с| яркостью /, (рис. 12.19). Ее можно закодировать парой чисел (D;, 1 /г). На рис. 12.19, б показан результат добавления полосы с яркое-я тью /2. Теперь этот участок изображения кодируется тремя парами! чисел (Da, Л), (Db, 1Я), (Dc, Is). Полосы обычно хранятся последо-1 вательно в буфере регенерации, поэтому добавление двух новых по-1 лос означает сдвиг в памяти всех последующих полос. | -Обобщение одномерного кодирования полос на два измерения! описано в работах [213, 462]. Области постоянной яркости пред-|
Архитектура растровых дисплеев 213 Байт 1 76543 510 I I I Мерцание I „ сроновый цвет Тип Основной цвет Рис. 12.20. Клеточное кодирование. Байт 0 ставляются очень небольшим числом байтов, в то время как в об- ластях с изменяющейся яркостью на каждый пэл выделяется один бит. Клеточное кодирование — другой способ экономии памяти, за- нимаемой пэлами. Изображение делится на прямоугольные клетки размером обычно от 6x8 до 10x14 пэлов. Каждая клетка кодирует- ся затем в буфере регенерации некоторым числом байтов (меньшим, чем требовалось бы для нормального бу- фера регенерации). В методе кодирова- ния, используемом в дисплеях Tektro- nix (модели 4025 и 4027), клетка, пэлы которой имеют одинаковое значение, представляется одним или двумя байта- ми. Клетки, пэлы которых имеют раз- ные значения, представляются в полном объеме на уровне пэлов; при этом па- мять, необходимая для хранения клет- ки размером 8x14 пэлов, выделяется динамически. При таком клеточном кодировании от- сутствует фиксированная и неизменная связь между пэлами и ячейками памяти. Существует вариант клеточного кодиро- вания, в котором каждой клетке припи- Рис. 12.21. Клетка изобра- жения, которое представлено с помощью клеточного ко- дирования. Клетка состоит из 8 подклеток, содержащих по 6 пэлов. сывается фиксированное множество ячеек памяти; в клетке обычно содержится либо литера, либо какая-то фигура. На рис. 12.20 показано, как реализуется такое кодирование при использовании двух байтов на клетку размером 6x8 пэлов. Бит типа указывает, как нужно интерпретировать байт 0. В одном случае этот байт содержит код литеры: литера изображается основным цветом (од- ним из восьми), заданным в байте 1; остальные пэлы изображаются фоновым цветом. В другом случае байт 0 интерпретируется как 8 отдельных битов. Каждый бит определяет цвет (основной или фоновый) одной подклетки размером 2X3 пэла (разбиение клетки на подклетки иллюстрируется рис. 12.21). К сожалению, такая схема кодирования не позволяет задавать цвет каждого пэла от- дельно. Этот метод представляет собой компромисс между размера- ми буфера регенерации и сложностью изображения. Кодирование полос и другие способы клеточного кодирования (см., например, работу [249]) также представляют собой подобные компромиссы.
214 Глава 12 Напомним, что в буфере регенерации хранится такое представ-1 ление изображения, которое может просматриваться системой вы-1 вода по крайней мере 30 раз в 1 с. Предположим, что система созда-| ния изображения создает новое изображение по подаваемым на ее] вход командам (MOVE, LINE, TEXT и т. д.) 30 раз в 1 с, т. е. она ’ успевает формировать каждую строку развертки как раз тогда, 1 когда она нужна для рисования строки растра на экране. В этом ч случае буфер регенерации не нужен, алгоритм растровой развертки выполняется на лету. Такой подход был реализован не только для двумерной развертки, но и для трехмерного удаления скрытых по- верхностей. Однако подобные системы пока еще весьма дороги, за | исключением систем с очень ограниченными возможностями Разум-1 но предположить, что революция в сфере СБИС затронет и эту | область: в настоящее время уже ведутся исследования по созданию 1 систем из нескольких специализированных микропроцессоров; та-1 кие системы будут способны выполнять алгоритм развертки на лету, s 1 12.6. РАСТРОВАЯ АРХИТЕКТУРА ДЛЯ ПЕРСОНАЛЬНЫХ ЭВМ В гл. 1 кратко описана модель фирмы Xerox (PARC-модель). Это локальная сеть из сотен персональных мини-ЭВМ (таких, как Alto, Dolphin, Dorado) и нескольких общедоступных ЭВМ (называе- мых архивными ЭВМ и печатными ЭВМ), которые управляют внешней памятью большого объема и различными типами печатаю- щих устройств. Такая конфигурация впервые создана в 1973 г. | для экспериментальной проверки идеи о возможности замены вычис- J лительных услуг, предоставляемых традиционными системами с раз- ’ делением времени, вычислительными услугами относительно неболь- ших выделенных ЭВМ, лишь изредка обращающихся к большим ЭВМ для доступа к базам данным, для выполнения больших объемов вычислений и для операций с другими внешними устройствами (та- кими, как печатающие устройства). Фактически услуги, предостав- ляемые в последнем случае, намного превосходят то, что имеется в большинстве систем с разделением времени: и в отношении вычис- лительных мощностей, и особенно в отношении качества интерфейса с пользователем, обеспечиваемого быстрым черно-белым растровым дисплеем с высокой разрешающей способностью (808x608 пэлов). » Все взаимодействия пользователя с выделенной ЭВМ выполняютсцл быстро, а выводимый на экран текст и графические изображения отличаются более высоким качеством, чем в обычных алфавитно- цифровых и даже многих графических терминалах. Для человеком машинных диалогов, протекающих в среде с такими необычайно* богатыми возможностями, разработаны новые методы и решения»' которые, по-видимому, будут широко применяться в аналогичных? разработках 80-х годов [369, 344, 484, 10, 206]. Предполагается^ что PARC-модель вычислений получит поддержку большинства!
Архитектура растровых дисплеев 215 Рис. 12.22. Упрощенная схема персональной ЭВМ Alton подключение к локальной сети Ethernet. пользователей (программистов и конечных пользователей); напри- мер, в приложениях, связанных с автоматизацией канцелярского труда, рабочими станциями на базе персональных ЭВМ будут поль- зоваться и профессионалы, и вспомогательный персонал. В архитектуре персональной ЭВМ Alto центральную роль игра- ет универсальный микропрограммируемый 32-битовый процессор с циклом 170 нс [462]. Этот процессор одновременно выполняет. 16 фиксированных задач в соответствии с простой приоритетной схемой. Одна задача эмулирует процессор с относительно простой архитектурой, программируемой 16-битовыми командами, в то время как другие микропрограммные задачи помогают аппаратным контроллерам ввода-вывода управлять локальными периферийными устройствами (кассетным магнитным диском емкостью 2,5 Мбайта; растровым дисплеем; клавиатурой; мышью; интерфейсом с локаль- ной сетью Ethernet [317]). На рис. 12.22 приведена упрощенная схема Alto (эмулируемый процессор и дисплейная система показаны как отдельные блоки, хотя на самом деле они являются микропрограммами, совместно использующими один и тот же базовый процессор). Память, «разде- ляемая» процессором и дисплейной системой, содержит битовую карту регенерации, которая для максимального изображения, сос- тоящего из 808x608 пэлов, занимает примерно половину стандарт- ной памяти объемом 128 кбайт. В битовой карте отсутствует описа- ние пустых областей экрана. С помощью управляющих блоков организуется цепочка частичных битовых карт, описывающих те прямоугольные блоки экрана, в которых действительно присутству- ет информация. Поэтому многие изображения требуют лишь часть той памяти или часть того количества обращений процессора к па- мяти, которые требовались бы при полном кодировании экрана. Ли-
216 Глава 12 теры и символы генерируются путем копирования их битовых пред- ставлений; такое копирование, а также быстрое перемещение окон по экрану осуществляется с помощью микропрограммно-реализо- ванной быстрой растровой операции Bit-Bit, предназначенной для действий с блоками. Как уже говорилось выше, на основе модели Alto разработаны и продаются мощные персональные ЭВМ, предназначенные для ис- пользования в качестве узлов локальной сети и для связи с архив- ными и печатными ЭВМ. Для них обычна шинно-ориентированная архитектура, в которой в качестве центрального процессора исполь- зуется стандартный микропроцессор (такой, как Motorola 68000), а для управления дисплеем и другими периферийными устройства- ми применяются дополнительные микропроцессоры. В некоторых системах регенерация изображения осуществляется из разделяемой памяти, в других — из собственной памяти, которая обычно нахо- дится в адресном (виртуальном) пространстве центрального процес- сора. Оба этих решения делают возможным тот тип быстрой модифи- кации изображения, который реализован в Alto. Дополнительно пос- тавляемые «устройства», выполненные на быстрой дискретной ло- гике или битовых секциях, могут осуществлять копирование бло- ков и растровую развертку с помощью алгоритмов, описанных в гл. 11. Независимо от конкретной реализации высокоскоростной графический ввод-вывод как средство интерфейса с пользователем остается ядром такой архитектуры. Кроме того, эти мощные пер- сональные ЭВМ обычно предоставляют средства управления па- мятью, например страничную и/или сегментированную виртуальную память, локальный диск, клавиатуру, локатор, черно-белый мони- тор с высокой разрешающей способностью и сетевой интерфейс. Наиболее мощные представители будущих коммерческих семейств персональных ЭВМ могут фактически конкурировать с большими ЭВМ конца 70-х и начала 80-х годов в отношении быстродействия (около 1 млн. операций с фиксированной точкой в 1 с) и объема локальной памяти (1—4 Мбайт). Например, ЭВМ Star (из серии ЭВМ типа Alto), разработанная в 1981 г., имеет 384 кбайт оператив- ной памяти, намного более быстрый процессор, чем у Alto, и дисплей, имеющий 809 строк по 1024 пэла в каждой строке. Высокое качество интерфейса с пользователем у этих ЭВМ объяс- няется тесной интеграцией центрального процессора и дисплейной системы (одно адресное пространство, описанное в разд. 12.5.2). Архитектура с разделяемой памятью исключает обусловленные операциями ввода-вывода задержки, которые возникли бы, если было необходимо формировать и посылать дисплейные команды в отдельную систему создания изображения. Вместо этого централь- ный процессор непосредственно модифицирует некоторое представ- ление изображения (битовую карту или ее закодированную форму) и результаты видны сразу. Поэтому эта архитектура все чаще ис- пользуется для многих графических приложений и для графиче-
Архитектура растровых дисплеев 217 ских интерфейсов с программируемой средой.,Все более обычными будут персональные ЭВМ с цветными дисплеями, допускающими манипуляции с таблицей цветов. УПРАЖНЕНИЯ 12.1. Напишите программу (подробную последовательность дисплейных ко- манд), позволяющую пользователю рисовать от руки одноцветный замкнутый контур, заполняемый затем некоторым другим цветом. Пользователь задает внут- реннюю точку контура с помощью локатора. 12.2. Напишите программу (подробную последовательность дисплейных ко- манд) для буксировки какого-либо объекта (например, дома) по экрану. Момент завершения буксировки задается пользователем. 12.3. Покажите, как нужно сформировать таблицу цветов для монохрома- тического дисплея (разд. 12.3), чтобы на экран выводились различия в изображе- ниях, заданных плоскостями 2 и 0. Измените масштаб яркости таким образом, чтобы нулевая разность показывалась с третьим уровнем яркости, т. е. чтобы по- лучилось «негативное» изображение различий. 12.4. Нарисуйте блок-схему (аналогичную той, что приведена на рис. 3.36) системы вывода изображения с дополнительными регистрами и сравнениями, не- обходимыми для вывода изображений, подобных приведенному на рис. 12.13. 12.5. Напишите процедуру для кодирования полос изображения, хранящегося в виде двумерного массива пэлов, и процедуру обратного преобразования. 12.6. Напишите процедуру для растровой развертки отрезка в буфер регене- рации, в котором используется кодирование полос. 12.7. Напишите процедуру для растровой развертки прямоугольника в бу- фер регенерации, в котором используется кодирование полос. Сделайте то же для ломаной и для литеры. 12.8. Модифицируйте процедуру Брезенхэма и гл. 11 таким образом, чтобы при растровой развертке отрезок нулевой длины отображался в один пэл. (Сущест- вующий алгоритм не обрабатывает отрезки нулевой длины.) 12.9. На вашем растровом дисплее определите, одинаковый ли результат дает его алгоритм растровой развертки отрезков при перестановке конечных точек отрезка. 12.10. Спроектируйте на уровне регистров логическую схему системы вывода изображения, способной работать с буфером регенерации, приведенным на рис. 12.17. Проделайте это упражнение для изображений, закодированных полосами. 12.11. Напишите набор подпрограмм для моделирования растровой системы, описанной в разд. 12.2. Используйте в качестве устройства вывода построчное печатающее устройство или растровый дисплей.
Глава 13 Представление пространственных форм 13.1. ВВЕДЕНИЕ Во многих приложениях машинной графики возникает потреб- ность в представлении трехмерных форм: при проектировании са- молетов, при восстановлении трехмерных тел по изображениям их поперечных сечений, построенных с помощью машинной томог- рафии, при автоматической сборке и во многих других. Необходи- мость описывать пространственные объекты появляется в двух си- туациях. Во-первых, когда мы хотим описать уже существующий объект: грань, пластилиновую модель автомобиля или гору. В об- щем случае реально существующий объект не может, конечно, в точ- ности соответствовать своему представлению. Для этого в худшем случае потребуется бесконечное число троек (х, у, г) — по одной для каждой точки поверхности объекта. В лучшем же случае объект удается точно представить комбинацией математических поверхнос- тей, таких, как плоскости, сферы и др. Как правило, мы выбираем некоторое множество точек на объекте и требуем, чтобы представле- ние объекта в точности соответствовало самому объекту только в этих выбранных точках или расстояния между представлением и этими точками объекта были малыми. Представления существую- щих поверхностей, таким образом, должны удовлетворять этим ог- раничениям. Во-вторых, такая необходимость возникает в задачах автома- тизированного проектирования. В этом случае нет заранее сущест- вующей модели исследуемого объекта: конструктор, руководствуясь, возможно, лишь приблизительным эскизом, «создает» пространст- венную форму, действуя в интерактивном режиме. Используемое представление должно быть удобно для работы в режиме диалога, чтобы поверхность можно было легко привести к желаемой форме. Нам уже известно, как изображаются пространственные объекты, когда их удается представить в виде последовательности отрезков прямых, заданных в мировых координатах, и как просматривается иерархическая структура данных, самые нижние уровни которой являются отрезками. Хотя представление трехмерного объекта в виде совокупности отрезков прямых и дает нам возможность сге- нерировать линейчатый образ объекта, однако не позволяет удалить с изображения скрытые поверхности, вычислить вес или объем объекта или подготовить команды для робота-сборщика. Совокуп- ность отрезков не является адекватным описанием объекта, посколь-
Представление пространственных форм 219 Рис. 13.1. Представление пространственных форм с помощью набора из 12 от- резков. а — совокупность, состоящая из 12 отрезков; б — те же 12 отрезков задают четырехсторон- ний объект, открытый с обоих концов; в — те же 12 отрезков описывают открытую коробку; г —- те же 12 отрезков определяют куб. ку отрезки сами по себе не определяют поверхностей. В то же время информация о поверхностях необходима для проведения вычисле- ний, связанных со стиранием скрытых частей изображения, для оп- ределения объемов и т. д. На рис. 13.1 показано, как набор отрезков может представлять несколько различных пространственных форм. Таким образом, мы приходим к выводу, что для описания трехмер- ных форм необходимы поверхности — примитивы более высокого уровня, чем отрезки. Эта глава является введением в область геометрического модели- рования, называемую также конструированием форм. Эта область чрезвычайно обширна (в сборнике [20] имеется подборка статей на эту тему, а в монографии [150] излагается сам предмет). Мы сосредо- точим внимание на двух широко распространенных трехмерных представлениях поверхностей в пространстве: полигональных сет- ках и параметрических бикубических кусках. Полигональной сеткой является совокупность связанных между собой плоских многоуголь- ников. Наружную форму большинства зданий можно легко и ес- тественно описать с помощью полигональной сетки (так же, как ме- бель и комнаты). Полигональные сетки применяются также для пред- ставления объектов, ограниченных криволинейными поверхностя- ми (рис. 13.2). Однако недостатком этого метода является его при- близительность. На рис. 13.3 показаны поперечное сечение объек- та, а также полигональная сетка, применяемая для его представле- ния. Хорошо видимые ошибки в представлении можно сделать сколь угодно малыми, используя все большее число многоуголь- ников для улучшения кусочно-линейной аппроксимации объекта. Однако это приведет к дополнительным затратам памяти и вычисли- тельного времени для алгоритмов, работающих с таким представле- нием. Параметрические бикубические куски описывают координаты точек на искривленной поверхности с помощью трех уравнений (по одному для х, у и ?). Каждое из уравнений имеет две переменные (два параметра), причем показатели степени при них не выше треть- ей (отсюда название бикубический). Границами кусков являются параметрические кубические кривые. Для представления поверх- ности с заданной точностью требуется значительно меньшее число
220 Глава 13 Рис. 13.2. Пространственный объект, представленный с помощью многоугольни- ; ков. (С разрешения фирмы Evans and Sutherland.) бикубических кусков, чем при аппроксимации полигональной сет- кой. Однако алгоритмы для работы с бикубическими объектами существенно сложнее алгорит- мов, имеющих дело с много- угольниками. В этой главе сна- чала рассмотрены полигональ- ные сетки, а затем бикубиче- ские поверхности. При использовании обоих , методов трехмерное тело пред- ’< ставляется в виде замкнутой поверхности. В отличие от это- го при моделировании сплошных тел имеют дело с твердыми объектами. В качестве примити- Рис. 13.3. Поперечное сечение криво- ВОВ выступают такие тела, как линейного объекта и его полигональная кубы, конусы, сферы И ЦИЛИНД- аппроксимация. рЫ) которые можно объеди- нять и вычитать, образуя раз- личные формы. Шарикоподшипник, изображенный на вклейке 14, описан именно таким образом. (Желающие подробнее ознакомиться с моделированием сплошных тел, которое нами здесь не рассматри- - вается, могут обратиться к работам [56, 480, 481, 3881.) 1 13.2. ПОЛИГОНАЛЬНЫЕ СЕТКИ Полигональная сетка представляет собой совокупность ребер, ( вершин и многоугольников. Вершины соединяются ребрами, а мно- | гоугольники рассматриваются как последовательности ребер или ]
Представление пространственных форм 221 вершин. Сетку можно представить несколькими различными спосо- бами; каждый из них имеет свои достоинства и недостатки. Приклад- ному программисту следует выбрать способ, наиболее подходящий для его задачи. Разумеется, в одной задаче может с успехом приме- няться сразу несколько представлений: для внешней памяти, внут- реннего использования и пользователя. Для оценки этих представлений используются следующие кри- терии: Объем требуемой памяти. Простота идентификации ребер, инцидентных вершине. Простота идентификации многоугольников, которым принад- лежит данное ребро. Простота процедуры поиска вершин, образующих ребро. Легкость определения всех ребер, образующих многоугольник. Простота получения изображения полигональной сетки. Простота обнаружения ошибок в представлении (например, от- сутствие ребра, вершины или многоугольника). Мы еще вернемся к этим критериям, когда будем рассматривать представления полигональных сеток. В общем случае чем более явно- выражены зависимости между многоугольниками, вершинами и ребрами, тем быстрее работают операции над ними и тем больше памяти требует соответствующее представление. Рассмотрим теперь три способа описания полигональных сеток. 13.2.1. Явное задание многоугольников’ Каждый многоугольник можно представить в виде списка коор- динат его вершин: Р 1/1, ^1), 0-2, У%> ^2), •••> О-n, Упу 2-п))- Вершины запоминаются в том порядке, в котором они встречаются при обходе вокруг многоугольника. При этом все последовательные- вершины многоугольника, а также первая и последняя соединяются ребрами. Для каждого отдельного многоугольника данный способ- записи является эффективным, однако для полигональной сетки дает большие потери памяти вследствие дублирования информации о координатах общих вершин. Более того, явного описания общих ребер и вершин просто не существует. Например, поиск всех много- угольников, которые имеют общую вершину, требует сравнения троек координат одного многоугольника с тройками координат всех остальных многоугольников (рис. 13.4). Наиболее эффективный способ выполнить такое сравнение состоит в сортировке всех АГ
222 Глава 13 координатных троек: для этого по- требуется в лучшем случае N\og2N сравнений. Но и тогда существует опасность, что одна и та же вер- шина вследствие ошибок округления может в разных многоугольниках иметь различные значения коорди- нат, поэтому правильное соответст- вие может быть никогда не найде- но. Полигональная сетка изобража- ется путем вычерчивания ребер каж- дого многоугольника, однако это приводит к тому, что общие ребра рисуются дважды — по одному разу для каждого из многоугольников. Отдельный многоугольник изобража- ется тривиально. общей вершиной А. 13.2.2. Задание многоугольников с помощью указателей в список вершин При использовании этого представления каждый узел полиго- нальной сетки запоминается лишь один раз в списке вершин V— =((Xi, У1, Zi), ..., (хп, уп, zn)). Многоугольник определяется списком указателей (или индексов) в списке вершин. Многоугольник, сос- тавленный из вершин 3, 5, 7 и 10 этого списка, представляется как Р=(3, 5, 7, 10). На рис. 13.5 приведен пример такого представления. Оно имеет ряд преимуществ по сравнению с явным заданием многоугольни- ков. Поскольку каждая вершина многоугольника запоминается только один раз, удается сэкономить значительный объем памяти. Кроме того, координаты вершины можно легко изменять. Однако все еще не просто отыскивать многоугольники с общими ребрами; последние при изображении всей полигональной фигуры по-прежне- му рисуются дважды. Эти две проблемы можно решить, если опи- сывать ребра в явном виде. Рис. 13.5. Многоугольник, V = (V,. V2, V3. V4) = ((XVh' Z1>'• • •',x4'г4,) P, = (1 2 4) P2 = (4, 2, 3) заданный индексами в списке вершин.
Представление пространственных форм 223 V = (V,, v2, v3, V4) = |(xv , (x4, y4, Z4)) £, =(И- f2 = <V2- V3‘ P2- M f3 = (''3-V4. P2-X> £4 = (1/4,V2,P„P2) £-s = (v4^p = (fp^ f5) ?2 - (f2, f3' f4) Рис. 13.6. Представление полигональной сетки (X означает «пусто»). 3.2.3. Явное задание ребер В этом представлении имеется список вершин V, однако будем рассматривать теперь многоугольник не как список указателей на список вершин, а как совокупность указателей на элементы списка ребер, в котором ребра встречаются лишь один раз. Каждое ребро в списке ребер указывает на две вершины в списке вершин, определяющие это ребро, а также на один или два многоугольника, которым это ребро принадлежит. Таким образом, мы описываем многоугольник как P=(Elt ..., Еп), а ребро как E = (Ei, V2, Pi, Р2). Если ребро принадлежит только одному многоугольнику, то либо Pi, либо Р2 — пусто. На рис. 13.6 приведен пример такого представ- ления. При явном задании ребер полигональная сетка изображается путем вычерчивания не всех многоугольников, а всех ребер. В ре- зультате удается избежать многократного рисования общих ребер. Отдельные многоугольники при этом также изображаются довольно просто. В некоторых приложениях ребра полигональных сеток являются общими для более чем двух многоугольников. Рассмотрим, напри- мер, случай в картографии, когда такие подразделения, как округа, штаты и т. д., описываются многоугольниками. Ребро (или последо- вательность ребер), представляющее часть границы между двумя штатами, является также границей округа в каждом штате, а воз- можно, и города. Таким образом, ребро может принадлежать одно- временно шести многоугольникам. Если принять во внимание деле- ние городов на районы, избирательные округа и школьные участки, то это число соответственно возрастет. Аналогично в некоторых трех- мерных приложениях, таких, как описание ячеистой структуры металлического слоя, ребра принадлежат по крайней мере трем многоугольникам. Для таких приложений описания ребер могут быть расширены, чтобы включить произвольное число многоуголь- ников: Е = (У1, V2, Pi, Pt, ..., Р„). Ни в одном из этих представлений задача определения ребер, инцидентных вершине, не является простой — для ее решения необходимо перебрать все ребра. Конечно, для определения таких отношений можно непосредственно использовать дополнительную
224 Глава 13 информацию. Например, в представлении, предложенном Бомгар-| том [27], применяется расширенное описание ребер, включающее] указатели на два соседних ребра каждого многоугольника, а также 1 описание вершин, включающее указатель на (произвольное) ребро, инцидентное вершине. В результате имеется больше информации о многоугольниках и вершинах. 13.3. НЕПРОТИВОРЕЧИВОСТЬ ПРЕДСТАВЛЕНИЙ ПОЛИГОНАЛЬНОЙ СЕТКИ Как определить, является ли описание полигональной сетки непротиворечивым, т. е. что все многоугольники замкнуты, все реб- ра используются по крайней мере один раз и не свыше, чем некоторое указанное в задаче максимальное число раз, а на каждый узел есть ссылка по крайней мере от двух ребер? В некоторых приложениях, кроме того, требуется, чтобы сетка была связной (в любой узел мож- но попасть из любого другого узла, двигаясь вдоль ребер) или плос- кой (узлы, задаваемые ребрами, связаны бинарным отношением, которое можно представить в виде плоского графа) или не имела дыр (существует только одна граница — связная последовательность ребер, каждое из которых принадлежит только одному многоуголь- нику). Непротиворечивость имеет важное значение, поскольку сетки часто генерируются в интерактивном режиме, в том числе иногда путем оцифровывания чертежей, поэтому ошибки при этом неиз- бежны. Из трех названных выше приложений схему с явным заданием ребер наиболее просто проверить на непротиворечивость, поскольку в ней содержится больше всего информации. Например, чтобы быть уверенным, что все ребра входят в состав по крайней мере одного, но не более чем некоторого максимального числа многоуголь- ников, нам необходимо проделать следующее: for всех ребер j из множества ребер do счетчикjt=Q for всех многоугольников Р,- из множества многоугольников do for всех ребер j многоугольника Pt do счетчик f.=c4em4UKj-}- 1 for всех ребер j из множества ребер do begin if счетчик? = О then ОШИБКА if счетчик г > максимум then ОШИБКА end Это, безусловно, не является полной проверкой на противоречи- вость. Например, ребро, дважды используемое в одном и том же многоугольнике, не будет обнаружено. Можно применить аналогич- ную процедуру, чтобы быть уверенным, что каждый узел принадле- жит по крайней мере одному многоугольнику. Это возможно в том случае, если по крайней мере два ребра одного и того жемногоуголь- ;
Представление пространственных форм 225 ника имеют ссылки на данный узел. Ошибочной является ситуация, когда два узла, принадлежащие одному и тому же ребру, совпадают, если только не предусмотрен вырожденный случай отрезков нуле- вой длины. Мы можем определить, обладает ли каждый из многоугольников сетки по крайней мере одним общим ребром (в этом случае ни один из многоугольников не располагается отдельно от остальных). От- метим, что это совсем не та ситуация, при которой в каждый узел можно попасть из любого другого узла. Для этого надо применить следующий алгоритм: for всех многоугольников Р, из множества многоугольников do begin общее-ребро := false repeat для всех ребер Е/ многоугольника Р; if Ej общее then общее-ребро true until общее_ребро if not общее-ребро then ОШИБКА end Возможна также и более детальная проверка: можно проверять, например, чтобы каждый многоугольник, на который имеется ссылка со стороны ребра Et, сам в свою очередь ссылался на ребро Et. Тем самым гарантируется, что все ссылки от многоугольников на ребра установлены. Аналогично можно проверить, имеется ли ссылка со стороны каждого ребра, на который ссылается многоуголь- ник Pit на этот многоугольник Pt. В результате получаем гарантию, что ссылки от ребер на многоугольники установлены. С помощью полигональной сетки можно описать многогранник (объем, ограниченный фигурой, составленной из многоугольников). Примерами многогранников являются пирамида и куб. В случае многогранника каждое ребро полигональной сетки должно принад- лежать двум соседним многоугольникам. Ребру, которое принадле- жит только одному многоугольнику, соответствует дыра в много- граннике (чтобы понять это, рассмотрите различие между закрытой и незакрытой коробками для обуви). Если же соседними являются более чем два многоугольника, в этом случае многогранник имеет дополнительные внутренние или внешние многоугольники. 13.4. УРАВНЕНИЯ ПЛОСКОСТИ При работе с многоугольниками или полигональными сетками мы часто будем использовать уравнение плоскости, в которой лежит многоугольник. В некоторых случаях, конечно, это уравнение будет задаваться неявно методами интерактивного конструирования, ис- пользуемыми для определения многоугольника. В остальных же ситуациях мы можем определять плоскость по координатам трех вершин. Для этого запишем уравнение плоскости Ax-pBy-pCz-pD=0. (13.1)
226 Глава 13 Если заданы три точки, имеем Axi~\~By^~\~Cz^ =0, Ax2A~By2-\-Cz2-\~D~Q, (13.2) Ахя+Вуя+Сгя +D =0. Если эти три точки не коллинеарны, то уравнения можно решить относительно коэффициентов А, В, С и D, присвоив произвольное значение одному из коэффициентов и затем решив полученную систе- му трех уравнений с тремя неизвестными. Например, можно поло- жить 0 = 1 и решить систему. К сожалению, все усложняется, если на самом деле D=0. Более здравый подход основывается на том, что если точки Ри Pt, Рз и (х, у, г) лежат на одной плоскости, то Ах+Ву -j-Cz 4-D=0, Axt+By^Czt+D=0, Ахя-{-By2-}-Cz2-j~D—О, (13.3) +Вуя +Сг3 -f-D=0. Если эта система однородных уравнений имеет решение, определи- тель, составленный из ее коэффициентов, должен быть равен нулю: X у z 1 У1 г1 1 ^2 Уз 1 %з Уз ^з 1 = 0. (13.4) Разлагая его на алгебраические дополнения по первой строке, получим Определители с учетом их знаков являются коэффициентами А, В, С и D. Чтобы получить выражения для этих коэффициентов, опре- делители можно разложить. Например, А=уг (г2—гя)+у2 (гз—г^+уз (zt—г2). (13.6) В любом случае три точки не могут быть коллинеарны, посколь- ку три точки, лежащие на одной прямой, не определяют плоскость. Коллинеарность можно легко установить: все четыре алгебраических дополнения в выражении (13.5) будут равны нулю. В некоторых ситуациях может быть известен вектор нормали к плоскости. Компоненты х, у и z этого вектора будут коэффициента- ми Л, В, и С в уравнении плоскости [выражение (13.1)1. Тогда, чтобы найти D, в уравнение плоскости подставляются значения ко- ординат некоторой точки, и затем оно решается относительно D.
Представление пространственных форм 227 Рис. 13.7. Вычисление площади треугольника С с помощью уравнения (13.7). = ||/1 +И2)(*2~*1) +^1и2 + ИзНхз-хгН^(Из + И1)(Х1 ~Х3^ А1 ~~А 2 Если узлы не лежат в одной плоскости (что возможно как следст- вие метода, с помощью которого генерировались многоугольники), более предпочтительно использовать другой подход, предложенный М. Ньюэлом и описанный в работе [455]. Можно показать, что коэф- фициенты А, В и С пропорциональны площадям проекций много- угольника на плоскости yz, xz и ху соответственно. Например, если многоугольник параллелен ху-плоскости, то Д=В=0, при этом проекции многоугольника на плоскости yz и xz, как и предполага- лось, имеют нулевую площадь. Этот метод более пригоден, посколь- ку площади проекций являются функциями координат всех вершин и не зависят от выбора отдельных вершин, которые могут не лежать в одной плоскости с большинством из них или со всеми остальными вершинами. Например, площадь проекции многоугольника на «/-плоскость есть п с ==-2 £(«/z+«/z ®1)(XZ©1—X,-), (13.7) i=i где оператор ф означает обычное сложение, за исключением того, что пф1 = I. ч Уравнение (13.7) описывает суммарную площадь всех трапеций, образованных последовательными ребрами многоугольников. Не- которые из трапеций имеют отрицательные площади, тогда области между осью и многоугольником вычитаются из суммы. На рис. 13.7 показаны соответствующие площади, а также вычисление для случая треугольника, расположенного в плоскости ху. Если уравнение плоскости мы определяем, используя все верши- ны, то путем вычисления расстояния от плоскости до каждой верши- ны можно оценить, насколько неплоским является многоугольник. Это расстояние для узла (х, у, г) равно , Ax-\-By-\-Cz-[-D Оно может быть положительным или отрицательным в зависимости от того, с какой стороны относительно плоскости расположена точ- ка. Если же точка лежит на плоскости, то d=0. (13.8)
228 Глава 13 13.5. ПАРАМЕТРИЧЕСКИЕ КУБИЧЕСКИЕ КРИВЫЕ Для описания поверхностей мы сначала рассмотрим представле- ние пространственных кривых, а затем сделаем математическое обоб- щение от пространственных кривых к трехмерным криволинейным поверхностям. Существуют два основных способа представления кривых: с помощью функций переменных х, у и z и функций некоторого па- раметра t. В первом случае, чтобы определить точки (х, у, z) на кри- вой, приходится иметь дело с функциями вида х=х, y=f(x), z=g(x). (13.9) Это представление, однако, влечет за собой многие осложнения: в некоторой точке кривой тангенс угла наклона может оказаться равным бесконечности. Непростой является также проверка, при- надлежит ли точка некоторому сегменту кривой, заданному началь- ной и конечной точками, особенно если кривая образует петлю. При вычерчивании кривой с помощью гладкой линии необходимо (как показано в гл. 2) учитывать наклон кривой. В случае параметрического представления трехмерных кривых эти проблемы существенно упрощаются, поскольку при таком пред- ставлении легко описываются замкнутые и многозначные функции и, кроме того, вместо тангенсов углов наклона, которые могут быть бесконечными, используются касательные векторы, которые никог- да не бывают бесконечными. Параметрической кубической кривой является кривая, в кото- рой х, у и z — многочлены третьего порядка (т. е. кубические) от- носительно некоторого параметра I. Так как мы рассматриваем конечные отрезки кривой, то без потери общности можем ограни- чить диапазон изменения параметра и считать 0^^1. Следователь- но, х (t) = axt3 -j-bxtz + cxt -j-dx, y(t) = avt3 + bvP + cyt+dy, O^^l, (13.10) z (t) = azts + bzt* + czt 4- dz. Производные функций x(t), y(t) и z(/) по параметру t имеют один и тот же вид. Например, g = 3^ + 2^ + c.. (13.11) Три производные определяют касательный вектор. Тангенсы углов наклона кривой задаются как отношения компонент этого вектора: dy dy/dt dx dx/dt 19x dx dx/dt ’ dz dz/dt '
Представление пространственных форм 229 Углы наклона не зависят от длины касательного вектора. Если умножить производные на k, получим k%, k%- (13.13) at at at ' ' Тогда k dy/dt dy/dt _dy ,.o ... k dx/dt dx/dt dx * ' ' При поиске способов определения ах, Ьх, сх и dx ниже мы будем иметь дело только с производными от x(i). Для y(t) и z(t) производ- ные и окончательные формулы ___ аналогичны формулам для x(t) и \ / мы их не будем приводить. / . \ г Почему мы рассматриваем / \ / именно кубические кривые? Пото- / \ / му что для сегментов кривой не \ / существует представления более \ / низкого порядка, которое обеспе- чивало бы в точке соединения Кри- Рис. 13.8. Два сегмента кривой, вых Друг С другом непрерывность связанные между собой, положения и наклона сегментов и в то же время гарантировало бы, что концевые точки сегмента кривой проходят через заданные точки. Отметим, что наша основная цель — описать кривую с помощью последовательности сегментов кривой (например, так, как изображено на рис. 13.8). В точке сое- динения сегменты кривой и их касательные векторы равны. Эта не- прерывность имеет важное значение (представьте себе поперечное сечение самолета, в котором имеются нарушения непрерывности положения или наклона). Ниже в этой главе для описания непрерывности мы будем поль- зоваться общим обозначением С(!’: говорят, что кривые С(о’ непре- рывны, если они не имеют разрывов, и кривые С11’ непрерывны, если, кроме того, непрерывны их касательные. В общем случае С(!'’-непрерывность означает, что непрерывны функция и ее первые i производные. Параметрический кубический многочлен с четырьмя коэффициен- тами является параметрической кривой наиболее низкой степени, которая при соответствующем выборе коэффициентов может удов- летворять четырем условиям (положению каждого из концов сег- мента и касательным векторам в них). Можно использовать также параметрическое представление и более высокого уровня, однако в этом случае появляется волнистость и возникают осцилляции. Кубический многочлен является, кроме того, параметрической функ- цией наиболее низкой степени, с помощью которой можно предста- вить неплоскую кривую [369], необходимую для описания прост- ранственных кривых.
230 Глава 13 Мы подробно рассмотрим только три из многих способов описа- ния параметрических бикубических кривых: метод Эрмита, в ко- тором задаются положения конечных точек кривой и касательные векторы в них (о которых мы только чт< говорили); метод Безье, в котором задается положение конечных точек кривой, а для неяв- ного задания касательных в этих точках используются две другие точки, обычно лежащие не на кривой; метод В-сплайнов, при кото- ром конечные точки не лежат на кривой, в результате чего как пер- вая, так и вторая производные оказываются непрерывными на кон- цах сегмента Мы убедимся, что каждая из этих трех форм описа- ния кривой имеет свои достоинства и недостатки. 13.5.1. Форма Эрмита Найдем выражение для кубической кривой в форме Эрмита, если известны концевые точки и касательные векторы к кривой в этих точках. Зададим точки Pt и Р„ и касательные векторы R} и Rt (точкам присваиваются индексы 1 и 4, а не 1 и 2 для совместимости с выражениями, которые используются при построении кривых методами Безье и В-сплайнов). Требуется найти коэффициенты «х. Ьх, сх и dx из выражения (13.10), удовлетворяющие условиям х (0) = Р1Х, х (1) = Pix, х' (0) = Rlx, х' (1) = Rix. (13.15) Мы используем индекс хдля ссылки на х-компоненты точек и ка- сательных векторов. Переписывая выражение для x(t), получаем b x(t)=[ts t* t 1] с , (13.16) d. X или x(t) = [ts t* t1; ]С„ (13.17) или x(t) = TCx, (13.18) где Т представляет собой вектор-строку степени t, а Сх — вектор- столбец коэффициентов x(t). Запишем условия (13.15), используя уравнение (13.17): х(0) = Рг =[0 0 0 1]Г , x(l) = P4je = [l 1 1 1]СЖ. (13.19) Чтобы записать выражение для ограничений на касательные векто- ры, продифференцируем сначала выражение (13.17) по t и получим Тогда х'(0 = [3/2 2/ 1 0]Сх. (13.20) х'(0М1х = [0 0 1 0]Сх, х' (1) = /?4Ж = [3 2 1 0]Ся. (13.21) (13.22)
Представление пространственных форм 231 Выражения (13.19), (13.21) и матричное уравнение (13.22) можно объединить в одно (13.23) Обращая матрицу размером 4X4, мы, наконец, получим искомое выражение для Сх, если зададим -2—2 1 Г ГЛ" _ —3 3—2 — 1 р Сх ~ 0 0 1 0 £ =MhGhx. (13.24) 1 0 0 0 Здесь через Mh обозначена эрмитова матрица, а через Gh — гео- метрический вектор Эрмита. Подставляя этот результат в выраже- ние (13.18), получим x(t)=TMhGhx. (13.25) Аналогично y(t)—TMhGhy, (13.26) z(t)=TMhGht. (13.27) Уравнение для x(t), y(t) и z(t) часто записывают в виде P(t)=TMhGh. (13.28) Если заданы Plt Pit Ri и Rit можно определить x(t), y(t) и г (О для O^/^l и найти все точки на сегменте кубической кривой от Л до Р4, у которого касательный вектор в начальной точке равен Ri, а в конечной — Rt. Найдем произведение TMh: TMh = [(2/3 — 3Z2 + 1) (—2t3 + 3/2) (t3—2/2 +1) (t3—/*)]. (13.29) Умножая это выражение справа на Ghx, получим х (0 = TM„Ghx = Р1Х (2/3—З/2 + 1) + + Pix (-2/’ + З/2) + Rlx (t3—2t2 + 0 + Rix {P-t2). (13.30) Четыре функции переменной t в произведении TMh часто называют функциями сопряжения, так как с помощью первых двух функций сопрягаются точки Pi и Р4, а посредством двух других — векторы Ri и Rit в результате чего получается «сглаженное» объединение х(0- На рис. 13.9 приведен ряд эрмитовых кривых. Их геометриче- ские матрицы отличаются друг от друга только длиной касатель- ного вектора. Чем больше длина вектора, тем сильнее кривая «вы-
Рис. 13.0. Семейство эрмитовых пара- метрических кубических кривых. На- правления касательных векторов фик- сированы! 45° в точке Л, —90° в точке В. Величина вектора изменяется и задается для каждой кривой отдель- но. Рис. 13.10. Семейство эрмитовых параметрических кубических кривых. Направ- ление касательного вектора в правом конце кривой фиксировано и составляет —90°, в левом конце — изменяется и показано на каждой кривой. Длина всех касательных векторов одинакова. Рис. 13.11. Две эрмитовы, кубические кривые, соединя- ющиеся в точке Р4. Их каса-; тельные векторы имеют оди- наковые направления в точке; Pit но различаются по вели** чине. |
Представление пространственных форм 233 тягивается» в направлении, задаваемом этим вектором до того, как он начнет перемещаться к противоположному концу сегмента. Во всех случаях касательные к кривым имеют в концевых точках одно и то же направление. На рис. 13.10 показан другой ряд эрми- товых кривых — длина касательного вектора остается неизменной, а изменяется направление. На рис. 3.11 приведены две эрмитовы кубические кривые, имею- щие общую конечную точку. Геометрические векторы, с помощью которых достигается С(1)-не- прерывность, следующие: 13.5.2. Форма Безье Форма описания кубиче- ской кривой, предложенная Безье, очень близка к эрмито- вой форме, однако отличается от нее заданием касательных векторов в конечных точках [33, 34]. В форме Безье ис- пользуются четыре точки (рис. 13.12). Касательные векторы в конечных точках задаются отрезками Р^Р2 и P3Pt. В частности, касатель- ные векторы R, и Rs эрмито- вой формы определялись таким четырем точкам Безье Plt Р2, Р Рис. 13.12. Кривая Безье и ее четыре управляющие точки. Штриховой линией выделена выпуклая оболочка управляю- щих точек. образом, чтобы соответствовать и Р4: Ri = 3(Pt-Pj = Р' (0), R, = 3 (Р4-Р8) = Р' (1). Поэтому соотношение между геометрической матрицей Эрмита Gh и геометрической матрицей Безье Gb записывается следующим об- разом: G* = 0 0 3 0 = МЛЬСЬ. (13.32) Подставляя в выражение (13.25), найдем x(t) — TMhGhx—TMhMhbGbx.
234 Главе 13 Рис. 13.13. Две кубические кривые Безье, соединяющиеся в точке Р4. Точки Р8, Рц и Рь коллинеарны. Кривые здесь те же, что и на рис. 13.11. Обозначив произведение MhMhb через Мь, получим выражение x(t) = TMbGbx, которое имеет теперь форму Безье. Матрица Мь, полученная из произведения MhMhb, есть 1 3 —3 1 3 -3 г —6 3 0 3 0 0 0 0 0 (13.33) На рис. 13.13 приведены две кривые Безье, имеющие общую конечную точку. С(1)-непрерывность в этой точке гарантируется в том случае, когда Р JP^kPJP',. Форма Безье благодаря двум своим свойствам используется в машинной графике чаще, чем эрмитова форма. Во-первых, потому, что геометрическая матрица (в случае четырех точек) интуитивно привлекательна в интерактивном режиме, так как, перемещая точки с помощью локатора, можно легко привести кривую к желае- мой форме. В случае эрмитовой формы касательные векторы должны задаваться в явном виде; в режиме диалога их определять труднее, да и само понятие незнакомо некоторым пользователям. Однако если касательный вектор известен, то привести кривую в соот- ветствие с ним легче при использовании эрмитовой формы. Во-вто- рых, четыре управляющие точки определяют выпуклый много- угольник (выпуклую оболочку), внутри которого находится кривая Безье (рис. 13.12). Интуитивно, выпуклая оболочка точек на пло- скости есть область, задаваемая резиновой нитью, которая натянута вокруг всех точек (или в случае трех измерений область, задавае- мая резиновой мембраной, плотно облегающей все точки). Выпук- лая оболочка оказывается полезной при отсечении кривой по окну или видимому объему. Она может играть ту же роль, что и прямо- угольная оболочка, используемая в гл. 9. Вместо того чтобы сразу
Представление пространственных форм 235 проводить отсечение кривой, мы сначала проверим ее выпуклую оболочку и только в том случае, если она пересекает окно или ви- димый объем, возникает необходимость в проверке самой кривой. Для того чтобы лучше понять свойство выпуклой оболочки формы Безье, возьмем произведение TMbGb. (l — t)aPl + 3t(t—l)iPi + 3t2(l — t)Ps + t3Pi. (13.34) Исследуя коэффициенты многочлена при четырех точках, находим, что каждый из них изменяется в диапазоне 0—1, а их сумма равна 1 для всех Таким образом, это выражение описывает взве- шенное среднее значение для четырех управляющих точек. Можно показать, что взвешенное среднее для п точек попадает внутрь выпуклой оболочки п точек. Это утверждение можно получить также из интуитивных соображений, если рассмотреть п=2 и п=3 и затем провести обобщение. 13.5.3. Форма В-сплайнов Кривая, представленная в виде кубического В-сплайна, в общем случае может проходить через любые управляющие точки, однако она непрерывна и, кроме того, непрерывностью изменения обладают ее касательный вектор и кривизна (т. е. первая и вторая производные кривой непрерывны в конечных точках) в отличие от форм Эрмита и Безье, у которых в конечных точках непрерывны лишь первые производные (но которые проходят через управляющие точки). Таким образом, можно утверждать, что форма В-сплайнов «более гладкая», чем другие формы. Термин сплайны происходит от длин- ных гибких металлических реек, с помощью которых чертежники размечают поверхности самолетов и кораблей. Металлические сплай- ны, если они не сильно напряжены, также обладают непрерывностью второго порядка. В-сплайн описывается следующей формулой: x(f)=TMsGax, (13.35) где 3 —3 1- —6 3 0 0 3 0 4 1 0 (13.36) При аппроксимации управляющих точек Plt Р2,. . ., Рп пос- ледовательностью В-сплайнов мы будем применять между каждой парой соседних точек геометрические матрицы. Для аппрокси- мации в интервале, близком к точкам Pt и Pi+1, используется Pi Pi+X 2 i п—2. (13.37) Pi+ а.
236 Глава 13 Покажем теперь непрерывность первой и второй производных в точке Р(+1. Подставляя в выражение (13.35) Gax~Glsx и /=1, имеем ' х1 (1) = . (13.38)- Аналогично, дифференцируя выражение (13.35) и подставляя £=1, ] получим 1 = (13.39) < Щ |t=l 2 4 ' , Дифференцируя и подставляя снова, получим = х~2х,-+1 + х, + 2. (13.40) ' Повторяя теперь процесс для Gsx=Gls£l и подставляя /=0, имеем х‘+1 (0) = Х|’ +1++2 > dxi + l1 __ —х,+-Ч+2 dt |/co 2 ’ !V+i| о , —775— = х,—2xz + i+-x/+2. dt2 р=о ' (+ ' (13.41) (13.42) (13.43) Рис. 13.14. Кубический В-спла- йн, построенный по девяти точ- кам. Точки Pit Pt и Р7имеют одинаковые х-координаты, так что кривая проходит через точку абсцисса которой совпадает с абсциссой точки Рл пуклая оболочка кривой в Выражения для х-координат двух сегментов кривых и их первых двух производных в месте соединения, где х‘ (1)=х'+1(0), совпадают. Из этих выражений видно также, что соединения точек и их производ- ных являются взвешенными сумма- ми трех ближайших соседних точек. На рис. 13.14 показана аппроксима- ция нескольких точек с помощью В-сплайнов. Поскольку точки 5, 6 и * 6 7 имеют одинаковое значение коор- динаты х, кривая проходит через точку, значение х которой совпадает со значением этой координаты точки 6, как и следует из уравнения (13.38). Свойство выпуклой оболочки кри- вых Безье также справедливо и для кривых в форме В-сплайнов: вы- приближенном интервале Pt—Pi + 1 та же, что и для четырех управляющих точек, используемых для генерации кривой: P{^lt Pi,Pi+u Р(+9-
Представление пространственных форм 237 13.5.4. Сравнение форм Эрмита, Безье и Л-сплайнов Каждое из этих представлений оказывается полезным в разных ситуациях. Форма Эрмита пригодна для аппроксимации уже име- ющихся поверхностей, когда необходимо добиться как соответствия точек, так и соответствия касательных векторов, в то время как представление в виде S-сплайнов удобно для аппроксимации точек и достижения С12)-непрерывности. Формы Безье и В-сплайнов пригодны для работы в интерактив- ном режиме, так как их геометрические векторы состоят из одних только точек. Обе эти формы обладают свойством выпуклой оболоч- ки, которое оказывается полезным при изображении кривых. Отме- тим, что кривую, первоначально заданную в одной форме, можно преобразовать в другую форму, если записать геометрический вектор первой формы в терминах второй. Поэтому эрмитову форму, которая не обладает свойством выпуклой оболочки, можно преобра- зовать в форму Безье, которая обладает этим свойством. 13.6. ПАРАМЕТРИЧЕСКИЕ КУБИЧЕСКИЕ ПОВЕРХНОСТИ Перейдем теперь от кубических кривых к бикубическим поверх- ностям, задаваемым кубическими уравнениями от двух переменных s и t. Изменяя оба параметра от 0 до 1, можно определить все точки на куске поверхности. Если одному из параметров присвоить постоянное значение, а другой — изменять в диапазоне 0—-1, то в результате получим кубическую кривую. Так же как и в случае кривых, мы будем рассматривать только уравнение для х: х (s, t) = ans3/3 + a12s3/2-фa13s3t -ф aus:i -ф 6Z2iS2/3 ф £Z22S2/2 -ф S3/ -ф £Z24S2 ф -ф a3lst3 aS2st2 4~ ct33st Ф a3is -ф Ф a^t3 ф ai3t2 ф ai3t ф aii. (13.44) Запишем его в более удобной форме x(s, t) = SCxTr, (13.45) где S=[s3 s2 s 1], t2 И], a Тт обозначает транспонированную матрицу T. Эта запись называется алгебраической формой представ- ления, так как Сх задает коэффициенты бикубического многочлена. Существуют также и Су и Cz, которые определяют коэффициенты y (s, t) и z(s, t). 13.6.1. Форма Эрмита Нам бы хотелось предложить подход, аналогичный изложенно- му в предыдущем разделе, который позволил бы использовать уп- равляющие точки и касательные векторы для определения коэф-
238 Глава 13 Рис. 13.15. Кривые постоянного значении параметра на бикубической поверхнос- ти- Pi(t) при s = 0, Р4(/) при s= 1. фициентов бикубического многочлена. Рассмотрим уравнение куби- ческой кривой (13.25), в котором t заменим на s: x(s)=SMhGh3c. (13.46) Перепишем это уравнение так, чтобы геометрическая Эрмита была не константой, а функцией t матрица x(s, t) = SMhGhx(t) = SMh ГЛ (01 PJ0 RAt) * (13.47) Rt(t) X Функции Pix(t) и Р4х(/) описывают х-компоненты начальной и конечной точек кривой, задаваемой параметром s. Для каждого значения t определяются некоторые две конечные точки. Аналогич- но Rix(t) и Rix(t) описывают касательные векторы в конечных точках кубической кривой, построенной в зависимости от s. На рис. 13.15 показаны кривые Pi(f) и Р4(/), а также кубические кри- вые относительно s, для которых /=0,0.2, 0.4, 0.8 и 1.0. Кусок по- верхности можно представить как фигуру, построенную путем ин- терполяции между кривыми РД/) и Р4(/), при этом касательный вектор в начальной точке будет РД/), а в конечной — РД/). В том случае, если интерполируемые линии являются прямыми, получа- ется линейчатая поверхность. Если к тому же кривые РД/) и Pt(t) лежат в одной плоскости, то линейчатая поверхность будет плоской, а кусок поверхности оказывается четырехсторонним многоуголь ником.
Представление пространственных форм 239 Пусть теперь каждая из кривых Pi(t), R^f) и /?«(/) пред- ставлена кубическим многочленом в форме Эрмита: "911 ' 912 91з . PiX^=TMh '9si ' 922 9гз , (13.48), (13.49) _ 914 _ X _ 924 _ X " 9si ’ 941 /?1х(0 = тмЛ 9з2 , Rix(t) = TMh 942 . (13.50), (13.51) 9зз 943 _ 9з4 _ X 944 _ X Четыре кубических многочлена можно представить в виде вектор строки [Л (О Р4(0 RA0 РМ=тм„ 9п 912 913 914 Qu 9з1 941 9 22 932 942 9гз 9зз 943 924 934 944_ (13.52) Транспонируя уравнения (13.52) и используя тождество (ЛВС)Г= =СТВТАТ, получим Г^1 (01 р. (0 К1(П /?4 (0_ X 911 912 91з 914 9з1 922 9 23 9 24 9з1 9зг 9зЗ 9з4 .941 942 943 944. M£TT = QXM£TJ. X (13.53) Теперь подставим (13.53) в (13.47): x(s, t) = SMhQxMThTr. (13.54) Аналогично y(s, o=SMAQArTr. z(s, t) — SM/tQ3M1hTT. (13.55) (13.56) Как определить Qx, Qy и Qz с помощью точек и углов наклона? Из уравнений (13.47) и (13.48) следует, что коэффициент qu есть х(0, 0), так как является начальной точкой для Pix(t), которая в свою очередь задает начальную точку для x(s, 0). Аналогично q12 есть х(0, 1), так как является конечной точкой для P-ix(t), которая в свою очередь задает начальную точку для x(s, 1). Видно также, что 913=^(0, 0),
240 Глава 13 так как является начальным касательным вектором для Pix(t), а поскольку представляет собой начальный касательный вектор для который в свою очередь задает начальный тангенс угла наклона для x(s, 0). Используя эти интерпретации, можно написать *00 *01 01 Q *10 *11 ii (13.57) 01 11- В верхней левой части размером 2X2 находятся четыре координаты углов куска поверхности, в верхней правой и нижней левой частях матрицы помещены тангенсы углов наклона касательных векторов в угловых точках для каждой из граничных параметрических кри- вых и, наконец, в нижней правой части расположены частные про- изводные по обоим параметрам в угловых точках. Эти частные производные нередко называют кривизной, так как чем больше их значения, тем сильнее изгиб (как в спирали) в угловой точке куска поверхности. На рис. 13.16 показан кусок, в угловых точках кото- рого эти параметры написаны. Отметим, что форма Эрмита для би- кубических кусков поверхности является одной из форм куска Кунса [104], так как она широко использовалась Кунсом [220], пионером применения машинной графики в автоматизации проекти- рования. Их иногда еще называют поверхностями Фергюссона, также в честь одного из первых разработчиков представлений поверх- ностей [154, 150]. Аналогично тому как кубический многочлен Эрмита обеспечи- вает С11)-непрерывность при переходе от одного сегмента к другому, бикубический многочлен Эрмита позволяет достичь С(1)-непрерыв- ности при переходе от одного куска поверхности к другому. Необ- ходимые условия для этого состоят в том, чтобы кривые, заданные на общем ребре, были одинаковыми на каждом из кусков, а также чтобы касательные векторы, пересекающие ребро, имели одно и то же направление (их длины могут быть разными). Если общее ребро строится при фиксированном значении параметра s (т. е. t изменя- ется от 0 до 1), в этом случае строки матриц кусков должны соот- ветствовать друг другу. Из уравнений (13.48) — (13.51) следует, что первая строка Q описывает ребро куска при 8=0, вторая строка определяет ребро, соответствующее s=l, третья—задает каса-
Представление пространственных форм 241 Рис 13 16. Параметры для поверхности Эрмита Каждый вектор является трой- кой, х-компонента которой задается уравнением (13 57) тельный вектор вдоль ребра s=0 и четвертая — определяет каса- тельный вектор вдоль ребра s=l. Ниже показано, что для соотвег ствия между матрицами кусков 1 и 2 необходимо, чтобы на ребрах s=l куска 1 и s=0 куска 2 достигались С(о)- и С(1)-непрерывности, на незаполненные ячейки каждой из матриц ограничения не накла- дываются и их значения могут быть произвольными: Матрица 1-го куска Ч21 Чгг Чгз Ян Qtt Я\Ч ЯМ <?44 Если общее ребро соответствует фиксированному значению пара- метра t, ограничения накладываются не на строки, а на столбцы:
242 Главе 13 Матрица 1-го куска 912 Qu 922 924 9зг Q 34 Qtt 944 Матрица 2-го куска 912 *914 ?22 ^24 9 32 *9 34 942 *914 Рис. 13.17. Два связанных куска. На рис. 13.17 показаны два куска, имеющие общее ребро. 13.6.2. Форма Безье Уравнения для кусков Безье выводятся так же, как и для бику- бических кусков Эрмита. В результате получим x(s, t) — SMbPxMbTT, y(s, t)^SMbPyMlT\ (13.58) z(s, t) = SMbP2MlTr. Геометрическая матрица Р состоит из 16 управляющих точек (рис. 13.18). Поверхности Безье используются часто при интерак- тивном проектировании по тем же причинам, что и кривые Безье: управляющие точки позволяют легко изменять форму куска поверх-
Представление пространственных форм 243 Рис. 13.18. Шестнадцать управляющих точек бикубического куска Безье. Рис. 13.19. Два куска поверхности Безье, которые соединяются вдоль ребра, определяемого точками Ри, Р24, Р34 и Pti. ности. Поверхности Безье, так же как и кривые Безье, обладают свойством выпуклой оболочки. Для достижения непрерывности в поперечном направлении относительно ребер кусков необходимо равенство четырех управ- ляющих точек, принадлежащих общим ребрам соседних кусков. Для непрерывности касательного вектора и, следовательно, С(1>- непрерывности требуется, кроме того, чтобы две четверки управ- ляющих точек по обеим сторонам общего ребра были коллинеарны другим точкам ребра. Таким образом, на рис. 13.19 коллинеарными будут следующие совокупности управляющих точек: (PiS, Plit Pis), (Ргз, Рц, Ргз), (P33, P3i, Р35) И (Р43, Ли, Рзь). Отношения длин коллинеарных отрезков должны быть постоянными.
244 Глава 13 13.6.3. Форма б-сплайнов Куски в форме В-сплайнов представляются в виде x(s, t] = SMsPxM[T\ y(s, t) = SMsPyMlTT, (13.59) z(s, t) = SMsPzMlTT. Здесь, как и для кривых в форме В-сплайиов, достигается С<2)- непрерывность. Матрица, состоящая из 16 управляющих точек, описывает кусок, а также в общем случае и точки, не лежащие на самом куске. 13.7. ПРЕОБРАЗОВАНИЕ КРИВЫХ И КУСКОВ ПОВЕРХНОСТЕЙ Для преобразования пространственной кривой или куска по- верхности можно вычислить точки, принадлежащие кривой или куску, а затем преобразовать эти точки. К счастью, существует другой, более удобный способ: можно преобразовать геометрическую матрицу точек (точнее точек и касательных векторов), определяю- щую кривую или поверхность, и с помощью этой модифицированной матрицы генерировать точки преобразованной кривой или поверх- ности. Такой подход можно применять ко всем представлениям кри- вых и кусков поверхностей. Для того чтобы преобразовать геометрическую матрицу, каж- дая точка и каждый касательный вектор должны быть записаны в виде четырехэлементных вектор-строк, при этом к точкам в качестве четвертой компоненты добавляется 1 (единица), а к касательным векторам — 0. Выше говорилось, что четвертая компонента вектор- строки умножается на компоненту переноса матрицы преобразова- ния размером 4X4. Поскольку касательный вектор задает не поло- жение, а направление, добавление в качестве четвертой компоненты 0 приводит к тому, что вектор не переносится, но может быть повернут и промасштабирован. Тогда модификация переписанной геометрической матрицы про- изводится с помощью матрицы преобразования размером 4X4. Таким образом, бикубическая поверхность может быть преобразована путем изменения лишь 16 элементов ее геометрической матрицы, а не бесконечного числа точек, принадлежащих поверхности. 13.8. ВЫЧИСЛЕНИЕ ТОЧЕК НА БИКУБИЧЕСКОЙ ПОВЕРХНОСТИ Объекты, состоящие из бикубических кусков, часто изобража- ют путем вычерчивания ряда кривых, лежащих на поверхности кусков и имеющих постоянный параметр s или t. В результате
Представление пространственных форм 245 получаются изображения, аналогичные показанным на рис. 13.20 (для одного куска) и 13.21 (для нескольких кусков). Основная идея здесь состоит в том, чтобы начертить кусочно-линейные аппрокси- мации параметрических кривых на поверхности куска. Для этого можно использовать следующий метод: for каждого куска do begin {изображаем кривые при постоянном s) for s:=0 to 1 by epsilon do begin {изменяя t, вычерчиваем кривую при постоянном s} AfOV£_ABS_3(X(s, 0), K(s, 0), Z(s, 0)); for i: = epsilon to 1 by epsilon do LINE_ABS_3(X(s, t), Y(s, i), Z(s, t)) end {изображаем кривые при постоянном Z} for t:= 0 to 1 by epsilon do begin {изменяя s, вычерчиваем кривую при постоянном t} MOVE _ABS_3(X(Q, t), Y(0, t), Z(0, /)); for s:= epsilon to 1 by epsilon do LINE_ABS_3(X(s, f), Y(s, t), Z (s, /)) end end {/Y, Y, Z есть процедуры для вычисления значений бикубического много- члена для х-, у- и г-координат соответственно} Этот метод обладает одним недостатком — уравнения поверх- ности вычисляются 2/е2 раз. При е=0,1 это число равно 200, а при г- -0,01 равно 20000. Каж- дое такое вычисление требует многих умножений и сложе- ний. Для уменьшения числа умножений при вычислении параметрических бикубиче- ских полиномов можно ис- пользовать схему Горнера разложения многочленов на множители. В соответствии с Рис. 13.20. Изображение куска поверх- ности с помощью кривых с постоянным параметром s или t. этим правилом кубический многочлен можно предста- вить в виде /(/)=[ (at+b)tArc}t+d. (13.60) Это правило легко распространить и на кубические многочлены, однако все равно остается еще много работы. Более эффективным является способ проведения вычисления бикубического многочлена, основанный на правых разностях. Правая разность функции f(t) определяется выражением Д/(0=Д*+б)-/(0, б>0. (13.61)
246 Глава 13 Рис. 13.21. Воздухозаборник реактивного двигателя, представленный совокуп- ностью трехмерных кусков поверхности. (С разрешения фирмы McDonnell Douglas Corporation, CADD system.) которое можно записать в виде f(t+6)=f(t)+bf(t). (13.62) Таким образом, если известны/^) и Д/(/), можно вычислить/(/4-6). Представляя выражение (13.62) как итерационный процесс, видим, что Г„+1=/„+Д/„, (13.63) причем вычисление f производится с постоянным шагом 6, так что Z=6n, a fn=f(tn). Для многочлена третьего порядка f(l)=at3+bt2+ct+d (13.64) правая разность имеет вид A/(Z)=a(Z+6)3-H(/+6)2+c(Z+6)+d—(a/3+W2+c/+d)=3a/2<5+ + /(3aS2+2M)+a<53+d<52+c<5. (13.65)
Представление пространственных форм 247 Таким образом, &f(f) является многочленом второго порядка. По- этому, чтобы оценить выражение (13.63), надо вычислить этот мно- гочлен второго порядка и выполнить сложение. Попытаемся упро- стить процесс вычисления, используя правые разности. Рассматривая А/(/) как некоторую функцию, запишем Д7(0=А(Д/(0)=а/(/+6)-а/(0. (13.66) Применяя это свойство к выражению (13.65), находим А2И0=6аб2/4-6аб34-2бб2. (13.67) Итак, мы получили уравнение первого порядка относительно t. Запишем выражение (13.66), используя индекс п: А2/„=А/„+1-А/п, (13.68) или А/в+1 = А/п4-А2/п. (13.69) Заменив п на п—1, получим (13.70) Чтобы найти А/п и подставить его в выражение (13.63), необходи- мо лишь вычислить A7n_j и результат сложить с Afn_i. Поскольку функция A2/n_j линейна относительно t, это уже более простая задача, чем определение Af„ непосредственно из многочлена второго порядка (13.65). Чтобы не производить вычисления по формуле (13.67), повторим процесс еще раз: А’/(0= (А2/(0)=А2/(^+б)-А2/(0. (13.71) Применив это свойство к выражению (13.67), найдем А3/(0=6аб3, (13.72) т. е. третья разность является константой и ее вычисление три- виально. Запишем теперь выражение (13.71), используя индекс п: = или (13.73) AV„+1 = A2f„ 4- А3^„г А2/„ 4- A3f0. (13.74) Заменяя п на п—2, находим AV„-, = 2 + А7„_ 2 = A V„_ 2 4- баб3. (13.75) С помощью этого выражения можно из выражения (13.70) найти Afn и, подставив его в (13.63), определить fn+1. Чтобы использовать правые разности в алгоритме, в котором проводятся итерации по п от п=0 до бп=1, необходимо с помощью выражений (13.64), (13.65), (13.67) и (13.72) вычислить функцию и ее первую, вторую и третью правые разности при /=0 (или п—0): f0^d, А/0 = аб34-бб24-сб, A2f0 = баб34-2б62, Д3/0«6аб3. ' }
248 Глава 13 Эти начальные вы решения четырех числе урав! Г 1 Д/о Д7о Д3Л>_ НИЯ теш МОЖНО ВЫПОЛНИ! 1й. Однако поле - 0 0 0 1- 63 62 6 0 663 262 0 0 663 ООО 'Ъ 31 та то ~а~ b с d_ кже путем прямого отметить, что , (13.77) или в другой форме Е(6)А. (13.78) Повторим теперь следующие шаги 1/6 раз, начиная с п=0: /в+1 = /в4-Д/в, (13.79) Д/В+1 = Д/В + А2/В, (13-80) Д2/в+1 = Д7п+Д3/о- (13.81) Отметим, что если вычисления выполняются в указанном порядке, то не требуется памяти для запоминания промежуточных результа- тов. Для кубических кривых необходимо подобным образом рас- смотреть три функции x(f), y(t) и г(/). Для обобщения понятия правых разностей на случай поверх- ностей рассмотрим x(s, t) — SCxTT. (13.82) По аналогии с начальными вычислениями в случае кривых, для которых О0=Е(6)А, (13.83) проведем вычисления для поверхностей О00 = £(е)Сж£(6И, (13.84) где в — величина шага параметра s, а 6 — величина шага пара- метра t. Матрица Doo имеет размер 4x4, в ее первой строке содер- жатся значения /0, Д/о, Д2/<> и Д3/о, необходимые для вычисления х(0, /), а в первом столбце —значения, которые требуются для определения x(s, 0). Как приступать к вычислению х(в, /), если известны х(0, t) для всех шагов по /? Итерационный процесс аналогичен процессу для кривых, только он выполняется по всем строкам Dao: Строка 1 = Строка 1 + Строка 2, Строка 2 = Строка 2 + Строка 3, Строка 3 = Строка 3 + Строка 4. (13.85) Теперь в строке 1 содержится х(в, /). После повторения шагов (13.85) строка 1 будет определять уже х(2в, /) и т. д.
Представление пространственных форм 249 При построении x(s, 0), x(s, в),. . x(s, 1) для вычисления значений используется первый столбец и в выражении (13.85) стол- бец заменяется строкой. С другой стороны, если вместо Dw взять D„o, то такая замена не нужна. УПРАЖНЕНИЯ 13.1. Для каждого из полигональных представлений определите, какой объем памяти требуется для описания в трехмерном пространстве: а) треугольника; б) куба; в) сетки, состоящей из 10Х 10 квадратных многоугольников. Считайте, что на указатели и индексы затрачивается такой же объем памяти, как и на запо- минание значений х, у и г. 13.2. Напишите процедуру, которая просматривает представление полиго- нальной сетки с явно заданными ребрами (разд. 13.2.3) и проверяет, что каждый узел принадлежит хотя бы одному многоугольнику и что не существует ребра, с обоих концов которого находилась бы одна и та же вершина (т. е. ребро имело бы нулевую длину). 13.3. Напишите процедуру, которая просматривает представление полиго- нальной сетки с явно заданными ребрами (разд. 13.2.3) и проверяет, что каждый многоугольник замкнут. Если же он не замкнут, нужно определить число разры- вов в нем. 13.4. Проанализируйте уравнение (13.20), а также производные при t—О и t= 1 и убедитесь, что ограничения, накладываемые геометрическим вектором, в самом деле, удовлетворяются. 13.5. Рассмотрите два сегмента эрмитовой кривой, у которых геометрические векторы имеют вид как в уравнении (13.31). Покажите, что в точке Р4 сами сег- менты и их первые производные непрерывны, а вторые производные не являются непрерывными. 13.6. Докажите, что для двух связанных кривых Безье, обладающих непре- рывностью первого порядка, справедливо соотношение Р^Рц=кР^Ръ, как утверж- дается в разд. 13.5.2. 13.7. Пусть кубическая кривая проходит через четыре точки, соответствую- щие значениям параметра 0, 1/3, 2/3 и 1. Постройте матрицу М, такую, что %(/)— = ТМРХ. Этот процесс называется лангранжевой интерполяцией. 13.8. Докажите методом индукции по п, что взвешенное среднее п точек лежит внутри выпуклой оболочки этих п точек. 13.9. Напишите программу, которая вычерчивала бы кривые Безье по задан- ной геометрической матрице Gj. 13.10. Напишите программу, которая вычерчивала бы В-сплайн по заданным п точкам Ръ ..., Рп. 13.11. Покажите, что сумма четырех функций параметра t, являющихся функ- циями сопряжения В-сплайнов (которые определяются с помощью произведения TMS), равна 1, а сами функции изменяются в диапазоне 0—1 при значениях /=0—1. 13.12. Покажите, что уравнение (13.44) превращается в уравнение кривой, если параметру t (или s) присвоить некоторое фиксированное значение. 13.13. Докажите, что бикубическую поверхность можно преобразовать с помощью модификации геометрической матрицы точек и/или касательных векто- ров, задающих поверхность. 13.14. Определите, сколько умножений и сложений требуется для вычисле- ния точки x(s, t), y(s, /), z(s, /), если заданы алгебраические матрицы Мх, Му и Мг? 13.15. Сколько умножений и сложений требуется для вычисления точки би- кубической поверхности в случае использования схемы Горнера?
250 Глава 13 13.16. Докажите, что параметрическая кубическая кривая не обязательно лежит в одной плоскости. 13.17. Пусть четыре куска Кунса имеют общую угловую точку, а каждая пара кусков имеет общее ребро, на котором достигается С(1,-непрерывность. Каким условиям должны удовлетворять четыре матрицы? 13.18. Измените программу из разд. 13.8 так, чтобы можно было изображать кусок при помощи nt линий при постоянном t и ns линий при постоянном s с шагом Ef по параметру t и с шагом Es по параметру s. 13.19. Определите структуру данных (используя, например, записи языка Паскаль), описывающую совокупность кусков Безье, а также зависимости между каждым из кусков и не более чем четырьмя другими кусками. Зависимости следую- щие: а) общее ребро, на котором достигается С(0)-непрерывность; б) общее ребро, на котором достигается С(1>-непрерывность. Затем напишите процедуру, с помощью которой можно было бы изменить значение любой точки из геометрической матрицы куска размером 4X4 с учетом всех изменений, автома- тически вносимых при этом в матрицы соседних кусков. В некоторых случаях новое значение управляющей точки может привести к тому, что другие управляю- щие точки того же куска также изменят свои значения, чтобы сохранить постоян- ным отношение между длинами касательных векторов. 13.20. Какой вид примет кривая, представленная в форме Эрмита, если Pi=Pt и = 13.21. Можно ли представить поверхность, имеющую форму бублика (тора), с помощью кусков поверхности Эрмита? Объясните ваш ответ.
Глава 14 Методы создания реалистических трехмерных изображений 14.1. ВВЕДЕНИЕ Данная глава посвящена важному применению машинной гра- фики — созданию реалистических изображений трехмерных объек- тов. Для этой цели используются два очень эффективных способа — удаление скрытых поверхностей и закраска видимых поверхностей. Средства машинной графики, используемые для этой цели, кратко описаны в данной главе и подробно обсуждаются в гл. 15 и 16. В гл. 17 рассмотрено использование цвета как важного элемента для формирования реалистических изображений. С середины 60-х годов ведутся поиски способов и средств созда- ния реалистических изображений с помощью машинной графики. В настоящее время получены некоторые весьма впечатляющие изоб- ражения; их примеры приведены на многих цветных вклейках данной книги. Цель поисков состояла в формировании с помощью ЭВМ столь реалистических изображений, чтобы наблюдатель при- нимал изображение за реальный объект, а не за синтетический объект, существующий только в памяти ЭВМ. Это очень важно в та- ких областях, как моделирование, проектирование и организация досуга. Моделирующие системы позволяют получать изображения, которые не только являются реалистическими, но и изменяются ди- намически. Например, летный тренажер показывает вид, который открывался бы из кабины летящего самолета. Для создания эффек- та движения <-'30 раз в 1 с генерируется и выводится новое, слегка отличающееся от предыдущего изображение. Тренажеры исполь- зовались не только для обучения пилотов самолетов, но также для подготовки экипажей космических кораблей «Аполлон» и «Ко- лумбия». На вклейках 16, 30 и 31 показаны изображения, сгенери- рованные тренажерами. Конструкторам автомобилей, самолетов, зданий и т. д. хотелось бы заранее знать, как будет выглядеть их проект. Формирование реалистических изображений, сгенерированных на ЭВМ, во многих случаях представляет собой легкий, дешевый и более эффективный способ наблюдения предварительных результатов, чем изготовление моделей и опытных образцов; кроме того, он позволяет рассмотреть большее число вариантов проекта. Поскольку само проектирование часто выполняется на ЭВМ, цифровое описание трехмерного объекта
252 Глава 14 уже готово для использования в качестве основы для формирования изображений. В организации зрелищ начинают использовать сформированные на ЭВМ изображения для мультипликационных фильмов и при формировании реалистических и сюрреалистических изображений для заставок, объявлений, а также для научно-фантастических фильмов. Мультфильмы, генерируемые на ЭВМ, могут воспроиз- водить традиционную мультипликацию, а также использовать пре- имущества ЭВМ перед ручными методами благодаря введению более сложных движений, а также более насыщенных или более реалистических образов. Примерами таких изображений служат вклейки 2, 21, 33—38. Основной трудностью создания реалистических изображений является сложность реальных визуальных образов. Взгляните, как разнообразно наше окружение. В нем существуют многочисленные фактуры поверхности, плавные переходы цветов, тени, отражения и мелкие неровности (царапины на полу, «чешуйки» краски, выступы на стенках). Сочетаясь в нашем сознании, они образуют «реальный» визуальный опыт. Были разработаны методы для воспроизведения этих визуальных эффектов на ЭВМ. Во многих случаях осуществ- ление такого воспроизведения мо- жет оказаться слишком дорогим: так, например, формирование изображений, подобных приведен- ным на вклейках 2 и 20, требует многих минут работы процессора на современной мощной ЭВМ. Другая цель создания реали- стических изображений состоит в том, чтобы при выводе на дисплей дать достаточно информации поль- зователю, чтобы он понял трехмерные пространственные отношения между несколькими объектами. Эта цель может быть достигнута пу- тем создания не очень высокореалистических изображений, что явля- ется нормальным требованием при машинном проектировании и во многих других областях применения. Разумеется, высокореалисти- ческие изображения также дают представление о трехмерных про- странственных отношениях, однако они содержат гораздо больше информации. На рис. 14.1 приведен простой чертеж, которого впол- не достаточно, чтобы убедить нас, что одно из зданий находится сзади другого. При этом совсем не нужно заполнять поверхности здания изображением отдельных кирпичей или черепицы, или же показывать тени, отбрасываемые зданиями. Главная трудность при изображении пространственных отношений состоит в том, что все практически существующие устройства вывода являются двумер- ными. Следовательно, трехмерные объекты приходится проециро- вать на плоскость, что приводит к существенным потерям информа-
Методы создания реалистических трехмерных изображений 253 Рис. 14.2. Иллюзия куба (по Неккеру). Рис. 14.3. Иллюзия лестницы (по Шредеру). ции, а иногда к неопределенности изображения. В данной главе рассматриваются методы, которые используются для восстановле- ния информации (обычно встречающейся в видимой нами среде), чтобы присущие человеку механизмы восприятия глубины могли соответствующим образом ликвидировать неясности. На рис. 14.2, а приведена двумерная проекция куба. Неопре- деленность состоит в том, что не известно, какому кубу соответствует куб, показанный на рис. 14.2, а: либо кубу на рис. 14.2, б, либо кубу на рис. 14.2, в. Как заметил еще в 1832 г. Неккер, человек может считать правильной интерпретацией как случай б, так и слу- чай в. Очень легко можно переходить от одного из этих решений к другому лишь потому, что нет достаточной информации для одно- значной интерпретации изображения. Чем больше зрители знают о представляемом объекте, тем скорее они сформируют для себя то, что Грегори назвал гипотезой объек- та [196]. На рис. 14.3 показана лестница. Однако как мы ее видим: глядя сверху или же разглядывая снизу? Более вероятно, что мы выберем первую интерпретацию, возможно, потому, что чаще мы видим лестницу у себя под ногами, а не над головой, поэтому мы знаем больше о лестницах, видимых сверху. Слегка напрягая свое воображение, мы можем перейти к другой визуальной интерпретации рисунка. Однако достаточно моргнуть и большинство зрителей вер- нется к первой интерпретации (вид лестницы сверху).
254 Глава 14 14.2. МЕТОДЫ ПРЕДСТАВЛЕНИЯ ОТНОШЕНИЙ ПО ГЛУБИНЕ В данном разделе основное внимание уделено показу трехмерных глубинных отношений на двумерной поверхности. Этой цели служат плоские геометрические проекции, описанные в гл. 8. В работе [75] обсуждаются достоинства и недостатки различных проекций. 14.2.1. Параллельные проекции Простейшей является параллельная прямоугольная проекция. В ней вообще не содержится информации о глубине. Поэтому сов- местно изображаются виды сверху, спереди и сбоку (как для буквы Рис. 14.4. Виды спереди, сверху и сбоку буквы L в прямоугольной проекции. Рис. 14.5. Перспективная проек- ция куба. «Ь» на рис. 14.4). Конкретный пример на рис. 14.4 нетрудно понять; однако для того чтобы разобраться в чертежах сложных машино- строительных деталей, иногда требуются многие часы для их изу- чения. Тренировка и опыт обостряют способности к интерпретации; знания о представляемых объектах увеличивают вероятность форму- лирования гипотезы объекта. 14.2.2. Перспективные проекции В перспективной проекции в отличие от параллельной инфор- мация о глубине не теряется полностью. При этом размеры объектов обратно пропорциональны их расстоянию от наблюдателя. Изме- нение масштаба явно видно на перспективной проекции куба на рис. 14.5. Однако и в этом случае существует неопределенность: данная проекция может также быть изображением рамы картины, параллельной проекцией усеченной пирамиды или перспективной проекцией прямоугольного параллелепипеда с двумя одинаковыми гранями. Если гипотезой объекта является усеченная пирамида, меньший квадрат представляет ближнее к зрителю основание; если же гипотезой является куб или прямоугольный параллелепипед, меньший квадрат представляет дальнюю от зрителя грань.
Методы создания реалистических трехмерных изображений 255 Рис. 14.6. Перспективная проекция двух домов. Наша интерпретация перспективных проекций часто основы- вается на предположении о том, что меньший объект расположен дальше. На рис. 14.6, как можно предполагать, больший дом нахо- дится ближе к зрителю. Однако дом большего размера (например, особняк) на самом деле может располагаться дальше чем тот, кото- рый на рисунке имеет меньшие размеры (например, коттедж), по крайней мере если нет других элементов для определения глубины (деревьев, окон и т. д.). В работе [379] моделируется оптика для фотокамеры, которая позволяет получать изображения с перемен- ными фокусным расстоянием и размером. Когда зрителю известно, что в проецируемом объекте много па- раллельных линий, перспектива обеспечивает передачу глубины, поскольку параллельные линии направлены в точки схода. Факти- чески это схождение линий лучше передает глубину, чем уменьше- ние размеров. По сообщению Райта, перспективные изображения «палочного» типа для молекул были менее убедительными, чем параллельные проекции, что объяснялось отсутствием сходящихся параллельных линий в молекулярных структурах [513]. 14.2.3. Передача глубины яркостью Глубину объекта (расстояние до него) можно представить путем изменения уровня яркости: объекты, которые, как предполагается, находятся ближе к зрителю, должны выводиться с увеличенной яркостью (рис. 14.7). Для реализации передачи глубины за счет яркости в ДП должна быть информация о глубине (координата г). В векторных дисплеях генератор векторов использует начальные и конечные координаты для интерполяции яркости. В растровых дисплеях ту же функцию выполняет алгоритм растровой развертки отрезков. Человеческий глаз различает яркости гораздо хуже, чем положение по глубине, поэтому с помощью яркости невозможно передавать небольшие различия в расстояниях от пользователя. Од- нако этот метод очень эффективен для передачи больших различий. Передача глубины яркостью имеет некоторые аналоги в реаль- ном зрении: только в песне можно «видеть дали» в ясный день. Уда- ленные объекты кажутся туманнее, чем ближние, в особенности
256 Глава 14 Рис. 14.7. Изображение самолета без использования (а) и с использованием (б) яркости линий в качестве средства для передачи глубины. (С разрешения фирмы McDonnell Douglas, система CADD.) в пасмурные дни. Реакция пользователя на передачу глубины яр- костью, по-видимому, не является интуитивной, а приобретается в процессе обучения. 14.2.4. Отсечение по глубине Дополнительную информацию о глубине можно получить путем отсечения по глубине (в некоторых аппаратных реализациях оно называется отсечением по оси г). Выводимый объект пересекается плоскостью, отсекающей его удаленную часть. Следовательно, наблюдателю известно, что частично отсеченные линии были уда- лены секущей плоскостью. Если динамически изменять положение задней отсекающей плоскости, то наблюдатель получит больше информации о глубине. На рис. 14.8 показан тот же самолет, что и на рис. 14.7, с задней отсекающей плоскостью, которая удалила хвост и часть одного из крыльев. 14.2.5. Динамические проекции Если серию проекций одного и того же объекта выводить быстро каждый раз с новых точек зрения, расположенных недалеко друг от друга и вокруг объекта, то создастся впечатление вращения объ- екта. Объединяя информацию от всех видов, зритель формирует гипотезу объекта. Так, например, проекция вращающегося куба позволяет получить два вида информации. Во-первых, получается серия различных проекций, которые полезны сами по себе. Во-вто-
Методы создания реалистических трехмерных изображений 257 Рис. 14.8. Отсечение по глубине. (С разрешения фирмы McDonnell Douglas, систе- ма CADD.) рых, возникает эффект движения, при котором максимальная угло- вая скорость точек вблизи от центра вращения меньше, чем у точек, которые дальше отстоят от этого центра. Данный метод весьма эффективен, однако его использование для преобразований любых объектов, кроме самых простых, требу- ет специального аппаратного обеспечения. Интересно отметить, что по прямоугольным проекциям невозможно определить направление вращения объекта, поскольку недостаточно средств для определения глубины. Однако если одновременно использовать средства пере- дачи глубины и динамическое вращение, можно выявить и направ- ление вращения. 14.2.6. Удаление скрытых ребер и поверхностей Удаление скрытых ребер используется в тех случаях, когда объекты представляются отрезками, которые изображают ребра по- верхностей, составляющих объект (вклейка 14а). Удаление скрытых поверхностей применяется, когда объекты представляются сплош- ными поверхностями (вклейка 146). В первом случае удаляются и не выводятся ребра, закрытые видимыми поверхностями, во втором случае удаляются и не выводятся поверхности, закрытые видимыми поверхностями. Из рис. 14.1, 14.2, 14.9, 14.10 и вклейки 14а следует целесообраз- ность удаления скрытых ребер. Изображение скрытых ребер в виде штриховых линий также полезно и дает возможность получить больше информации. Поскольку алгоритмы удаления скрытых ребер требуют больших затрат машинного времени и не удовлетворяют требованиям относительно времени ответа в машинной графике, они обычно выполняются как дополнительная возможность, при- чем пользователь очень быстро начинает понимать, что применять
258 Глава 14 Рис. 14.9. Линейное изображение кронштейна. (С разрешения фирмы Boeing.) Рис. 14.10. Вид кронштейна с удален- ными скрытыми линиями. (С разре- шения фирмы Boeing.) ее нужно очень экономно, только тогда, когда это действительно необходимо. При удалении скрытых поверхностей мы переходим от показа отношений по глубине к формированию реалистических изображе- Рис. 14.II. Вид кронштейна с удаленными скрытыми поверхностями. (С разреше- ния фирмы Boeing.)
Методы создания реалистических трехмерных изображений 259 ний. Поскольку виды с удаленными скрытыми ребрами или с уда- ленными скрытыми поверхностями полностью скрывают всю внут- реннюю структуру объектов, они не обязательно являются наиболее эффективным способом демонстрации отношений по глубине. Виды с удаленными скрытыми ребрами на вклейке 14а и удаленными скрытыми поверхностями на вклейке 146, хотя и являются реали- стическими, содержат меньше информации, чем изображения в разобранном виде и с вырезами на вклейках 14в и 14г. С другой стороны, вид с удаленными скрытыми поверхностями, приведенный на рис. 14.11, позволяет лучше представить форму кронштейна, чем рис. 14.9 и 14.10. 14.3. СТЕРЕОСКОПИЯ Во всех описанных выше методах глаза наблюдателя рассмат- ривают одно и то же изображение. Проведем эксперимент: посмот- рите на поверхность стола поочередно одним и другим глазом. Два вида при этом будут слегка различаться, поскольку наши глаза отстоят один от другого на несколько сантиметров (рис. 14.12). Возникающий в связи с этим бинокулярный эффект, слу- жит весьма мощным средством для восприятия глубины, назы- ваемым стереоскопией. Наш мозг сливает два раздельных образа в один, интерпретируемый как трехмерный. Два раздельных изображе- ния называются стереопарой', они использовались в стерео- скопах, которые были попу- лярны еще во времена на- ших прабабушек, а в наши дни используются в распростра- ненной детской игрушке «Вьюмастер». На вклейке 15 показана стереопара для изображения молекулы со сплошными поверхностя- ми. Два изображения можно объединить в один трехмерный образ, если разглядывать эту пару так, чтобы каждый глаз видел только одно изображение; для этого можно, например, поместить твердый лист бумаги между двумя изображениями перпендикулярно стра- нице. Для достижения высокореалистических эффектов, создаваемых стереоскопией, разработчик интерактивной системы должен предъя- вить каждому глазу вид, который соответствующим образом отли-
260 Глава 14 Рис. 14.13. Каска с дисплеями. (С разрешения университета Utah.) чается от другого. Это можно получить различными способами. В первом методе используются две раздельные ЭЛТ, снабженные оптическими системами из призм и линз для подачи изображения к глазам. В одной из реализаций этого метода на каске, которую надевает пользователь, смонтированы две маленькие ЭЛТ (рис. 14.13) [450]. В этом конкретном случае ЭВМ, управляющая этими ЭЛТ, получает данные о положении и ориентации каски, а зритель, надевший каску, видит среду, которая изменяется при его движе- ниях. Во втором методе используются одна ЭЛТ и система шторок перед глазами. При чередующихся циклах регенерации выводятся виды для правого и левого глаза синхронно с открытием и закрытием соответствующих шторок (обычно они выполняются в виде ряда непрозрачных участков и отверстий на вращающемся цилиндре или диске, расположенном перед глазами). Такой аппарат ограничи- вает подвижность наблюдателя, однако им могут пользоваться сразу несколько человек. При другом решении пользователь наде- вает очки, полупроводниковые линзы которых изготовлены из свинцово-лантанового цирконата-титаната (PLZT) (рис. 14.14).
Методы создания реалистических трехмерных изображений 261 Рис. 14.14. Стереоочки. (С разрешения фирмы Megatek.) Примерно в течение 1 мс под действием электрического поля мате- риал переходит из прозрачного состояния в непрозрачное (или нао- борот) и играет роль шторки [399, 4001. Эти два метода относительно дорогие, однако при их использо- вании каждый глаз видит полный экран. Третий метод проще и дешевле, но в нем для двух видов используются две половины одной и той же ЭЛТ. Чтобы каждый глаз видел только то, что он должен видеть, применяется система цветных или поляризованных фильтров. На рис. 14.15 иллюстрируется основная идея метода. Полусеребре- ное зеркало пропускает часть света, поступающего от нижней половины экрана, и отражает часть света от верхней половины экрана. Пользователь может при этом свободно перемещаться, причем стереоэффект сохраняется. Эта система, впервые разрабо- танная Ортони [3601, была усовершенствована Фелдманном и ис- пользовалась для вывода изображений больших молекул. Читате- ли, которые хотят лучше понимать явление стереоскопии, могут ознакомиться с работами [252, 254]. В работе [291] дан обзор мето- дов для вывода стереопар, а также других методов для создания эффекта глубины. Все эти методы, включая использование стереопар, «обманы- вают» пользователя, у которого должно создаться впечатление, что он видит трехмерную сцену. Ни один из этих методов фактически не формирует трехмерной среды, хотя каска с вмонтированными дисп- леями обеспечивает одному пользователю эффект параллакса, т, е.
262 Глава 14 Рис. 14.15. Создание стереоэффекта с помощью полусеребреного зеркала и поля- ризованных фильтров (можно также использовать цветные фильтры). кажущееся изменение вида при движении головы; именно это является наиболее важным «отсутствующим звеном» в других ме- тодах. Трауб [469], а затем Роусон [385] разработали систему для формирования изображения, которое фактически является трехмер- ным. Гибкое майларовое зеркало подвергается колебаниям, которые изменяют его фокусное расстояние. В этом зеркале отражается экран ЭЛТ. Цикл работы ЭЛТ синхронизирован с колебаниями зер- кала таким образом, чтобы объекты выводились на экран в тот момент, когда благодаря изменению фокусного расстояния зеркала объект помещается на нужной глубине. Другим методом создания фактически трехмерных изображений (правда, непригодным для работы в реальном времени) является получение голограммы путем расчета и вывода на негативную пленку. Трудности использования этого метода связаны с большими затратами машинного времени, а также с необходимостью контроля в реальном времени светопропускания пленки, через которую про- ходит когерентный свет для восстановления трехмерного изображе- ния. 14.4. ПУТИ СОЗДАНИЯ РЕАЛИСТИЧЕСКИХ ИЗОБРАЖЕНИЙ До сих пор мы обращали основное внимание на рисунки, состоя- щие из линий. Однако некоторые из описанных выше методов при- годны для создания более реалистических тоновых изображений, показанных на различных(цветных вклейках. Первым шагом на этом пути является удаление скрытых поверхностей. Значение этого шага становится очевидным, если сравнить изображения космиче- ского корабля многоразового использования на рис. 13.2 и на вклей- ке 16 или различные представления автомобиля, приведенные на рис. 16.8.
Методы создания реалистических трехмерных изображений 263 Объекты, скрытые поверхности которых необходимо удалять, должны быть представлены либо как тела, либо как совокупности поверхностей (гл. 13). При взгляде из конкретной точки одни из поверхностей закрываются другими полностью, некоторые закры- ваются частично, а некоторые остаются полностью видимыми. Алго- ритмы удаления скрытых поверхностей рассматриваются в гл. 15. Вторым шагом является закраска видимых поверхностей. Внешний вид поверхности зависит от вида источника света, кото- рым освещается объект, от свойств поверхности (цвет, фактура, отражательная способность), а также от положения и ориентации поверхности относительно источника света и других поверхностей. Источник света может представлять собой точечный источник, подобный Солнцу или лампе накаливания, или же распределенный источник, аналогичный группе ламп дневного света. На практике во многих ситуациях присутствует также естественный свет, падаю- щий с самых различных направлений. Наиболее простым для моделирования источником является рассеянный естественный свет, так как он обеспечивает постоянное освещение всех поверхностей независимо от их ориентации. К со- жалению, такой свет дает весьма нечеткие изображения, поскольку редки ситуации, когда освещение обеспечивается только естествен- ным светом. При естественном освещении две смежные стороны куба должны быть закрашены одинаково, а их общее ребро должно быть неразличимо. Более сложным (с точки зрения моделирования), но зато более реальным источником света является точечный источник, при ис- пользовании которого освещенность поверхности зависит от ее ориентации: если лучи направлены перпендикулярно к поверхно- сти, она освещена ярко. Чем меньше угол падения лучей, тем меньше освещенность. Такое изменение освещенности позволяет эффектив- но распознавать трехмерную структуру объекта. Повышение реальности изображения может быть достигнуто путем воспроизведения теней, которые отбрасывает объект, освещен- ный точечным источником. На вклейке 17 показаны сцены с раз- личным количеством источников света; некоторые из них создают тени. На вклейке 20 показан другой случай образования теней. Тени повышают реалистичность и являются дополнительным сред- ством для распознавания глубины: если объект А отбрасывает тень на объект В, то А находится между В и источником света. На рис. 14.16 показаны куб, точка зрения, задняя плоскость, а также несколько источников света в пунктах LI, L2 и L3. Только источ- ник L2 создает тень на части задней плоскости, невидимую из точки зрения, так как тень закрыта кубом. Источник света в точке зрения или в любой точке на прямой, проходящей через точку L2 и уходя- щей в бесконечность, также создаст тень, невидимую из точки зре- ния. Источники света L1 и L3 создают тени, которые видимы зрителю.
264 Глава 14 Область Рис. 14.16. Тени, создаваемые тремя источниками света. Другим способом повышения реальности изображения явля- ется воспроизведение свойств поверхности. Одни поверхности яв- ляются матовыми и рассеивают отраженный свет по разным направ- Рис. 14.17. Нанесение узора кирпичнои кладки на бикубическую поверхность. (С разрешения Э. Кэтмула.).
Методы создания реалистических трехмерных изображений 265 лениям; другие — обладают блеском и отражают свет только в некоторых направлениях. Поверхности могут быть также полу- прозрачными, т. е. пропускать (и преломлять) часть света и одно- временно отражать другую часть, В частности, на вклецках 16 и 20 иллюстрируется воспроизведение этих явлений средствами машинной графики. Другим свойством поверхностей является их фактура: очень редко поверхности бывают совершенно гладкими, однако именно такими их моделируют с помощью многоугольников и бикубиче- ских параметрических поверхностей. На вклейках 18 и 19 показано, как можно повысить реалистичность изображения, передавая фак- туру поверхностей. Аналогично поверхность очень редко окрашена равномерно: чаще на поверхностях бывает какой-либо узор. Реа- листичность изображения можно повысить также путем нанесения узора на поверхности (наподобие кирпичной кладки на рис. 14.17) при их закраске. Методы моделирования источников света и свойств поверхно- стей, кратко описанные здесь, более подробно рассматриваются в гл. 16.
Глава 15 Алгоритмы удаления скрытых линий и поверхностей 15.1. ВВЕДЕНИЕ Предположим, что заданы трехмерный объем и видовые пара- метры, описывающие тип проекции, проекционную плоскость и т. д., и требуется определить, какие ребра и поверхности объекта видимы, если смотреть из центра проекции (для центральных проекций) или вдоль направления проецирования (для параллельных проек- ций). Только эти ребра и поверхности мы будем выводить на экран. Хотя задача формулируется просто, для ее решения требуется много процессорного времени, поэтому поощряются разработки многочис- ленных и тщательно структурированных алгоритмов. Необходимость этих разработок следует из анализа двух основ- ных подходов к решению проблемы. В первом подходе объект рас- сматривается как совокупность н-угольных граней и необходимо определить, какая грань видна в каждой точке разрешения экрана дисплея. Чтобы выяснить при этом, какая из граней является бли- жайшей к наблюдателю, необходимо проверить все п граней для каждой разрешаемой точки. Для N таких точек число проверок пропорционально nAf, где Af обычно лежит в диапазоне 250 000—• 4 000 000. Во втором подходе каждая из п граней сравнивается с остав- шимися п—1 гранями. Число проверок в этом случае пропорцио- нально п2. Поэтому можно предположить, что второй подход лучше даже для наибольших из реально встречающихся значений п (100 000—200 000). Однако каждый из индивидуальных шагов при втором подходе требует больше времени, поэтому этот процесс ока- жется медленнее даже при меньших п. Сазерленд, Спрулл и Шумахер [454] назвали эти подходы алго- ритмами, работающими соответственно в пространстве изображе- ния и в пространстве объекта. Они рассмотрели и классифициро- вали десять алгоритмов, разработанных до 1972 г. Ниже описаны четыре из них, а также некоторые другие алгоритмы, созданные после 1972 г. Алгоритмы удаления скрытых поверхностей необходимо стро- ить так, чтобы каждый их шаг был как можно более эффективным. В двух следующих разделах приведены некоторые общие рекомен- дации. Затем изложены специализированные алгоритмы, которые позволяют стирать скрытые поверхности на изображениях трехмер- ных, объектов, составленных из полигональных граней. Некоторые
Алгоритмы удаления скрытых линий и поверхностей 267 из этих алгоритмов можно использовать для удаления скрытых ребер» Кратко описаны алгоритмы, которые предназначены для изображения объектов, заданных кусками криволинейной поверх- ности. Класс специализированных алгоритмов, предназначенных для отображения однозначных функций двух переменных [68, 514], здесь не рассматривается. Рис. 15.1. Случаи двух точек Р] и Р2, лежащих на одном проекторе (одна точка закрывает другую), и двух точек и Р3 (или Р2 и Р8), не лежащих на одном проекторе (точки не закрывают друг друга). 15.2. УПРОЩЕНИЕ СРАВНЕНИЙ ПО ГЛУБИНЕ: ПЕРСПЕКТИВНОЕ ПРЕОБРАЗОВАНИЕ Удаление скрытых поверхностей должно проводиться в трехмер- ном пространстве до проецирования на плоскость, при котором теряется информация о третьей координате, необходимая для про- ведения сравнений по глубине. Основное сравнение по глубине можно свести к следующему во- просу: закрывает ли одна из двух заданных точек Pi=(xb yt, гг) и Р2= (х2,г/2, z2) другую? Этот вопрос эквивалентен следующему: лежат ли точки Pf и Р2 на одном и том же проекторе (рис. 15.1)? Если да, то, сравнивая zt и г2, можно опреде- лить, какая точка ближе к наблю- дателю. Если же нет, то ни одна из точек не закрывает другую. Сравнения по глубине обычно производятся после применения нормирующего преобразования (гл. 8), поэтому при параллельном проецировании проекторы параллельны оси г, а при центральном проецировании выходят из начала координат. Следовательно, при параллельном проецировании точки лежат на одном проекторе, если xi=x2 и г/1=г/2, а при центральном проецировании для опре- деления принадлежности точек проектору приходится выполнять четыре операции деления, чтобы выяснить, имеют ли место равен- ства x1/z1=x2/z2 и yilzi=yjzt. Более того, если точка Рх затем сравнивается с некоторой точкой Р3, две из этих операций придется повторить. Лишних операций деления можно избежать, если произвести такое преобразование трехмерного объекта, при котором парал- лельная проекция преобразованного объекта представляла бы то же самое, что и центральная проекция первоначального объекта. Тогда проверка, закрывает ли одна из точек другую, будет такой же, как и для параллельных проекций. Преобразование деформирует объекты и перемещает центр проекции в бесконечность вдоль отри-
268 Глава 15 Рис. 15.2. Куб до применения преобразования М (а) и после применения преобра- зования М (б). дательного направления оси г; при этом проекторы оказываются параллельными (рис. 8.40). На рис. 15.2 показано, как искажается куб после преобразования, которое состоит в том, что сохраняются относительная глубина, прямые линии и плоскости и в то же время производится перспективное укорачивание. Как было показано в гл. 8, деление, с помощью которого выполняется укорачивание, производится не при всяком сравнении двух точек, а лишь один раз для каждой точки. Матрица ~1 0 0 0" 0 1 0 0 м = 0 0 1 1 (15.1) 0 0 0 |_ 1 Zwmin преобразует нормированный видимый объем при центральной про- екции в прямоугольный параллелепипед, который определяется следующими соотношениями: —Кх<1, —1<г/<1, 0<г<1. (15.2) Отсечение, однако, не может проводиться относительно прямо- угольного параллелепипеда, описываемого уравнениями (15.2), так как деление на г, выполняемое в матрице М для формирования параллелепипеда, приводит к потере информации, необходимой для определения знака z-координаты точки (гл. 8). Отсечение относи- тельно нормированного видимого объема, представляющего собой усеченную пирамиду, можно выполнять до применения матрицы М, однако после этого результаты отсечения надо умножить на матрицу М. Более привлекательным решением является объединение матрицы М с перспективным нормирующим преобразованием ^енТр (гл. 8) так, чтобы можно было обойтись лишь одним умножением на матри-
Алгоритмы удаления скрытых линий и поверхностей 269 цу. Отсечение проводилось бы затем в однородных координатах до выполнения деления. Если результаты этого умножения обозначить через (X, Y, Z, 1У), отсекающие пределы можно записать так: —W^X^W, —W^Y^W, (15.3) Их можно получить из неравенств (15.2) заменой х, у и г на X/W, Y/W и Z/W соответственно, чтобы отразить тот факт, что х, у и г из неравенств (15.2) являются результатами деления на W. После проведения отсечения мы результат делим на W и получаем (хр, ур, гр). (В работе [43] рассматривается процесс отсечения для случая, когда знаки W крайних точек отрезка различны.) Теперь мы можем приступить к удалению скрытых поверхностей, забыв о тех осложнениях, которые продемонстрированы на рис. 15.1. Разумеется, если задано параллельное проецирование, перспектив- ное преобразование матрицы М не требуется, поскольку в этом случае при нормирующем преобразовании Wnap для параллельных проекций проекторы оказываются параллельными оси zo. 15.3. ИСКЛЮЧЕНИЕ СРАВНЕНИЙ ПО ГЛУБИНЕ. ОБОЛОЧКИ В некоторых алгоритмах, чтобы избежать ненужных сравнений между объектами, используются экранные оболочки, введенные в гл. 4 для исключения лишних отсечений. На рис. 15.3 показаны два трехмерных многоугольника, их проекции, а также прямоуголь- ные оболочки, окружающие проекции. Оболочки в этом случае не пересекаются и, следовательно, не надо проверять, не перекрыва- ются ли ребра одного многоугольника с ребрами другого. Рис. 15.3. Два многоугольника, их проекции на плоскость ху, а также оболочки, окружающие проекции.
270 Глава 15 Рис. 15.4. Оболочки, ограничивающие многоугольники. а — оболочки и многоугольники перекрываются; б — оболочки перекрываются, а много- угольники не перекрываются. Рис. 15.5. Одномерные оболочки двух многоугольников; эти оболочки не перекры- ваются. Предположим, что многоугольники были подвергнуты преобра- зованию, описываемому матрицей М (разд. 15.2). Тогда проециро- вание на плоскость ху выполняется тривиально путем установки z=0 для каждой вершины. Если бы это преобразование не приме- нялось, для построения проекции потребовалось бы деление на г. Если прямоугольные оболочки перекрываются, имеет место один из двух случаев (показанных на рис. 15.4): либо проекции много- угольников также перекрываются (случай а), либо этого не происхо- дит (случай б). В обоих случаях для более подробного анализа тре- буются дополнительные сравнения. В случае б с их помощью будет установлено, что на самом деле два многоугольника не перекры- ваются: пересечение оболочек в некотором смысле оказалось «лож- ной тревогой». Можно воспользоваться оболочками, как в гл. 9, для окружения самих многоугольников, а не их проекций — в этом случае оболоч- ки становятся пространственными. С другой стороны, их можно применить для указания границ в пределах одного измерения,
Алгоритмы удаления скрытых линий и поверхностей 271 чтобы выяснить, например, перекрываются ли два многоугольника в направлении г. На рис. 15.5 показано, как в таком случае исполь- зуются оболочки; здесь оболочкой является бесконечная область, ограниченная минимальным и максимальным значениями г для каждого многоугольника. Перекрытие по оси г отсутствует, если ^max 2 ИЛИ Zmax f. (15.4) Во всех этих случаях наиболее сложным является нахождение самих оболочек. Их можно определить, просматривая снова список вершин координат и фиксируя наибольшие и наименьшие значения по каждой координате. 15.4. АЛГОРИТМ СОРТИРОВКИ ПО ГЛУБИНЕ В этом алгоритме, разработанном Ньюэлом, Ньюэлом и Санча [341], применяется простой подход, состоящий из трех шагов: 1. Упорядочение всех многоугольников в соответствии с их наибольшими г-координатами. 2. Разрешение всех неопределенностей, которые возникают при перекрытии г-оболочек. 3. Преобразование каждого из многоугольников в растровую форму, производимое в порядке уменьшения их наибольшей г- координаты. Основная идея алгоритма заключается в упорядочении много- угольников в соответствии с их удаленностью от точки зрения, а также в размещении этих многоугольников в буфере регенерации в порядке убывания расстояния. Ближайшие многоугольники пре- образуются в растровую форму последними и закрывают более отдаленные многоугольники, поскольку записываются в буфер регенерации поверх старых. При разложении каждого многоуголь- ника в растр значения его пэлов вычисляются с использованием одного из правил тоновой или цветовой закраски, изложенных в гл. 16. Рассматриваемый алгоритм обладает свойствами алгорит- мов, работающих в пространстве изображения и в пространстве объекта: некоторые его шаги выполняются в первом пространстве, а некоторые — во втором. Этот алгоритм может легко работать с явным приоритетом, рас- смотренным в разд. 11.9. Приоритет играет роль максимального значения г, причем неопределенностей, связанных с глубиной, в этом случае может не быть, поскольку считается, что каждому приоритету соответствует своя плоскость с постоянной координа- той г. На рис. 15.6 показаны некоторые типы неопределенностей, необходимость в разрешении которых может возникнуть на шаге 2. Как же устраняются эти неопределенности? Обозначим многоуголь- ник, находящийся в конце упорядоченного списка многоугольни- ков, через Р. До отображения в буфер регенерации этот многоуголь-
272 Глава 15 Рис. 15.6. Случаи, при которых перекрываются оболочки многоугольников. ник необходимо сравнить с каждой гранью Q, г-оболочка которой перекрывает г-оболочку многоугольника Р. Проверка складывается не более чем из пяти шагов (тестов), которые выполняются в поряд- ке возрастания сложности. Как только на любом из шагов выдается утвердительный ответ, Р сразу преобразуется в растровую форму. Этими пятью тестами являются следующие: 1. х-оболочки многоугольников не перекрываются, поэтому сами многоугольники тоже не перекрываются; 2. у-оболочки многоугольников не перекрываются, поэтому сами многоугольники тоже не перекрываются. (Отметим, что в те- стах 1 и 2, взятых в совокупности, оболочки рассматриваются в том виде, как были впервые введены в предыдущем разделе.) 3. Р целиком лежит с той стороны от плоскости Q, которая дальше от точки зрения (этот тест дает отрицательный ответ в случае а на рис. 15.6 и утвердительный ответ в ситуации, показанной на рис. 15.7). 4. Q целиком находится с той стороны от плоскости Р, которая ближе к точке зрения (этот тест дает отрицательный ответ в случае а на рис. 15.6 и утвердительный ответ в ситуации, показанной на рис. 15.8). 5. Проекции многоугольников на плоскость ху (экран) не пе- рекрываются (это определяется путем сравнения ребер одного мно- гоугольника с ребрами другого). В упражнении 15.7 предложен способ реализации тестов 3 и 4. Если во всех пяти тестах получен отрицательный ответ, мы предполагаем, что Р действительно закрывает Q, поэтому поменяем Р и Q местами в списке, пометив при этом, что Многоугольник Q был перемещен на новое место в конце списка. В случае а на рис. 15.6 так оно и есть: если мы сравним Q с Р, то обнаружим с помощью теста 3 (где Р и Q поменялись местами), что многоугольник Q дол- жен преобразовываться в растровую форму первым. В случаях же б и в на рис 15.6 (поскольку не существует плоскости, разделяющей многоугольники) многоугольник Q рано или поздно придется снова перемещать в списке, и алгоритм зациклится. Чтобы избежать зацикливания, введем ограничение, в соот- ветствии с которым многоугольник, перенесенный в конец списка
Алгоритмы удаления скрытых линий и поверхностей 273 Рис. 15.8. Отрицательный ответ в тесте 3, но утвердительный ответ в тесте 4. --- —.---------------------► *\Г Рис. 15.7. Утвердительный ответ в тесте 3. (и, следовательно, помеченный), не может подвергаться повторному перемещению. Вместо этого многоугольник Р или Q рассекается на две части плоскостью другого многоугольника (разд. 11.6). Перво- начальный многоугольник отбрасывается, а две его части включа- ются1 в соответствующие места упорядоченного списка, и алгоритм продолжает работать, как прежде. С помощью такого алгоритма многоугольники, находящиеся с задней стороны объекта, изображаются первыми, но затем они могут быть закрыты. Это может помочь наблюдателю понять пространствен- ную структуру объекта, однако отсюда следует, что некоторые многоугольники будут без необходимости преобразовываться в растровую форму. Алгоритм плохо приспособлен для использования на растровых фильмирующих устройствах, поскольку фильм, проэкспонированный под действием некоторого многоугольника, нельзя «разэкспонировать», если позднее на этот многоугольник наложится другой. С помощью алгоритма сортировки по глубине можно стирать также и невидимые ребра. Вначале в буфер регенерации заносятся некоторые значения W При разложении многоугольника в растр его ребрам присваивается некоторое другое значение Vi, а все внутренние пэлы устанавливаются в Vo- Если многоугольник пере- крывает другой многоугольник, который ранее уже был преобразо- ван в растровую форму, при установке внутренности нового много- угольника в Vo будут стерты ребра предыдущего многоугольника. Подобный подход можно использовать и в других алгоритмах, рассмотренных в этой главе. Упомянутые выше алгоритмы изображения однозначных функ- ций двух переменных действуют так же, как и алгоритм сортировки по глубине, лишь обработка в этих случаях производится, начиная с переднего плана (минимальные значения г) по направлению к заднему. Сортировка, как таковая, отсутствует, поскольку функция однозначная. При изображении каждой новой грани поверхности, представляющей функцию, рисуется только та часть этой грани, которая попадает за пределы внешней границы фигуры, образован-
274 Глава 15 ной ранее рассмотренными гранями. Внешняя граница затем соот- ветствующим образом расширяется. В новом алгоритме Сечреста и Гринберга обработка производится снизу вверх, а не спереди назад 1416]. 15.5. АЛГОРИТМ, ИСПОЛЬЗУЮЩИЙ г-БУФЕР Другим алгоритмом, даже более простым, чем предыдущий, является алгоритм, построенный на основе z-буфера, или, точнее, алгоритм, работающий в пространстве изображения и использую- щий буфер глубины. Для него требуется не только буфер регенера- ции, в котором запоминаются значения яркости, но также и г-бу- фер, куда можно помещать информацию о координате г для каждого пэла. Вначале в г-буфер заносятся максимально возможные зна- чения г, а буфер регенерации заполняется значениями пэлов, описы- вающими фон. Затем каждый многоугольник преобразуется в ра- стровую форму и записывается в буфер регенерации, при этом, однако, не производится начального упорядочения, которое было необходимо в алгоритме сортировки по глубине. При разложении в растр для каждой точки многоугольника выполняются следующие шаги: 1. Вычисление глубины многоугольника z(x, у) в точке (х, у). 2. Если z(x, у) меньше, чем значение г-буфера в позиции (х, у), то a) z(x, у) заносится в элемент (х, у) z-буфера и б) значение пэла, которое имеет многоугольник в рассматривае- мой точке, помещается в элемент (х, у) буфера регенерации. Если условие шага 2 выполняется, считается, что точка много- угольника расположена ближе к наблюдателю, чем точка, значение яркости которой находится в данный момент в позиции (х, у) бу- фера регенерации. Поэтому записываются новые значения глубины и яркости. Весь процесс представляет собой не более чем поиск среди мно- жества пар {гг(х, у), ЕДх, у)} для заданных х и у с целью найти минимальное zt. При успешном поиске минимальное из встретив- шихся значений z помещается в г-буфер для каждой позиции (х, у). Очередность появления объектов на экране определяется упорядо- ченностью, с которой обрабатываются многоугольники, т. е. они могут изображаться не обязательно в направлении от переднего плана к заднему или от заднего к переднему. Этот алгоритм обладает недостатком: для него требуется боль- шой объем памяти под z-буфер. Однако реализация алгоритма очень проста. Эксплуатационные характеристики остаются все время почти постоянными, поскольку в среднем с ростом числа многоугольников в видимом объеме уменьшается число пэлов, покрываемых одним многоугольником. Поэтому средний размер каждого множества
Алгоритмы удаления скрытых линий и поверхностей 275 пар, среди которых производится поиск, практически постоянен (разд. 15.8). Пусть некоторый заданный многоугольник построчно преобра- зуется в растровую форму. Вычисление координаты z для каждой точки сканирующей строки можно упростить, воспользовавшись тем, что многоугольник плоский. Обычно для определения г уравнение плоскости Ax4-B//4-Cz+D==0 (15.5) решается относительно этой переменной г==--Р-.^--вУ., (15.6) С» < Теперь, если в точке (х, у) в уравнении (15.6) получается значение Zi, то в точке (x-f-Дх, у) г = 2!—^-(Дх). (15.7) Отношение А/С является постоянным, а Дх=1, поэтому, если задана глубина в точке (х, у), для вычисления глубины в точке (х+1, у) требуется выполнить лишь одно вычитание. 15.6. АЛГОРИТМЫ ПОСТРОЧНОГО СКАНИРОВАНИЯ Эти алгоритмы разработаны Уайли, Ромни, Эвансом и Эрдалом [516], Букнайтом [52, 531 и Уоткинсом [487]. Они функционируют в пространстве изображения, причем образ в них генерируется по- строчно. Ниже описан общий подход, который с некоторыми ва- риациями используется в названных выше алгоритмах. Этот подход является расширением алгоритма преобразования многоугольника в растровую форму, описанного в разд. 11.7. Раз- личие заключается в том, что в этом случае мы имеем дело не с одним многоугольником, а сразу со всеми многоугольниками, определяю- щими объект. На первом шаге создается таблица ребер (ТР), со- держащая все негоризонтальные ребра многоугольников. Элементы ТР отсортированы по группам на основе меньшей //-координаты каждого ребра, а внутри групп — в зависимости от величины тан- генса угла наклона. Эти элементы содержат: 1) х-координату крайней точки ребра с меньшей //-координатой; 2) //-координату другой крайней точки ребра; 3) приращение Дх координаты х, используемое для перехода от каждой сканирующей строки к следующей (Дх обратно тангенсу угла наклона ребра); 4) идентификатор многоугольника, указывающий, какому много- угольнику принадлежит данное ребро.
276 Глава 15 Рис. 15.9. Два треугольника. На втором шаге создается таблица многоугольников (ТМ), в которой содержится по крайней мере следующая информация о каждом многоугольнике: 1) коэффициенты уравнения плоскости; 2) информация о закраске или цвете многоугольника; 3) булева переменная (флаг), определяющая положение внутри/ вне многоугольника. (Она используется при обработке сканирующей строки; вначале этой переменной присваивается значение false.) На рис. 15.9 показаны проекции двух треугольников на пло- скость ху\ невидимые линии изображены пунктиром. В отсортиро- ванной ТР для этой фигуры содержатся элементы для АВ, AC, FD, FE, СВ и DE. В ТМ входят элементы для АВС и DEF. На третьем шаге создается таблица активных ребер (ТАР), ко- торая применялась в разд. 11.7; эта таблица всегда упорядочена по возрастанию координаты х. К тому времени, когда алгоритм дойдет до сканирующей строки у=а, ТАР будет содержать АВ и АС в ука- занном порядке. Ребра рассматриваются в направлении слева на- право. Приступая к обработке АВ, инвертируем прежде всего флаг внутри/вне треугольника АВС. Тогда флаг примет значение true и, следовательно, мы окажемся «внутри» треугольника, который необходимо рассмотреть Теперь, поскольку мы находимся внутри только одного треугольника, последний должен быть видимым и, следовательно, на интервале от ребра АВ до следующего ребра АС в ТАР будет вестись закраска, требуемая для треугольника АВС. При прохождении этого ребра флаг АВС меняет значение на false, и, следовательно, мы теперь не находимся «внутри» ни одного из треугольников. Поскольку АС является последним ребром в ТАР, обработка сканирующей строки завершается. В ТАР вносятся изме- нения из ТР, она снова упорядочивается по х и производится пере- ход к обработке следующей строки.
Алгоритмы удаления скрытых линий и поверхностей 277 Рис. 15.10. Пересечения треугольников АВС и DEF с плоскостью у = у. Когда встретится сканирующая строка #=Р, в отсортированной ТАР будут находиться АВ, AC, FD и FE. Обработка продолжа- ется в основном так же, как прежде. Со сканирующей строкой пересекаются два треугольника, но мы в каждый момент будем находиться «внутри» только одного из них. Больший интерес представляет сканирующая строка у—у. При входе в АВС флаг треугольника становится равным true. На интервале от точки входа до следующего ребра DE ведется закраска, требуемая для АВС. В точке пересечения с DE флаг DEF также устанавливается в true, и, следовательно, мы будем находиться «внут- ри» сразу двух треугольников (полезно иметь отдельный список многоугольников, флаги внутри/вне которых принимают значение true, а также счетчик, показывающий сколько многоугольников находится в списке). Очевидно, что теперь нам надо решить, какой из треугольников расположен ближе к наблюдателю — АВС или DEF. Определение производится путем вычисления значений z из уравнений плоскости для обоих треугольников при у~у и при х, задаваемом пересечением строки г/=у с ребром DE. Эта величина х содержится в элементе для DE в ТАР. В нашем примере треуголь- ник DEF имеет меньшую координату г и поэтому мы его видим. Таким образом, правило закраски DEF действует на всем интервале вплоть до пересечения с ребром ВС, где флаг АВС примет значение false, после чего интервал снова будет «внутри» только одного тре- угольника DEF. Поэтому правило закраски, установленное для DEF, продолжает действовать вплоть до пересечения с ребром FE. На рис. 15.10 показано соотношение между двумя треугольниками
278 Глава 15 г & Рис. 15.11. Три многоугольника. и плоскостью у=у, двумя сплошными линиями обозначены пересе- чения треугольников с плоскостью. Предположим, что за треугольниками АВС и DEF находится большой многоугольник GHIJ (рис. 15.11). Тогда, если при дви- жении вдоль строки у=у, мы пересечем ребро СВ, будем все еще находиться «внутри» многоугольников DEF и GHIJ и,следовательно, вычисления, связанные с определением глубины, будут произво- диться снова. Этих затрат процессорного времени можно избе- жать, если предположить, что многоугольники не могут проникать друг в друга (при моделировании реальных объектов такое допуще- ние вполне приемлемо). Из этого предположения вытекает, что соотношение глубин между DEF и GH1J после выхода из АВС изме- ниться не может, и, мы, следовательно, будем продолжать оставаться «внутри» DEF. Поэтому при выходе из закрываемого многоуголь- ника глубину можно не вычислять, ее требуется определять только в том случае, если мы выходим из закрывающего многоугольника. На рис. 15.12 показаны проникающие друг в друга треуголь- ники. Чтобы правильно использовать алгоритм, введем в рассмот- рение ложное ребро M'L' и тем самым разобьем треугольник KLM на KLL'M' и L'М.М', Кроме того, можно модифицировать алгоритм и при обработке сканирующей строки на ней определять точку проникновения. В другой модификации алгоритма используется когерентность по глубине. Если при обработке некоторой сканирующей строки в ТАР находятся те же ребра, что и при рассмотрении непосредствен- но предшествующей строки, причем в том же порядке, то соотноше- ния глубин остаются прежними и их не надо вычислять. В этом случае видимые интервалы, найденные при обработке предыдущей строки (от АВ до DE и от DE до EF на рис. 15.9), сохраняются и на следующей сканирующей строке. Такая ситуация показана на рис.
Алгоритмы удаления скрытых линий и поверхностей 279 Рис. 15.12. Треугольник KLM прорезает треугольник RST по отрезку L'M'. рис. 15.9, где для обеих сканирующих строк у=у и у=у+1 види- мыми являются интервалы от АВ до DE и от DE до FE. На рис. 15.9 когерентность по глубине теряется при переходе от у=у+1 к z/=y+2, поскольку в ТАР меняется взаимная упорядо- ченность ребер DE и СВ (эта ситуация в алгоритме должна быть предусмотрена). Поэтому видимыми станут другие интервалы, в нашем случае от АВ до СВ и от DE до FE. Хэмлин и Джир [210] показали, как иногда может сохраняться когерентность по глубине, даже если меняется порядок хождения ребер в ТАР. Мы еще не затрагивали вопросов, связанных с обработкой фона. В случае буфера регенерации простейшим способом является на- чальное присвоение пэлам некоторого заданного значения; следо- вательно, алгоритм должен обрабатывать лишь те сканирующие строки, которые пересекают ребра. Другой способ состоит в том, что в описание объекта включается большой квадрат, расположен- ный дальше от точки зрения, чем все остальные многоугольники. Этот квадрат параллелен картинной плоскости и имеет желаемую окраску. Наконец, еще один способ заключается в такой модифика- ции алгоритма, при которой значения пэлов, соответствующие фону, можно непосредственно помещать в буфер регенерации в тех слу- чаях, когда мы не находимся «внутри» многоугольника. 15.7. АЛГОРИТМЫ РАЗБИЕНИЯ ОБЛАСТИ Во всех алгоритмах разбиения области применяется стратегия «разделяй и властвуй», о которой мы уже говорили при рассмотре- нии алгоритмов отсечения отрезков прямых и многоугольников. Таким образом, мы отходим от принципов, лежащих в основе пре- дыдущих алгоритмов. Теперь мы будем исследовать область рисунка на картинной плоскости, и те из многоугольников, расположенных в данной области, видимость которых можно определить достаточно «легко», будут изображаться на экране. В противном случае область разбивается на более мелкие области, и процедура принятия реше- ния рекурсивно применяется к каждой из них. По мере того как
280 Глава 15 Рис. 15.13. Четыре соотношения между многоугольниками и элементом области. а — охватывающий многоугольник; б — пересекающий многоугольник; в — внутренний Многоугольник; г — внешний многоугольник. размеры области сокращаются, каждую область перекрывает все меньшее и меньшее число многоугольников, так что в конце концов решение будет принято. Очевидно, что при таком подходе работа ведется в пространстве изображения. Этот подход основывается на когерентности области, т. е. считается, что в конечном итоге будут найдены такие области изображения, которые содержат не более одного многоугольника. На каждой стадии процесса рекурсивного разбиения проекция каждого многоугольника располагается относительно рассматри- ваемой области одним из следующих четырех способов (рис. 15.13): а) охватывающие многоугольники полностью включают иссле- дуемую (закрашиваемую) область; б) пересекающие многоугольники пересекают область; в) внутренние многоугольники полностью лежат внутри области; г) внешние многоугольники целиком находятся за пределами об- ласти. Очевидно, внешние многоугольники не оказывают влияния на область. Можно также не рассматривать ту часть пересекающего многоугольника, которая лежит за пределами области. Другая же часть, находящаяся внутри области, обрабатывается как и вну- тренний многоугольник. Имеются четыре случая, когда можно непосредственно принять решение относительно области и тем самым прекратить процесс дальнейшего разбиения: 1. Ни один из многоугольников не пересекается с областью, поэтому пэлы области можно окрасить в цвет фона. 2. Имеется либо только один пересекающий многоугольник, либо только один внутренний. Сначала пэлам области присваивается значение фона, а затем многоугольник преобразуется в растровую форму. (На многих дисплеях более удобно вначале весь буфер ре- генерации заполнить значениями фона.) Если многоугольник яв- ляется пересекающим, то растровому преобразованию подвергается лишь та его часть, которая попадает внутрь области.
Алгоритмы удаления скрытых линий и поверхностей 281 б Рис. 15.14. Два примера использования случая 4 в процессе рекурсивного раз- биения. X — пересечение с плоскостью охватывающего многоугольника; о — пересечение с пло- скостью пересекающего многоугольника; * — пересечение с плоскостью внутреннего мно- гоугольника. 3. Имеется лишь один-единственный охватывающий многоугольник и нет ни одного пересекающего или внутреннего многоугольника. Пэлам области присваивается значение охватывающего многоуголь- ника. 4. Имеется сразу несколько пересекающих, внутренних и охваты- вающих многоугольников, причем по крайней мере один из них является охватывающим. В этом случае, чтобы определить, распо- ложен ли охватывающий многоугольник впереди всех других мно- гоугольников, применяется простой тест; вычисляются г-коорди- наты плоскостей всех охватывающих, пересекающих и внутренних многоугольников в четырех угловых точках рассматриваемой об- ласти; если существует охватывающий многоугольник, для которого все четыре такие z-координаты меньше (т. е. ближе к точке зрения), чем любые из других вычисленных z-координат, во все пэлы области
282 Глава 15 Рис. 15.15. Разбиение области на квадраты. можно занести значения, соответствующие охватывающему много- угольнику. Случаи 1, 2 и 3 обнаруживаются легко. Случай 4 более подробно иллюстрируется на рис. 15.14. На рис. 15.14, а все четыре точки пересечения с охватывающим многоугольником расположены бли- же к точке зрения (которая находится в бесконечности на отрица- тельной полуоси zv), чем остальные пересечения. Поэтому вся об- ласть закрашивается в цвет охватывающего многоугольника. На рис. 15.14, б, хотя и кажется, что охватывающий многоугольник находится впереди пересекающего, никакого решения принять нель- зя, поскольку слева плоскость пересекающего многоугольника рас- положена перед плоскостью охватывающего многоугольника. От- метим, что алгоритм Ньюэла, Ньюэла и Санча [341] справляется с этим случаем без дальнейшего разбиения области, если пересекаю- щий многоугольник целиком лежит с той стороны от охватываю- щего многоугольника, которая находится дальше от точки зрения. В рассматриваемом же алгоритме для упрощения задачи разбиение области производится всегда. После того как выполнено разбиение области, необходимо проверить лишь внутренние и пересекающие многоугольники. Ох- ватывающие и внешние многоугольники первоначальной области остаются такими и по отношению к каждой из вновь образованных частей области. Процесс разбиения завершается, когда при умень- шении области достигается разрешение экрана дисплея: при растре
Алгоритмы удаления скрытых линий и поверхностей 203 Рис. 15.16. Разбиение области относительно отмеченных вершин многоугольника. Сначала разбиение производится в вершине А, затем — в вершине В. 512 Х512 делается не более девяти разбиений. Если после выпол- нения максимального числа разбиений ни один из рассмотренных выше четырех случаев не обнаруживается, в центре такой недели- мой области размером с пэл вычисляется глубина для всех остав- шихся многоугольников. Закраску области определяет многоуголь- ник с минимальной координатой z. Кроме того, можно воспользо- ваться несколькими дополнительными уровнями разбиения для устранения лестничного эффекта. При этом определяется такое значение пэла, в котором учитывается сочетание всех видимых в об- ласти многоугольников (разд. 11.7.5). Первый алгоритм разбиения, предложенный Варноком [484], делил область на четыре квадратные подобласти. На рис. 15.15 показана простая сцена и приведены разбиения, необходимые для ее изображения. Числа, стоящие в каждой из подобластей, соответ- ствуют четырем перечисленным выше случаям завершения процес- са разбиения. Незанумерованные области — это те области, к ко- торым ни один из этих случаев применить нельзя. В данном примере глубина процесса разбиения для большей наглядности ограничена пятью уровнями. Широко распространенным вариантом разбиения на одинаковые подобласти является разбиение относительно вершины многоуголь- ника (если существует вершина, попадающая в область) (рис. 15.16). Тем самым делается попытка избежать ненужных разбиений.
284 Глава 15 Рис. 15.17. Разбиение простой сцены относительно треугольника. В другом методе, разработанном Вейдером и Азертоном [490], область экрана разбивается вдоль границ не прямоугольника, а многоугольника. На первом шаге, который не обязателен, но поле- зен для повышения эффективности, производится упорядочение многоугольников в соответствии с некоторым значением г (можно взять минимальную z-координату среди вершин каждого много- угольника). Для начального разбиения, которое выполняется с по- мощью алгоритма, описанного в разд. 11.6.2, выбирается много- угольник, стоящий первым в упорядоченном списке. Например, в случае сцены, показанной на рис. 15.15 и 15.16, был бы взят тре- угольник. Результирующее разбиение прямоугольника на два многоугольника показано на рис. 15.17. Затем, выбирая треуголь- ник в качестве рассматриваемой области и применяя введенную вы- ше терминологию, классифицируем треугольник как охватывающий многоугольник, меньшую часть (А) прямоугольника — как вну- тренний многоугольник, а большую его часть (В) — как внешний многоугольник. После этого обнаруживается случай 4, поскольку охватывающий многоугольник (треугольник) находится далеко впереди внутреннего многоугольника. Поэтому закон закраски треугольника применяется к треугольной области С. По отношению к большей части (В) прямоугольника в качестве охватывающего многоугольника выступает лишь она сама, а два других многоуголь- ника А и С являются внешними. Это характерно для случая 3, и, следовательно, правило закраски прямоугольника применяется к области В. Алгоритм разбиения Бейлера—Азертона позволяет резко сокра- тить число разбиений по сравнению с тем, которое требуют два’дру- гих метода. Однако в этом алгоритме при каждом разбиении выпол- няется больший объем вычислений, чем в других алгоритмах.
Алгоритмы удаления скрытых линий и поверхностей 285 15.8. ЭФФЕКТИВНОСТЬ АЛГОРИТМА Сазерленд, Спрулл и Шумахер [454] показали, что удаление скрытых поверхностей можно рассматривать как процесс сортиров- ки в широком смысле. Это не удивительно, поскольку в этих алго- ритмах нам встречались многие примеры сортировки и поиска. Вы- бор эффективного алгоритма сортировки сильно влияет на быстро- действие алгоритмов удаления скрытых поверхностей. Важно также не злоупотреблять упорядочиванием, так как обычно вполне до- статочно использования когерентности. Например, в алгоритме по- срочного сканирования когерентность сканирующих строк исполь- зуется для того, чтобы избежать полного упорядочения по х для каждой сканирующей строки. В алгоритме Хабшмана и Цукера когерентность кадров применяется для исключения лишних срав- нений при работе с последовательными кадрами мультипликации [226]. В алгоритме сортировки по глубине применяется упорядочение по г, а затем по х и у (с помощью оболочек), поэтому назовем его гхг/-алгоритмом. В алгоритме построчного сканирования выполняет- ся сортировка по у (с использованием групповой сортировки), а по- том по х (вначале путем сортировки вставками, а затем при обработ- ке каждой сканирующей строки с помощью метода «пузырька»), и в заключение производится поиск по z многоугольника, ближай- шего к точке зрения; назовем его z/xz-алгоритмом. При разбиении области проводится параллельная сортировка по х и у, а затем поиск по г, следовательно, это (xy)z-алгоритм. В алгоритме, исполь- зующем z-буфер, непосредственное упорядочение отсутствует, про- изводится лишь поиск по г; назовем его (хуг)-алгоритмом. В работе [454] показано, что порядок выполнения сортировки не имеет значения: упорядочение вначале по у не дает никаких особых преимуществ по сравнению с упорядочением по х или 2 и т. д. Это объясняется тем, что средний объект обладает одинаковой слож- ностью по всем трем направлениям. Нельзя, однако, сказать, что все алгоритмы одинаково эффективны: они различаются тем, насколько действенно применяется когерентность для исключения сортиров- ки, а также тем, насколько целесообразно используется память и время. В табл. 15.1 приведены результаты сравнения производи- тельности рассмотренных нами четырех основных алгоритмов, за- имствованные в работе [454], где отмечается, что, поскольку эти данные являются оценочными, можно пренебречь небольшими раз- личиями в них, однако при этом свободно можно пользоваться срав- нениями по порядку величины между различными алгоритмами,, чтобы получить представление об эффективности применяемых ме- тодов. Алгоритм сортировки по глубине эффективен при небольшом числе многоугольников, поскольку для определения, может ли многоугольник быть преобразован в растровую форму, практиче-
286 Глава 15 ски всегда достаточно простых проверок на перекрытие. С увеличе- нием числа многоугольников требуется применение более сложных тестов и более вероятной станет необходимость в разбиении много- угольника. Алгоритм, использующий z-буфер, обладает постоянной Таблица 15.1. Относительная оценка эффективности четырех алгоритмов удаления скрытых поверхностей Алгоритм Число граней многоугольников в сцене 100 2500 60 000 Упорядочение по глубине р> 10 507 Использование z-буфера 54 54 54 Построчное сканирование 5 21 100 Разбиение области (алгоритм Вар- 11 64 307 нока) ’) Данные нормированы так, что этот элемент принят за единицу. производительностью, так как с ростом числа многоугольников в сцене число пэлов, покрываемых одним многоугольником, умень- шается. Однако такому алгоритму требуется большой объем памяти. Отдельные проверки и вычисления, применяемые в методе разбие- ния области, относительно сложны, поэтому в общем случае этот метод является более медленным, чем остальные. 15.9. АЛГОРИТМЫ ДЛЯ КРИВОЛИНЕЙНЫХ ПОВЕРХНОСТЕЙ Рассмотренные выше алгоритмы применимы лишь к объектам, состоящим из плоских граней. Чтобы воспользоваться любым из них для изображения объектов, ограниченных криволинейными поверхностями, необходимо предварительно аппроксимировать эти объекты большим числом мелких граней. Хотя это можно сделать, часто удобнее работать непосредственно с криволинейными поверх- ностями. Квадратичные поверхности в общем случае являются неплоски- ми и могут быть записаны в аналитическом виде щх24-а2у2 4- a3z2 4- atxy + а5уг+aszx+а7х 4-аау+аЙг4-а10=0. (15.8) Если коэффициенты аг—а(. равны нулю, поверхность вырождается в плоскость. Хорошо известными объектами, состоящими из квад- ратичных поверхностей, являются сфера (одна поверхность), за- крытый цилиндр (три поверхности), закрытый конус (две поверх-
Алгоритмы удаления скрытых линий и поверхностей 287 ности) и эллипсоид (одна поверхность). В работе [303] рассмотрен полный набор программ для описания и изображения объектов, составленных из квадратичных поверхностей. Объект, изображенный на вклейке 14, составлен из квадратичных поверхностей. Вейс [496], Вун [512], Мол [297] и Левин [283] разработали не- сколько алгоритмов, которые позволяют удалять скрытые поверх- ности у объектов, заданных квадратичными поверхностями. В этих алгоритмах определяются пересечения двух квадратичных поверх- ностей, что приводит к уравнению четвертого порядка относительно х, у и z, корни которого находятся численными методами. Левину удалось понизить порядок уравнения до второго путем параметри- зации кривых пересечения. Со сферами, которые являются частным случаем квадратичных поверхностей, работать легче и, кроме того, они заслуживают особого внимания, поскольку молекулы обычно изображаются в ви- де совокупностей раскрашенных в разные цвета сфер (цветная вклад- ка, 15). Существует ряд алгоритмов, предназначенных для изобра- жения молекул [269, 306, 377, 378, 442]. Более универсальными являются параметрические бикубиче- ские поверхности, рассмотренные в гл. 13, поскольку обладают большей общностью и обеспечивают непрерывность касательной на границах куска. Алгоритм, позволяющий изображать такие по- верхности, впервые предложен Кэтмулом [82]. Разбиение куска (по s и по 1) производится до тех пор, пока его проекция на плоскость экрана не станет примерно равной размеру пэла. Определение види- мости такой маленькой области (относительно всех ранее рассмот- ренных кусков) выполняется с помощью алгоритма, использующего z-буфер. Вычисляется закраска этой области, и соответствующее значение помещается в буфер регенерации. Метод Кэтмула не очень быстр, но весьма эффективен. Этот подход оказал значительное влия- ние на выбор направлений дальнейших исследований; примерами могут служить работы [42] и [506]. Блинн и Уиттед разработали два различных алгоритма построч- ного сканирования [46]. Алгоритм Блинна работает непосредствен- но с параметрическим представлением. Для сканирующей строки у—а определяются все значения s и t, удовлетворяющие уравнению z/(s, 0—а=0. (15.9) Затем эти значения используются для вычисления x(s, t) и z(s, 0. К сожалению, уравнение (15.9) не решается в общем виде, поэтому его корни определяются численно с помощью метода Ньютона. В ча- стных случаях, когда корни не существуют, алгоритм не работает. В алгоритме Уиттеда также применяются численные методы в сово- купности с аппроксимациями кривой, расположенной в плоскости хг и задаваемой пересечением плоскости у—а с бикубическим ку- ском поверхности.
288 Глава 15 На сегодняшний день наиболее плодотворным является подход, который основан на адаптивном процессе разбиения бикубических кусков, продолжающемся до тех пор, пока каждый из получаю- щихся в результате деления кусочков не станет достаточно пло- ским. Допустимые отклонения определяются разрешающей способ- ностью дисплея, а также ориентацией подразделяемой области от- носительно картинной плоскости. Поэтому разбиения, в которых нет необходимости, не производятся. После завершения процесса разбиения мелкие многоугольники, задаваемые четырьмя угловыми точками каждого из получившихся в результате деления кусков, обрабатываются при помощи алгоритма построчного сканирования. Тем самым мы получаем возможность одновременно использовать многогранные и бикубические поверхности. Карпентер и Лэйн [46, 279], а также Кларк, используя этот подход, разработали другие алгоритмы, которые отличаются выбо- ром базовых функций, используемых для получения разностных уравнений (последние описывают разбиение кусков поверхности), а также проверками на «спрямленность». В алгоритме Карпентера и Лейна разбиения производятся только в случае необходимости, т. е. когда обрабатываемая сканирующая строка пересекает кусок поверхности. Тем самым в алгоритме Кларка этот процесс выпол- няется заранее, при проведении предварительной обработки. Пер- вый метод существенно экономнее в отношении памяти, однако, используя второй метод, можно обойтись меньшим числом разбие- ний и, кроме того, гарантировать, что в кусок бикубической поверх- ности в процессе разбиения будут внесены разрывы. Развивая идеи, высказанные в работах [12, 306], Уиттед пред- ложил изящный и простой (хотя медленный) алгоритм, позволяю- щий обрабатывать полигональные, бикубические, квадратичные и другие куски (гл. 16). С помощью этого алгоритма вычисляется закраска и выводятся на экран прозрачные и полупрозрачные по- верхности. УПРАЖНЕНИЯ 15.1. Докажите, что преобразование М из разд. 15.2 сохраняет прямые линии, плоскости, соотношения между глубинами. 15.2. Пусть задана плоскость Ax-\-By-\-Cz-]-D=0. Примените к ней преобра- зование М из разд. 15.2 и определите новые значения коэффициентов уравнения плоскости. 15.3. Какой из алгоритмов удаления скрытых поверхностей легко приспосо- бить для устранения лестничного эффекта, возникающего при изображении ребер многоугольника? 15.4. Как расширить алгоритм построчного сканирования, чтобы с его по- мощью можно было образовать многоугольники, имеющие общие ребра? Должны ли эти ребра быть представлены лишь один раз, как общие ребра, или их следует включать в описание каждого из двух многоугольников, которым оии принадле- жат, без какого-либо указания на то, что они общие? Если глубины обоих много- угольников вычисляются относительно их общего ребра, то полученные значения,
Алгоритмы удаления скрытых линий и поверхностей 289 разумеется, будут равны. Какой из многоугольников считается видимым, если сканирующая строка пересекает оба этих многоугольника? 15.5. Алгоритм разбиения области порождает кватернарное дерево (дерево, узлы которого имеют полустепень исхода четыре). Постройте кватернарные дере- вья, соответствующие рис. 15.15 и 15.16. Пометьте все узлы на первом дереве, чтобы показать, как соотносятся квадрат S и треугольник Т с каждым из узлов, т. е. являются ли они внешними, внутренними, пересекающими или охватываю- щими. 15.6. Для каждого из четырех рассмотренных нами алгоритмов удаления скрытых поверхностей покажите, как обрабатываются многоугольники, проникаю- щие друг в друга. Исследуются ли эти ситуации отдельно, как особые случаи, или с ними «справляется» основной алгоритм? 15.7. Рассмотрите тесты 3 и 4 алгоритма сортировки по глубине. Как их можно эффективно реализовать? Рассмотрите проверку знака уравнения плоскости много- угольника Р при подстановке в него каждой из вершин многоугольника Q и наобо- рот. Как определить, какая из сторон плоскости соответствует положительным значениям? 15.8. Какие изменения следует внести в описанные здесь алгоритмы, чтобы невидимые ребра изображались пунктиром? 15.9. Многогранник, рассмотренный кратко в гл. 13, представляет собой зам- кнутый объем, границами которого являются многоугольники. Внутренние углы выпуклого многогранника меньше 180° и, следовательно, если смотреть из произ- вольной точки зрения, то каждая грань многогранника либо полностью видима, либо полностью невидима. Предложите простой тест для определения видимости многоугольников, принадлежащих выпуклому многограннику. В этом тесте долж- ны учитываться направления проецирования и нормали к многоугольникам. Замечание. Чтобы тест давал правильные результаты, все нормали к многоуголь- никам должны быть либо внутренними (направленными внутрь многогранника) либо внешними. С помощью такой проверки можно исключать некоторые грани из дальнейшей обработки алгоритмом удаления скрытых поверхностей. 15.10. Рассмотрите вопрос о возможности преобразования каждого из четы- рех алгоритмов удаления скрытых поверхностей в алгоритмы удаления скрытых линий с тем, чтобы использовать их на векторных устройствах графического вы- вода без применения промежуточного представления в растровой форме. Какие алгоритмы можно преобразовать? Как? Какие алгоритмы не могут быть преоб- разованы? Почему? 15.11. Как использовать эти алгоритмы для работы с многоугольниками, со- держащими отверстия?
Глава 16 Методы закраски 16.1. ВВЕДЕНИЕ После того как скрытые поверхности удалены, все видимые по- верхности необходимо закрасить, учитывая источники света, ха- рактеристики поверхности, а также взаимное расположение и ори- ентацию поверхностей и источников. Основные понятия, исполь- зуемые в этой главе, введены в разд. 14.4. Здесь мы сразу рассмот- рим модели закраски (сначала совсем простые, а затем более слож- ные). 16.2. ДИФФУЗНОЕ ОТРАЖЕНИЕ И РАССЕЯННЫЙ СВЕТ Матовые поверхности обладают свойством диффузного отраже- ния, т. е. равномерного по всем направлениям рассеивания света. Поэтому кажется, что поверхности имеют одинаковую яркость не- зависимо от угла обзора. Для таких поверхностей справедлив закон косинусов Ламберта, устанавливающий соответствие между количеством отраженного света и косинусом угла 0 между направ- лением L на точечный источник света интенсивности 1Р и нормалью N к поверхности (рис. 16.1), т. е. количество отраженного света, воспринимаемое наблюдателем, не зависит от положения наблю- дателя. Освещенность рассеянным светом вычисляется по формуле Id—Ipkdcos 0. (16.1) Значение коэффициента диффузного отражения kd является кон- стантой в диапазоне 0—1 и зависит от материала. Если векторы L и N нормированы, то, используя скалярное произведение, уравне- ние (16.1) можно записать в виде Id=Ipkd(L-N). (16.2) Предметы, освещенные одним точечным источником света, вы- глядят контрастными. Этот эффект аналогичен тому, который можно наблюдать, когда предмет, помещенный в темную комнату, виден при свете направленной на него фотовспышки. В данной ситуации в отличие от большинства реальных визуальных сцен отсутствует рассеянный свет, под которым здесь понимается свет постоянной
Методы закраски 291 Рис. 16.1. Падающий свет и нормаль к поверхности. яркости, созданный многочисленными отражениями от различных поверхностей. Такой свет практически всегда присутствует в реальной обстановке. Даже если предмет защищен от прямых лучей, исходящих от точечного источника света, он все равно будет виден из-за наличия рассеянного света. Правило закраски записывается в виде I—Iaka-{-Ipkd(L-N), (16.3) где рассеянный свет представлен чле- ном 1а и ka определяет количество рассеянного света, которое отражает- ся от поверхностей предмета. Точечный источник света удоб- нее всего расположить в позиции, совпадающей с глазом наблюдателя. Тени в этом случае отсутству- ют, а лучи света, падающие на поверхность, окажутся параллель- ными (в случае центральных проекций после применения преобра- зования, которое описывается матрицей М, определяемой выраже- нием (15.1)). Однако теперь, если две поверхности одного цвета па- раллельны друг другу и их изображения перекрываются, нормали к поверхностям совпадают и, следовательно, поверхности закра- шиваются одинаково и различить их невозможно. Этот эффект мож- но устранить, если учесть, что энергия падающего света убывает пропорционально квадрату расстояния, которое свет проходит от источника до поверхности и обратно к глазу наблюдателя. Обозна- чая это расстояние через /?, запишем I=Iaka+Ipkd(L-N)/R*. (16.4) Однако данным правилом на практике трудно воспользоваться. Для параллельной проекции, когда источник света находится в бес- конечности, расстояние R также становится бесконечным. Даже в случае центральной проекции величина I//?2 может принимать значения в широком диапазоне, поскольку точка зрения часто ока- зывается достаточно близкой к предмету. В результате закраска поверхностей, которые имеют одинаковые углы 0 между N и L, будет существенно различаться. Большей реалистичности можно достичь, если заменить R2 на r+fe, где k — некоторая константа, аг — расстояние от центра проекции до поверхности: I^Iaka+Ipkd(L-N)/(r+k). (16.5) Использование этого правила закраски проиллюстрировано на рис. 16.8. Для представления диффузного отражения от цветных поверх- ностей уравнения записываются отдельно для голубрго, пурпур- ного и желтого света, при этом константы отражения для этих цветов задаются тройкой чисел (kdc, kdm, kdy). Здесь используются
292 Главе 16 дополнительные основные цвета, поскольку отражение света яв- ляется субтрактивным процессом (как показано в гл. 17). Напри- мер, для желтой поверхности kdy—\ ,0, ^dm=0,0 и Zsdc=O,O, т. е. весь желтый свет отражается, в то время как пурпурный и голубой свет полностью поглощается. Когда падающий свет окрашен, то при отражении три его дополнительных основных цвета будут иметь интенсивности, пропорциональные kdc, kdm и kdy соответст- венно, а рассеянный свет имеет ту же окраску, что и точечный источник. Поэтому для голубой компоненты (16 6) Аналогичные уравнения можно записать для пурпурной (/т) и жел- той (1У) компонент. 16.3. ЗЕРКАЛЬНОЕ ОТРАЖЕНИЕ никнет в результате К точечному источнику света Рис. 16.2. Зеркальное отражение Направление отраженного света К точке зрения Зеркальное отражение можно получить от любой блестящей поверхности. Осветите ярким светом яблоко — световой блик воз- го отражения, а свет, отраженный от остальной части яблока, поя- вится вследствие диффузного отра- жения. Отметим также, что в том месте, где находится световой блик, яблоко кажется не красным, а скорее белым, т. е. окрашенным в цвет падающего света. Если мы изменим положение головы, то заметим, что световой блик тоже сместится. Это объясняется тем, что блестящие поверх- ности отражают свет неодинаково по всем направлениям. От тща- тельно отполированной поверхности (такой, как идеальное зеркало) свет отражается только в том направлении, для которого углы падения и отражения совпадают. Это означает, что наблюдатель сможет увидеть зеркально отраженный свет только в том случае, если угол а (рис. 16.2) равен нулю. Для неидеальных отражающих поверхностей, таких, как яблоко, интенсивность отраженного света резко падает с ростом а. В модели, предложенной Фонгом [63], быст- рое убывание интенсивности описывается функцией cos" а, где п обычно лежит в диапазоне 1—200 в зависимости от вида поверхно- сти. Для идеального отражателя п бесконечно велико. Такая модель зеркального отражения является разумным приближением, однако в ее основе лежит эмпирическое наблюдение, а не фундаментальное понимание процесса зеркального отражения. Количество падающего света, которое зеркально отражается В случае реальных материалов, зависит от угла падения 9. Обозна-
Методы закраски 293 чим зеркально отражаемую долю света через W(0), тогда I = taka +t^[^cos0 + IF (0) cos"a]. (16.7) Если векторы направления отраженного света и направления к точ- ке зрения R и V нормированы, то cosa=Z?-V. Часто в качестве IF(0) служит константа ks, которая выбирается таким образом, чтобы получающиеся результаты были приемлемы с эстетической точки зрения. В этом случае уравнение (16.7) можно записать сле- дующим образом: l-iaka+-^f-k[kd(L-N) + ks(R-Vn (16.8) Уравнение для голубого цвета будет иметь следующий вид: ic = iackac+-^klk^(L-^+kAR-vn (16.9) Аналогичные уравнения можно записать для пурпурного и желтого цветов. Отметим, что ks не зависит от цвета поверхности. Если источник света расположен в бесконечности, для заданного многоугольника произведение L-N является константой, a R-V меняет значение в пределах многоугольника. В случае бикубиче- ских поверхностей и источника света, не находящегося в бесконеч- ности, произведение L- N, так же как и R- V, принимает различные значения на разных участках поверхности. Для вычисления этих скалярных произведений для каждого пэла сканирующей строки может потребоваться много процессорного времени, поэтому Фонг разработал эффективный метод их пошагового вычисления вдоль сканирующей строки. Модель Торрэнса — Спэрроу [467, 468), созданная инженерами- светотехниками, представляет собой теоретически обоснованную модель отражающей поверхности в противоположность получен- ной эмпирически модели Фонга. В этой модели предполагается, что поверхность является совокупностью микроскопических граней, каждая из которых — идеальный отражатель. Ориентация любой грани задается функцией распределения вероятностей Гаусса. Гео- метрические свойства граней, а также направление света (в пред- положении, что свет исходит из бесконечно удаленного источника и, следовательно, все лучи параллельны) определяют интенсивность и направление зеркального отражения как функции lp, N, L и V. Эксперименты подтверждают хорошее соответствие между реальным отражением и тем, которое предсказано этой моделью. На рис. 16.3 показана совокупность граней, из которых в модели учитываются только грани, отражающие свет в направлении на- блюдателя (грани а, си е). Грани а, сие иллюстрируют три способа отражения, которые рассматриваются в модели. Грань а целиком
294 Глава 16 Рис. 16.3. Отражение световых лучей от поверхности, составленной из микрогра- ней. подвергается воздействию света, и все лучи отражаются в направ- лении наблюдателя. Часть грани с, выделенная штриховой линией, защищена от падающего света. Отражение в направлении наблю- дателя производится только с освещенных участков этой грани. Грань е полностью подвергается воздействию лучей света, однако некоторые из отраженных лучей попадают на поверхность f и отра- жаются от нее в некотором другом направлении, составляя часть диффузного отражения. Модель Торрэнса — Спэрроу была применена в машинной гра- фике Блинном. Он уточнил некоторые математические аспекты и сравнил ее с моделью Фонга [41]. Блинн построил изображения, которые показаны на рис. 16.4 и 16.5 и иллюстрируют отраженный от поверхности свет для углов падения 30 и 70° соответственно. На каждом из рисунков вертикальная стрелка обозначает нормаль к поверхности, входящая стрелка — направление световых лучей, Рис. 16.4. Сравнение моделей Фонга (а) и Торрэнса — Спэрроу (б) для угла па- дения света 30°. (С разрешения Университета Utah.)
Методы закраски 295 Рис. 16.5. Сравнение моделей Фонга (а) и Торрэнса — Спэрроу (б) для угла па- дения света 70V(C разрешения Университета Utah.) а выходящая стрелка — направление отражения для идеального отражателя. Округлая часть каждой фигуры представляет диффуз- ное отражение, а выпуклость на ней — зеркальное отражение. Для случая 30° изображения почти одинаковы, а для случая 70° модель Троубриджа — Рейтца1’ обеспечивает значительно более высокое зеркальное отражение, причем максимум достигается при угле, большем угла падения. На изображении (рис. 16.6), также полу- ченном Блинном, отчетливо обнаруживается различие между визу- альными эффектами, порождаемыми двумя моделями, при удалении источника света от точки зрения в сторону от металлической сферы. Дальнейшие поиски способов получения реалистичных изобра- жений ведут к разработке более сложных моделей закраски [1021. В следующем разделе показано, как применять любую из моделей закраски к поверхностям, заданным полигональными сетками. 16.4. ЗАКРАСКА ПОЛИГОНАЛЬНОЙ СЕТКИ Существуют три основных способа закраски объектов, заданных полигональными сетками. В порядке возрастания сложности ими являются: однотонная закраска, закраска, основанная на интер- Ч Третья рассматриваемая Блинном в работе [41] модель отражающей поверх- ности является модификацией модели Торрэнса — Спэрроу. В ней предполагает- ся, что поверхность описывается совокупностью микроскопических граней, каж- дая из которых является эллипсоидом вращения. Этот метод лучше обоснован как экспериментально, так и теоретически и, кроме того, более эффективен с вычисли- тельной точки зрения. Поэтому при построении реальных изображений использу- ется именно этот метод (см. также упражнение 16.2).— Прим, перев.
2<М> Глава 16 Рис. 16.6. Сравнение моделей Фонга (а) и Торрэнса — Спэрроу (6) на примере металлической поверхности, освещаемой источником света с меняющимся направ- лением освещения. поляции значений интенсивности, и закраска, построенная на ос- нове интерполяции векторов нормали. В каждом из этих случаев может быть использована любая из моделей закраски, описанных в разд. 16.2 и 16.3. Напомним, что при цветной закраске требуется рассматривать не одно уравнение, а три уравнения. При однотонной закраске вычисляется один уровень интенсив- ности, который используется для закраски всего многоугольника. При этом предполагается, что: 1. Источник света расположен в бесконечности, поэтому произ- ведение N-L постоянно на всей полигональной грани. 2. Наблюдатель находится в бесконечности, поэтому произведе- ние N-V постоянно на всей полигональной грани. 3. Многоугольник представляет реальную моделируемую по- верхность, а не является аппроксимацией криволинейной поверх- ности. Если какое-либо из первых двух предположений оказывается неприемлемым, можно воспользоваться усредненными значениями L и V, вычисленными, например, в центре многоугольника. Последнее предположение в большинстве случаев не выпол- няется, но оказывает существенно большее влияние на получаемое изображение, чем два других. Влияние состоит в том, что каждая из видимых полигональных граней аппроксимированной поверхности хорошо отличима от других, поскольку интенсивность каждой из этих граней отличается от интенсивности соседних граней. Разли- чие в окраске соседних граней хорошо заметно вследствие эффекта полос Маха, открытого Махом в 1865 г. и подробно описанного в ра- боте [384]. Этот эффект является одной из причин слишком резкого перепада интенсивности на всех граничных ребрах, на которых воз- никает нарушение непрерывности изменения самой величины ин- тенсивности или ее производной. На рис. 16.7 для двух случаев
Методы закраски 297 а б Рис. 16-7. Эффект полос Маха: реальная (сплошные линии) и кажущаяся (штрихо- вые линии) интенсивности. показаны действительные и кажущиеся изменения интенсивности вдоль поверхности, вызванные латеральным торможением рецеп- торов глаза, реакция на свет которых подвергается воздействию со- седних рецепторов, обратно пропорциональному расстоянию до каждого из рецепторов. Рецепторы, расположенные непосредствен- но на границе перепада интенсивностей с более яркой ее стороны, подвергаются более сильному раздражению, чем те, которые на- ходятся дальше от границы. Это объясняется тем, что они меньше затормаживаются своими соседями, находящимися с той стороны, которая темнее. Аналогично рецепторы, расположенные непосредст- венно на границе перепада интенсивности с более темной ее сторо- ны, будут подвергаться меньшему воздействию, чем те, которые находятся в той же темной области, но дальше от границы. Причина здесь в том, что эти рецепторы подвергаются более сильному тор- можению от своих соседей с яркой стороны границы. Из рис. 16.8, б, на котором показан однотонно закрашенный автомобиль, хорошо видно влияние эффекта полос Маха. Даже несмотря на то что полигональные куски хорошо различимы, изоб- ражение в этом случае существенно более реалистично, чем состав- ленное из ребер многоугольников (рис. 16.8, а). Метод закраски, который основан на интерполяции интенсив- ности и известен как метод Гуро (по имени его разработчика) [194], позволяет устранить дискретность изменения интенсивности. На рис. 16.8, в показан автомобиль, закрашенный по этому методу. Гребень интенсивности, проходящий с постепенным ослаблением по капоту от места водителя по направлению к крылу, является полосой Маха, которая обусловлена быстрым изменением наклона кривой интенсивности. Метод Гуро не позволяет полностью устра- ’ нить перепады интенсивности. Процесс закраски по методу Гуро осуществляется в четыре эта- па. На первом этапе вычисляются нормали к поверхности, на вто- ром определяются нормали в вершинах путем усреднения нормалей по всем полигональным граням, которым принадлежит вершина
298 Глава 16 Рис. 16.8. Корпус автомобиля, изображенный тремя способами. (С разрешения Университета Utah.) а — контуры многоугольника; б — однотонная закраска; в — закраска методом Гуро. (рис. 16.9). Если предполагается, что ребро видимо (как в случае соединения крыла самолета с фюзеляжем), определяются две нор- мали в вершинах (по одной с каждой стороны ребра) путем отдель- ного усреднения нормалей к многоугольникам с каждой стороны ребра. На третьем этапе, используя нормали в вершинах и приме- няя произвольный метод закраски, вычисляются значения интен- сивности в вершинах. И наконец, на четвертом этапе каждый много- угольник закрашивается путем линейной интерполяции значений интенсивностей в вершинах сначала вдоль каждого ребра, а затем и между ребрами вдоль каждой сканирующей строки (рис. 16.10). Интерполяция вдоль ребер легко объединяется с алгоритмом удаления скрытых поверхностей, построенным на принципе по- строчного сканирования. Для всех ребер запоминается начальная интенсивность, а также изменение интенсивности при каждом единичном шаге по координате у. Заполнение видимого интервала на сканирующей строке производится путем интерполяции между значениями интенсивности на двух ребрах, ограничивающих ин-
Методы закраски 299 тервал. Для цветных объектов отдельно интерполируется каждая из компонент цвета. В методе закраски, разработанном Фонгом [63], используется интерполяция вектора нормали N к поверхности вдоль видимого интервала на сканирующей строке внутри многоугольника, а не интерпо- ляция интенсивности. Интерполяция выполняется между начальной и ко- нечной нормалями, которые сами тоже являются результатами интерполяции вдоль ребер многоугольника между нормалями в вершинах. Нормали в вер- шинах в свою очередь вычисляются так же, как в методе закраски, построенном на основе интерполяции интенсивности. Как и выше, интерполяцию вдоль ребер можно выполнить поэтапно, вычисляя все три компоненты вектора нормали при переходе от каждой сканирующей строки к следующей. В каждом пэле вдоль сканиру- ющей строки новое значение интенсив- ности вычисляется с помощью любой Рис. 16.9. Нормали к вер- шинам: Nv = (Л^+#2+М3+ модели закраски. За- метные улучшения по сравнению с интерполяцией интенсивности наблюдаются в случае использования модели зеркального отраже- ния, так как при этом более точно воспроизводятся световые блики. Однако даже если зеркальное отражение не используется, интерпо- ляция векторов нормали приводит к более качественным резуль- татам, чем интерполяция интенсивности, поскольку аппроксимация нормали в этом случае осуществляется в каждой точке. В резуль- тате уменьшаются трудности, связанные с полосами Маха, однако значительно возрастают расходы. Рис. 16.10. Интерполяция значений интенсивности вдоль ребер многоугольника: 1а представляет собой интерполяцию значений 1\ и /2; I/, — интерполяцию зна- чений /1 и /3; Iр — интерполяцию значений 1а и /&.
300 Глава 16 Чтобы закрасить куски бикубической поверхности, для каждого пэла, исходя из уравнений поверхности (гл. 13), вычисляется нор- маль к поверхности. Этот процесс тоже достаточно дорогой. Затем с помощью любой модели закраски определяется значение интен- сивности. Однако прежде чем применить метод закраски к плоским или бикубическим поверхностям, необходимо иметь информацию о том, какие источники света (если они имеются) в действительности освещают точку. Поэтому мы должны рассматривать также и хени. 16.5. ТЕНИ Алгоритмы затенения в случае точечных источников света иден- тичны алгоритмам удаления скрытых поверхностей! В алгоритме удаления скрытых поверхностей определяются поверхности, кото- рые можно увидеть из точки зрения, а в алгоритме затенения выде- ляются поверхности, которые можно «увидеть» из источника света. Поверхности, видимые как из точки зрения, так и из источника света, не лежат в тени. Те же поверхности, которые видимы из точ- ки зрения, но невидимы из источника света, находятся в тени. Эти рассуждения можно легко распространить на случай несколь- ких источников света. Отметим, однако, что, используя такой про- стой подход, нельзя смоделировать тени от распределенных источ- ников света. При наличии таких источников потребуется вычислять как тени, так и полутени. Поскольку алгоритмы затенения и удаления скрытых поверх- ностей одинаковы, представляется возможным обрабатывать описа- ние объекта, используя лишь один из этих алгоритмов, последова- тельно применяя его к точке зрения и к каждому из точечных источ- ников света. Совокупность полученных результатов позволяет опре- делить, какие части объекта видимы наблюдателю и какие видны из одного или нескольких источников света. На основании этой информации осуществляется закраска сцены. Если правильно орга- низовать вычислительный процесс, определение теней можно прово- дить лишь один раз для серии сцен, которые состоят из одних и тех же объектов, рассматриваемых с различных точек зрения. Источ- ники света предполагаются неподвижными относительно объектов. Все это оказывается возможным потому, что тени не зависят от по- ложения точки зрения. В работе [109] рассмотрено несколько способов построения теней и прежде всего для полигональных объектов. В одном из способов [16] к объекту добавляется второй, компланарный ему многоуголь- ник, совпадающий с видимой (из источника света) частью много- угольника, принадлежащего объекту, если какой-либо из принад- лежащих объекту многоугольников полностью или частично видим из источника света. Выделение второго многоугольника производит- ся с помощью метода отсечения многоугольников (гл. 11). Эти много-
Методы закраски 301 угольники детализации по- верхности не принимаются во внимание при удалении скры- тых поверхностей, однако используются при закраске. Если закрашивается часть многоугольника, которая ви- дима из точки зрения и по- крыта одним из таких много- угольников, следует учиты- вать как диффузное, так и зеркальное отражение, а так- же рассеянный свет. Та часть многоугольника, которая ви- дима из точки зрения, но не покрыта многоугольником де- тализации поверхности, нахо- дится в тени и на ее закраску влияет только рассеянный свет. Изображение на вклей- ке 17 построено именно та- ким способом. На рис. 16.11 „ ,, п , „ г Рис. 16.11. Добавление многоугольников показаны многоугольники де- к Kygy с целью выделения частей, осве- тализации (образовавшиеся щенных источником света. на двух поверхностях куба) при частичном затенении треугольником. Многоугольники детали- зации покрывают те части куба, которые видимы из источника света. При другом способе построения теней, называемом трассирова- нием лучей, рассматриваются поверхности, которые как пропуска- ют, так и отражают свет. Этот метод описан ниже. 16.6. ПОВЕРХНОСТИ, ПРОПУСКАЮЩИЕ СВЕТ Поверхности могут обладать не только свойствами зеркального и диффузного отражения, но и свойствами направленного и диффуз- ного пропускания. Направленное пропускание света происходит сквозь прозрачные вещества (например, стекло или отшлифованный люциит). Через них обычно хорошо видны предметы, даже несмотря на то что лучи света, как правило, преломляются, т. е. отклоняются от первоначального направления. Диффузное пропускание света происходит сквозь просвечивающие материалы (например, замерз- шее стекло), в которых поверхностные или внутренние неоднород- ности приводят к беспорядочному перемешиванию световых лучей. Поэтому когда предмет рассматривается через просвечивающее ве- щество, его очертания размыты.
302 Глава 16 Диффузному пропусканию света исследователи уделяли мало внимания в отличие от направленного пропускания, которое моде- лировалось несколькими способами. В простейшем из них прелом- ление не учитывается совсем и, следовательно, световые лучи пере- секают поверхность без изменения направления. Таким образом, все, что видимо на луче зрения при его прохождении через прозрач- Рис. 16.12. Преломление. Рис. 16.13. Поперечное сечение трех многоугольников плоскостью постоян- ного значения yv. Многоугольник 2 виден сквозь прозрачный многоуголь- ник 1. ную поверхность, геометрически также принадлежит этому лучу. При наличии преломления геометрические и оптические лучи зре- ния не совпадают. Предмет А, показанный на рис. 16.12, будет видимым сквозь прозрачный объект вдоль обозначенного луча зре- ния в том случае, если преломление учитывается. Если же прелом- ление игнорируется, видимым окажется предмет В. Для моделирования пропускания света без преломления можно воспользоваться несколькими алгоритмами удаления скрытых по- верхностей. Из рассмотренных в гл. 15 четырех алгоритмов только алгоритм, использующий z-буфер, нельзя использовать для этой цели, поскольку поверхности в нем обрабатываются в произволь- ном порядке. Если используется алгоритм построчного сканирова- ния и передний многоугольник оказывается прозрачным, опреде- ляется ближайший из других многоугольников, внутри которых находится сканирующая строка (рис. 16.13). Уровень закраски оп- ределяется как взвешенная сумма уровней, вычисленных для каж- дого из двух многоугольников: /=Их+(1-Л)/а. (16.10)
I Методы закраски 303 Рис. 16.14. Дерево, построенное в результате трассирования одного луча в на- правлении наблюдателя. Параметр k характеризует «прозрачность» многоугольника 1: если k=0, многоугольник абсолютно прозрачен. Если же k=l, много- угольник 1 непрозрачен и не пропускает свет. Уиттед [500] и Кэй [259] разработали простые, но мощные под- ходы, основанные на алгоритмах трассирования лучей [12, 303]. Аналогично тому как Блинн с успехом применил теоретическую модель зеркального отражения, Уиттед и Кэй использовали основы оптики. Рассмотрим кратко подход Уиттеда, который является бо- лее общим (но и более сложным с вычислительной точки зрения), чем подход Кэя. Его основная идея заключается в трассировании световых лучей и определении, какие из этих лучей попадают в точ- ку зрения. К сожалению, из каждой точки источника света исходит бесконечное число лучей, причем большинство из них никогда не достигает точки зрения. Поэтому трассирование начинается из точки зрения и лучи отслеживаются в обратном направлении через каждый пэл к их источнику. Луч света*, падающий на поверхность, в общем случае разделяется на три части: диффузно отраженный свет, зеркально отраженный свет и пропущенный (и, следовательно, преломленный) свет. Аналогично луч света, исходящий от поверх- ности объекта, в общем случае является суммой составляющих от трех источников. Это означает, что каждый раз, когда луч исходит от объекта, возможно появление трех новых лучей, которые должны быть оттрассированы. К сожалению, диффузное отражение приво- дит к появлению бесконечного числа лучей, поэтому трассируются только лучи, появляющиеся в результате зеркального отражения и преломления. Для моделирования рассеянного и диффузного све- та используется уравнение (16.3). На рис. 16.14 приведено дерево, построенное в процессе трасси- рования некоторого луча в обратном направлении: 5г является све- товым лучом, падающим на поверхность i под таким углом, что луч
304 Глава 16 зеркально отражается и уходит от поверхности как часть выходя- щего луча. Аналогично представляет собой световой луч, падаю- щий на поверхность i таким образом, что он пропускается и покида- ет поверхность, будучи частью выходящего луча. Каждый узел дерева соответствует поверхности. После того как дерево полностью построено, вычисляются в каждом из его концевых узлов интенсив- ности, которые затем используются для определения интенсивно- стей их родительских узлов и так до тех пор, пока не будет достиг- нут корневой узел дерева. В обратном направлении трассироваться может бесконечное число лучей, однако на самом деле трассируются только те из них, которые проходят через точку зрения (т. е. центр проекции) и угло- вые точки пэлов. Этим можно воспользоваться для устранения лестничного эффекта, вычисляя интенсивность пэла путем усредне- ния значений интенсивностей в его углах. Если четыре луча, про- ходящие через угловые точки пэла, образуют в пространстве объем, в котором содержится много мелких деталей, то, чтобы упростить процесс устранения лестничного эффекта, пэл подразделяется и производится трассирование дополнительных лучей. Если разрешение дисплея составляет N>'M пэлов, трассируется по меньшей мере (У+ 1)(M+1) лучей. Каждый луч необходимо про- верить на пересечение с каждым объектом сцены. Проверка уско- ряется, если воспользоваться трехмерными прямоугольными обо- лочками вокруг каждого из объектов. Сам объект проверяется и оп- ределяются точки пересечения только в тех случаях, когда луч пересекает оболочку. Если пересечение найдено, проверяются свой- ства поверхности, чтобы определить, нужно ли расщеплять луч. Каждый из получившихся лучей также трассируется путем построе- ния дерева, описанного выше. Однако даже при использовании оболочек трассирование лучей представляет собой довольно мед- ленный процесс (самый медленный из рассмотренных выше процес- сов). На вклейке 20 показаны результаты работы этого алгоритма. Совершенствуя метод трассирования лучей, можно добиться увеличения его быстродействия за счет использования когерент- ности или других свойств изображаемых объектов. Трассирование лучей вполне пригодно для параллельной обработки, поскольку лучи могут обрабатываться независимо друг от друга. Поэтому можно ожидать аппаратных реализаций на основе СБИС. 16.7. ДЕТАЛИЗАЦИЯ ПОВЕРХНОСТИ До сих пор мы рассматривали применение алгоритмов закраски к плоским или бикубическим поверхностям и получали очень глад- кие и однородные поверхности, совсем не такие, как большинство поверхностей, которые мы видим и осязаем. Существует два типа детализации поверхности: цвет и фактура. В результате применения
Методы закраски 305 Рис. 16.15. Отображение массива узора на поверхность объекта и на экран. Ус- редненное значение элементов массива узора помещается в пэл. к гладкой поверхности детализации цветом форма поверхности не изменяется, если же производится детализация фактурой — по- верхность становится шероховатой. Детализацию цветом на грубом уровне можно легко осуществить путем введения многоугольников детализации поверхности, чтобы выделить особенности (такие, как двери, окна и надписи) на основ- ном многоугольнике (например, на стене здания). Многоугольники детализации поверхности лежат в одной плоскости с основными многоугольниками и так помечены в структуре данных, чтобы ал- горитм удаления скрытых поверхностей мог присвоить им более высокие приоритеты, чем основным многоугольникам. Многоуголь- ники детализации поверхности, которые описывают тени, учитыва- ются отдельно (разд. 16.5). По мере того как детализация цветом становится более тонкой и сложной, непосредственное моделирование при помощи много- угольников становится менее практичным. Другой подход — отоб- ражение оцифрованной фотографии деталей на поверхность — был впервые предложен Кэтмулом [81] и усовершенствован Блинном и Ньюэлом [40]. Другие варианты этого метода описаны в работах [9, 132]. Основная идея метода состоит в отображении массива узо- ра, представляющего собой оцифрованное изображение, на плоскую или криволинейную поверхность (разд. 11.8.4). Значения из мас- сива узора используются для масштабирования диффузной компо- ненты интенсивности. Один пэл на экране может покрывать несколько элементов мас- сива узора. Чтобы избежать проблем, связанных с лестничным эф- фектом, необходимо учитывать все затрагивающие пэл элементы. Для этого определяются четыре точки в массиве узора, которые отображаются в четыре угла пэла на экране. Точки в массиве узора соединяются, и образуется четырехсторонний многоугольник. Зна- чения попадающих в него элементов взвешиваются с учетом доли каждого элемента, содержащейся в многоугольнике, и затем сум-
306 Глава, 16 Рис. 16.16. Фотография, отображенная на бикубическую поверхность (цилиндр). (С разрешения Э. Кэтмула.) мируются. Как показано на рис. 16.15, отображение производится в две стадии: фиксированное отображение рисунка на поверхность объекта и затем видовое преобразование объекта на экран. Пример отображения фотографии на поверхность приведен на рис. 16.16. Отображение массивов узора влияет на расцветку поверхности, однако поверхность продолжает казаться геометрически гладкой. Существует два способа нанесения на поверхности деталей факту- ры. В первом из них, разработанном Блинном [44], непосредствен- ное геометрическое моделирование фактуры не производится, и тем не менее получается очень хороший визуальный эффект. Блинн показал, что реальную форму неровностей можно не моделировать, и предложил внести возмущения в нормаль к поверхности до ее использования в модели закраски, которые служили бы отражением небольших неровностей на поверхности. Данный способ приводит к построению не совсем реалистических изображений, поскольку фактура не воздействует на силуэтные ребра фактурированных объ- ектов, но в общем случае это вполне приемлемо. На вклейках 18 и 19 показано наложение фактур: случайной — на тор и регуляр- ной — на ягоду клубники. Второй метод, предложенный независимо Карпентером, а также Фурнье и Фасселом и изложенный в работе [77], основывается на использовании фрактальных (fractal) поверхностей, т. е. класса нерегулярных форм, задаваемых вероятностным образом и хорошо описывающих многие реальные формы, такие, как рельефы мест-
Методы закраски 307 Рис. 16.17. Разбиение четырехугольника (закрашенного) на четыре четырехуголь- ника меньшего размера. Пять точек определяются с использованием случайной функции. При рекурсивном применении процесс порождает нерегулярные по- верхности. ности, береговые линии, сети рек, хлопья снега и ветви деревьев (вклейки 21а и 216). На рис. 216 показано довольно реалистическое изображение остроконечной горы, созданное в первую очередь пу- тем аппроксимации горы при помощи сетки четырехугольников, ко- торые не обязательно являются плоскими. Каждый из них затем некоторое число раз рекурсивно подразделяется, чтобы создать неровный, с зазубринами, рельеф местности. Разбиение четырех- угольника показано на рис. 16.17: четыре ребра первоначального (закрашенного) четырехугольника разбиваются с применением слу- чайной функции, в результате чего вычисляются точки Ръ Рг, Р3 и Pt. С помощью этих точек, а также случайной функции находится точка Р5, и затем определяются четыре новых четырехугольника. Таким образом, из начальной аппроксимации получается множест- во четырехугольников. Наконец, производится удаление скрытых поверхностей и применяется соответствующая модель закраски. УПРАЖНЕНИЯ 16.1. При закраске методом Гуро, основанном на линейной интерполяции, полосы Маха могут появляться в тех случаях, когда имеются большие изменения наклона кривой, описывающей значение интенсивности в зависимости от расстоя- ния. Разработайте метод, использующий интерполяцию более высокого порядка вдоль сканирующей строки, который позволил бы устранить подобные нарушения непрерывности. 16.2. Исследуйте модели закраски Торрэнса — Спэрроу и Троубриджа — Рейтца [41, 45]. Можно ли в этом случае воспользоваться интерполяцией вектора, нормали, как в модели Фонга? 16.3. Как можно модифицировать алгоритмы удаления скрытых поверхнос- тей, построенные на основе сортировки по глубине и подразделении области, чтобы с их помощью можно было изображать прозрачные повехности в отсутствие пре- ломления? Почему в эти алгоритмы трудно включить преломление?
308 Глава 16 16.4. Почему с помощью алгоритма, использующего г-буфер, нельзя обра- батывать прозрачные поверхности? 16.5. Разработайте алгоритм, который позволял бы эффективно определять, пересекает лн прямая трехмерную сплошную прямоугольную оболочку, задавае- мую Хщ|п, Xmax, l/tnin, Утах> гт1п и гшах- 16.6. Трехмерной оболочкой может служить сфера, внутри которой полностью содержится объект. Разработайте алгоритм, который позволил бы эффективно определять, пересекает ли прямая сферу радиусом г с центром в точке (Хо, tfo, гй). 16.7. Сравните по эффективности алгоритмы, разработанные в упр. 16.5 и 16.6. Каким из них следует воспользоваться в алгоритме трассирования лучей?
Глава 17 Цвет в машинной графике 17.1. ВВЕДЕНИЕ Цветные и черно-белые изображения стали неотъемлемой частью современной машинной графики благодаря бурному развитию раст- ровых устройств. Цвет — чрезвычайно сложная проблема как для физики, так и для физиологии. Можно назвать немало людей, про- фессиональная карьера которых неразрывно связана с развитием теории цвета, методов его измерения, стандартов. И тем не менее нет ни одной теории восприятия цвета человеком, которую можно было бы признать универсальной. В этой короткой главе трудно привести хотя бы краткий обзор работ по цвету. Мы поставили дру- гую цель — ознакомить читателя с теми понятиями цвета, которые имеют самое непосредственное отношение к машинной графике. Читатели, желающие углубить свои знания в этой области, могут обратиться к обширной литературе о цвете, например к работам [227, 250, 4861. Цвет предмета зависит не только от самого предмета, но также и от источника света, освещающего предмет, и от системы человече- ского видения. Более того, одни предметы отражают свет (стена, доска, бумага), а другие его пропускают (целлофан, стекло). Если поверхность, которая отражает только синий свет, освещается крас- ным светом, она будет казаться черной. Аналогично, если источник зеленого света рассматривается через стекло, пропускающее толь- ко красный свет, он тоже покажется черным. Чтобы не сталкивать- ся с подобными осложнениями, мы сначала рассмотрим ахромати- ческие цвета, т. е. цвета, которые называются черным, темно-се- рым, светло-серым и белым. 17.2. АХРОМАТИЧЕСКИЙ ЦВЕТ. ИНТЕНСИВНОСТЬ Ахроматические цвета не дают тех цветовых ощущений, которые ассоциируются с красным, синим, желтым и т. д. цветом. Ахрома- тический свет — это то, что мы видим на экране черно-белого теле- визора. Единственным атрибутом ахроматического света является интенсивность или количество. С интенсивностью можно сопоста- вить скалярную величину, определяя черное как 0, а белое как 1. Тогда средне-серому свету будет соответствовать значение 0,5. На экране черно-белого телевизора каждый пэл может иметь много равных уровней серого. На печатающих устройствах (АЦПУ),
310 Глава 17 в
Цвет в машинной грефике ЭИ перьевых и электростатических графопостроителях можно получить только два уровня: белый (или светло-серый) соответствует бумаге, а черный (или темио-серый) — чернилам или красителю, наносимым на бумагу. Существуют методы (ниже они обсуждаются), позволяю- щие на таких сугубо двухуровневых (бинарных) устройствах по- лучать дополнительные уровни интенсивности. Возникает естественный вопрос: сколько же уровней интенсив- ности достаточно? Когда мы говорим «достаточно», то имеем в виду число уровней, необходимое для воспроизведения черно-белой фотографии с непрерывно изменяющимся тоном и получения ре- продукции, которая воспринималась бы как непрерывная. На рис. 17.1, а показана фотография с непрерывным тоном, а на рис. 17.1,6—е — ее репродукции при 4, 8, 16, 32 и 64 уровнях. При 4 и 8 уровнях появляются явные контуры (оконтуривание): резкий переход от одного уровня интенсивности к другому. Контуры едва заметны при 32 уровнях и совершенно исчезают при 64 уровнях, Таким образом, 64 уровней интенсивности достаточно для воспроиз- ведения черно-белых изображений непрерывного тона без оконту- ривания. Однако, когда некоторые изображения, синтезированные на ЭВМ, показываются на растровом дисплее с 128 уровнями интен- сивности, контуры все-таки проявляются; по-видимому, иногда может требоваться и 256 уровней интенсивности. 17.2.1. Выбор интенсивностей. Гамма-коррекция Какие же 256 уровней интенсивности должны использоваться? Разумеется, мы не будем брать 128 уровней в диапазоне 0—0,1 и еще 128 уровней в диапазоне 0,9—1,0. Переход от 0,1 к 0,9, не- сомненно, будет заметен и вызовет оконтуривание. Можно было бы распределить уровни равномерно в диапазоне 0—1, но тогда не была бы учтена важная характеристика глаза — его чувствительность к отношению уровней интенсивности, а не к их абсолютным значе- ниям. Действительно, мы воспринимаем различие в интенсивностях 0,10 и 0,11 так же, как различие в интенсивностях 0,50 и 0,55. Сле- довательно, распределение уровней интенсивности должно быть не линейным, а логарифмическим. Имея 256 уровней интенсивности (в том числе наименьшую достижимую интенсивность /0 и макси- мальную интенсивность 1,0), где каждая следующая интенсивность в г раз больше предыдущей, можно написать соотношения: j — j J = г 1 1 =. г 1 — r2I Т =г'Ч I =г™4 =1 Рис. 17.1. Фотография (а) с непрерывно-изменяющимся тоном и ее репродукции, полученные на дисплеях с 4 уровнями интенсивности (б); с 8 уровнями (в); с 16 уровнями (г) (на лице все еще заметны контуры, начинают проявляться мелкие детали волос); с 32 уровнями (б) и с 64 уровнями (е) (отличия от рис. гиб едва за- метны). (С разрешения Дж. Джарвиса, Bell Laboratories.)
312 Глава 17 Отсюда / 1 \ 1/255 (255-Л/255 . r = ^7-j и 7,= /0 , 0^/<255. (17.1) Передать интенсивности, определенные соотношением (17.1), на ЭЛТ совсем не просто, а получить (зафиксировать) их на фото- или кинопленке еще сложнее. Причина в том, что нелинейность свойственна и ЭЛТ, и пленке. Так, интенсивность свечения люмино- фора зависит от числа электронов N в луче и определяется соотно- шением: I=kNv, (17.2) где k и у — константы. Число электронов пропорционально напря- жению на управляющей сетке, которое в свою очередь пропорцио- нально заданному для пэла значению интенсивности V. Следова- тельно, введя некоторую другую константу с, можно написать 1=сУ>. (17.3) Переписав выражение (17.3), получим v=(4)1/v- (17-4) Теперь для заданной желаемой интенсивности / определим сначала ближайшее к ней значение 13. Его можно найти путем поиска в таб- лице имеющихся интенсивностей, вычисленных с помощью соот- ношения (17.1) или с помощью выражения, эквивалентного ему п: j —ROUND (logr^-J (17.5) После того как / найдено, можно вычислить (17.6) На следующем шаге с помощью выражения (17.4) определим значе- ние пэла Vj, необходимое для получения интенсивности Уу = (77)1/\ (17.7) Если растровый дисплей не имеет таблицы цветов, значение V3 заносится в соответствующие пэлы. Если же таблица цветов имеет- ся, в пэлы заносится номер /, а соответствующее значение V/ поме- щается в элемент таблицы с номером /. Величины с, у и /0 определяются используемой ЭЛТ, поэтому таблица цветов обычно заполняется экспериментально на основе реальных измерений интенсивностей [86]. Такой достаточно общий способ использования таблицы цветов называется гамма-коррекци- ROUND обозначает операцию округления.— Прим, перед.
Цвет в машинной графике 313 Рис. 17.2. Увеличенное полутоновое изображение, полученное методом автоти- пии. Размер точек обратно пропорционален интенсивности исходной фотографии. ей (по названию показателя степени в уравнении (17.2)). Отметим, что в некоторых растровых дисплеях гамма-коррекция выполняется так, что в буфер регенерации или таблицу цветов заносится /у, а не Vj. 17.2.2. Аппроксимация полутонами Многие дисплеи и устройства получения «твердой» копии яв- ляются двухуровневыми, т. е. порождают всего два уровня интен- сивности. Однако даже растровые дисплеи с двумя или тремя битами на пэл не обеспечивают желаемого количества уровней интенсив- ности. Как можно расширить диапазон имеющихся интенсивностей? Ответ на этот вопрос — в пространственной интеграции, которую выполняют наши глаза. Когда мы смотрим на очень маленькую область (например, размером 0,05x0,05 см2) с нормального расстоя- ния, глаз объединяет мелкие детали этой области в единое целое и фиксирует только суммарную интенсивность области. Данный эффект используется при печати черно-белых фотогра- фий в газетах, журналах и книгах. Каждый мельчайший (при имею- щемся разрешении) участок отпечатывается в виде окрашенного черной краской круга, площадь которого пропорциональна черноте области на исходной фотографии. На рис. 17.2 показан сильно увеличенный участок полутонового изображения. В газетной печати применяется разрешение 20—30 точек на 1 см, в то время как в жур- нальной и книжной печати используется до 60 точек на 1 см. Устройства графического вывода позволяют аппроксимировать пятна переменной площади, с помощью которых строятся полуто- новые изображения. Например, на двухуровневом дисплее область пэлов размером 2x2 позволяет передать пять различных уровней интенсивности за счет двукратного ухудшения пространственного разрешения по каждой из координатных осей. Конфигурации, по- казанные на рис. 17.3, можно использовать для областей размером
314 Глава 17 Рис. 17.3. Пять уровней интенсивности, аппроксимированных с помощью кон- фигураций размером 2X2. 2x2. Идея здесь заключается в том, чтобы заполнить область разме- ром 2X2 таким количеством точек, которое было бы пропорцио- нально желаемой интенсивности. На рис. 17.4 показано изображе- ние лица на сетке размером 256 x 256, полученное на двухуровне- вом дисплее с растром 512x512 с помощью конфигураций размером 2x2. В общем случае, используя группу из пХп двухуровневых пэлов, можно получить н3+1 уровней интенсивности. За счет ухуд- шения пространственного разрешения мы добиваемся улучшения Рис. 17.4. Изображение, состоящее из 256 X 256 точек, получено на дисплее с растром 512X512 при помощи конфигураций размером 2X2. (С разрешения Дж. Джарвиса, Bell Laboratories.) разрешения по интенсивности. Использование конфигураций раз- мером 3x3 втрое снижает пространственное разрешение по каждой из осей, но при этом возникает 10 уровней интенсивности. Можно, конечно, использовать конфигурации и больших размеров, однако выбор разрешения по пространству и интенсивности ограничен ост- ротой нашего зрения (около одной угловой минуты при нормаль- ном освещении).
Цвет в машинной графике Рис. 17.5. Десять уровней интенсивности, аппроксимированных с помощью кон- фигураций размером 3X3. Один из возможных наборов конфигураций размером 3x3 пока- зан на рис. 17.5. Эти конфигурации можно представить в виде мат- рицы 7 9 5" 2 14. 6 3 8 Для вывода заданной интенсивности на дисплей все клетки, для которых соответствующие значения элементов матрицы меньше или равны этой интенсивности, устанавливаются в единицу. Конфигурации пэлов размером пХп, с помощью которых ап- проксимируются полутона, должны быть построены так, чтобы Рис. 17.6. Конфигурация, которую не следует использовать для аппроксимации полутонов. они не были заметны на области с постоянными значениями интен- сивности. Например, если мы вместо одной из конфигураций, пока- занных на рис. 17.5, возьмем конфигурацию, показанную на рис. 17.6, то на любой достаточно большой области изображения, имеющей интенсивность 3, будут видны горизонтальные линии. Другим фактором, который Ьледует учитывать при выборе конфигу- раций, является то, что конфигурации должны образовывать нара- стающую последовательность, т. е. Нэл, который высвечивался при уровне интенсивности /, должен высвечиваться также и при всех уровнях с номерами £>/» Тогда сводятся к минимуму различия между последовательными уровнями интенсивности, и тем самым подавляются эффекты оконтуривания. Аппроксимация полутонов производится не только на двух- уровневых дисплеях. Рассмотрим дисплей с двумя битами на пае
Э16 Глава 17 0 0 0 0 1 0 0 0 1 0 0 1 У 1 0 1 1 1 1 1 1 2 1 1 1 0 1 2 3 4 5 б Рис. 17.7. Полутоновые конфигурации для уровней интенсивности 0—12, кото- рые построены на основе конфигураций размером 2X2, составленных нз пэлов с 4 уровнями. и, следовательно, с четырьмя уровнями интенсивности. Можно вос- пользоваться методом аппроксимации полутонов и увеличить число уровней интенсивности. Если мы возьмем конфигурацию размером 2x2, в нашем распоряжении окажется совокупность из четырех пэ- лов, каждый из которых может принимать помимо черного еще три значения. Такая совокупность позволит передавать 4x3+1 = 13 уровней интенсивности. Один из возможных наборов конфигураций, образующих нарастающую последовательность, показан на рис. 17.7. Сумма интенсивностей индивидуальных пэлов составляет уровень интенсивности, представленный каждой конфигурацией. Все описанные выше методы вполне приемлемы, если разрешение выводимого на экран изображения ниже разрешающей способности дисплея. Это позволяет использовать несколько пэлов дисплея для представления одного пэла изображения. А если разрешения изоб- ражения и дисплея одинаковы? Для изображения размером тХт с несколькими уровнями интенсивности на двухуровневом дисплее размером тХт можно воспользоваться методом упорядоченного возбуждения. В этом методе принятие решения подсвечивать или не подсвечи- вать пэл в точке (xt у) зависит от желаемой интенсивности / (х, у) в этой точке, а также от матрицы возбуждений D(n} размером пХп. Индексы матрицы возбуждений изменяются в диапазоне от О до п—1 вдоль ее строк и столбцов. Каждое из целых чисел от 0 до п2—1 входит в матрицу только один раз. Например, при п—2 полу- чим О 2' (17.8) 3 1 Это то же представление, что и в случае нарастающих последова- тельностей. Для того чтобы обработать точку, имеющую коорди- наты (х, у), сначала необходимо вычислить i—x modulo п, j—y modulo п. Затем, если Цх, y)>D%>, (17.9)
Цвет в машинной графике 317 точка с координатами (х, у) подсвечивается, в противном случае она не подсвечивается. Отметим, что большие области, имеющие постоянную интенсивность, изображаются так же, как и в предыду- щих методах, поэтому эффект от применения метода упорядоченного возбуждения заметен только на областях с изменяющейся интен- сивностью. Байер [28] разработал матрицы для различных значе- ний п, чтобы уменьшить количество фактуры, которое эти матрицы вносят в изображения, выводимые на экран. Матрица возбуждений, используемая для вывода изображения на экран, должна позволять задавать число уровней интенсивности в изображении. С этой целью в работе [251] были разработаны ре- куррентные соотношения для вычисления £)<2П) через О<и). Приме- няя эти соотношения к матрице £)(2), получаем - 0 8 2 10- 12 4 14 6 £)<*’ = 3 11 1 9 (17.10) и 15 7 13 5_ ~ 0 32 8 40 2 34 10 42“ 48 16 56 24 50 18 58 26 12 44 4 36 14 46 6 38 60 28 52 20 62 30 54 22 Dw = 3 35 11 43 1 33 9 41 (17.11) 51 19 59 27 49 17 57 25 15 47 7 39 13 45 5 37 _63 31 55 23 61 29 53 21_ На рис. 17.8 показано изображение лица, полученное с исполь- зованием матрицы О(8) на двухуровневом дисплее с растром 512 X Х512. Сопоставьте это двухуровневое изображение с многоуровне- выми картинками, показанными выше в этом разделе. Ряд других примеров изображений, построенных с помощью упорядоченных возбуждений, содержится в работах [240, 241]. Там же можно найти описания некоторых других способов построения черно-белых изображений с непрерывным тоном на двухуровневых дисплеях. 17.3. ХРОМАТИЧЕСКИЙ ЦВЕТ Визуальные ощущения, вызываемые цветом, существенно бога- че, чем ощущения, вызываемые ахроматическим светом. При субъ- ективном описании цвета обычно используются три величины: цве- товой тон, насыщенность и светлота. Цветовой тон позволяет раз- личать цвета, такие, как красный, зеленый, желтый и т. д. Насы- щенность характеризует чистоту, т. е. степень ослабления (раз-
318 Глава 17 Рис. 17.8. Изображение, полученное с помощью матрицы упорядоченного воз- буждения D(8) на двухуровневом дисплее с растром 512X512. (С разрешения Дж. Джарвиса, Bell Laboratories.) бавления) данного цвета белым светом, и позволяет отличать розо- вый цвет от красного, небесно-голубой от ярко-синего и т. д. Дру- гими словами, по насыщенности судят о том, насколько мягким (па- стельным) или резким кажется цвет. Светлота отражает уже встре- чавшееся в предыдущих разделах ахроматическое представление об интенсивности, как о факторе, не зависящем от цветового тона и на- сыщенности. Нас интересует вопрос; как задавать и измерять цвет? Один из способов заключается в визуальном сравнении образца неизвестного цвета с набором «стандартных» образцов. Широко известный цвето- вой атлас Мэнселла 11 содержит систематизированный набор стан- дартных цветов 1331}, представленный в трехмерном пространстве цветового тона, светлоты (количества света) и насыщенности (чис- тоты цвета). Каждый цвет имеет имя и воспринимается как «равно- удаленный» в цветовом пространстве (по мнению многих наблюда- телей) от своих соседей. В работе [260] обстоятельно обсуждаются стандартные образцы, имеются диаграммы, характеризующие про- странство Манселла, приводится таблица с названиями цветов. Су- ществует похожая система Оствальда [361], но она используется Ч В СССР кроме цветового атласа Манселла широко применяется также 1000-цветный Атлас стандартных образцов цвета, разработанный и выпускаемый НПО ВНИИМ им. Д. И. Менделеева.— Прим- перев. .
Цвет в машинной графике 319 реже. Появилась еще одна относительно новая система Coloroid, предложенная Немчичем [340]1>. Художники пользуются иными принципами и характеризуют цвета как различные разбелы, оттенки и тона предельно насыщен- ных или чистых пигментов. Раз- „ , бел получается при добавлении белый —---------------цвет белого пигмента к чистому пиг- /^ менту; при этом уменьшается насы- Тона / щенность. Оттенок получается при / добавлении черного пигмента К Серые /оттенки чистому пигменту, в результате че- / го снижается светлота. Тона полу- / чаются при добавлении черного и / белого пигментов К чистому ПИГ- Черный V менту. Во всех этих случаях по- Рис. 17.9. Разбелы, тона и оттенки, лучаются различные цвета одного и того же цветового тона, отличающиеся насыщенностью и светло- той. При смешении только черного и белого пигментов получаются серые цвета. На рис. 17.9 показаны соотношения между разбелами, оттенками и тонами. Можно было бы предложить измерять цвет процентным содержанием пигментов, смешение которых дает инте- ресующий нас цвет. 17.3.1. Цвет в физике и физиологии К сожалению, и метод Манселла, и метод смешения пигментов субъективны, поскольку суждение об уравнивании цветов зависит от наблюдателя* Нам же необходим объективный способ описания цветов. Поэтому обратимся к физике, которая рассматривает види- мый свет как электромагнитное излучение со спектральным распре- делением энергии в видимом диапазоне спектра. Этот спектр начи- нается фиолетовым, включает синий, голубой, зеленый, желтый, оранжевый и заканчивается красным светом. (Первые буквы слов в известной фразе «Каждый охотник желает знать, где сидят фаза- ны» позволяют запомнить обратную последовательность цветов в спектре.) На рис. 17.10 показано типичное спектральное распре- деление энергии светового источника, представляющее собой беско- нечное число чисел, каждое из которых соответствует определенной длине волны в видимом спектре (в действительности распределение задается достаточно большим числом выбранных на спектре точек). К счастью, визуальный эффект любого спектрального распределе- ния можно описать более кратко с помощью тройки величин: доми- нирующей длины волны, чистоты цвета и яркости. Отсюда следует, что один и тот же цвет порождается многими спектральными рас- ц См. также: Немчич А. Цветовая система Колороид.— Техническая эсте- тика, № 1, 1982, с. 12—14.— Прим- перед.
320 Глава 17 Рис. 17.10. Типичное спектральное распределение энергии. пределениями энергии, т. е. «смотрятся» эти распределения оди- наково. Эти три величины интерпретируются следующим образом. Под доминирующей длиной волны подразумевается длина волны цвета, который мы «воспринимаем», когда видим свет. Она соответствует субъективному понятию цветового тона. Чистота характеризует Доминирующая длина Волны Длина волны, нм 400 Фиолетовый 700 Красный Рис. 17.11. Спектральное распределение энергии, иллюстрирующее понятия доминирующей длины волны, чистоты и яркости. насыщенность цвета, а яркость — количество света. Для ахромати- ческого света яркость — это интенсивность света. Чистота окра- шенного света определяется соотношением между чистым светом с доминирующей длиной волны и белым светом, необходимым для определения цвета. Настоящий чистый цвет, являясь на 100% насы- щенным, не содержит белого цвета-. Смешение чистого и белого цве- тов в равных долях дает насыщенность 50%. Насыщение белого цвета, а следовательно и всех серых цветов, равно 0%, поскольку они не содержат цветов ни одной из доминирующих длин волн. На рис. 17.11 показано одно из бесконечного числа спектраль- ных распределений, соответствующее определенной цветовой компо- ненте света. Прц значении длины волны, равном доминирующей длине волны, имеет место пик энергии уровня е2. Белый свет, пред- ставленный равномерным распределением энергии уровня еи тоже, присутствует. Чистота определяется соотношением между et и е2. Когда Bi—е2, чистота составляет 0%. Если же 61=0, чистота равна.
Цвет в машинной графике 321 100%. Яркость, которую можно представлять себе как площадь под кривой (полная энергия), зависит от ег и е3- Таким образом, цвет можно точно описать, основываясь на доми- нирующей длине волны, чистоте и яркости, носится с красной, зеленой и синей точками на люминофо- ре цветной ЭЛТ, а также с психофизиологической трехкомпонентной теорией цвета, основанной на гипо- тезе, в соответствии с кото- рой в сетчатке глаза имеются три типа колбочек, при- чем пик чувствительности каждого из этих типов при- ходится либо на красный, либо на зеленый, либо на синий цвета? С помощью экспериментов, построенных на основе этой гипотезы, были получены кривые реакции глаза, показанные на рис. 17-Д2. Из них следует, например, что чувстви- тельность рецепторов к свету с длиной волны 550 нм равна 0%, в то время как зеленых рецепторов — 55%, а красных — около 45%. Из анализа кривых также вид- но, что синие рецепторы облада- ют существенно меньшей чувст- вительностью по сравнению с красными и зелеными рецептора- ми. Сумма трех кривых реакции, показанная на рис. 17.13, называ- ется спектральной чувствитель- ностью глаза. Она характеризу- ет отклик глаза янной яркости как изменяется 500 боо 7оо_ длина ВОЛНЫ1 в _ . Красный Длина Волны, НМ Однако, как это соот- „100 - Е 80 - Е з со Е Е Е 60 20 40 - Синий (X 20) Зеленый Красный ° о 400 500 600 700 Фиолетовый Красный Длина волны, нм Рис. 17.12. Кривые реакции глаза. 100 л Е Е га Е Е Е О I— 400 Фиолетовый 80 60 40 20 на свет посто- по мере того, доминирующая нашем случае пик чувствительности соответст- вует желто-зеленому свету с Рис. 17.13. Спектральная чувствитель- длиной волны ~550 нм. ность глаза. Трех компонентная теория не является единственной теорией, используемой для объяснения цветового видения. Находят также применение теория оппонентных цветов [278] и зональная теория [486]. Однако трех компонентная теория обладает интуитивной при- влекательностью, поскольку хорошо согласуется с пониманием цве- та как взвешенной суммы красного, зеленого и синего цветов. В са- мом деле, это понимание почти полностью отвечает действительно*
322 Глава 17 сти: три кривые, показанные на рис. 17.14, характеризуют количе- ства красного (длина волны 650 нм), зеленого (530 нм) и синего (425 нм) света, необходимые «среднему» наблюдателю, чтобы урав- нять 100%-ный чистый свет (спектральный цвет) постоянной яр- Рис. 17.14. Коэффициенты уравнивания по цвету. Синий основной цвет промасш- табирован с множителем 10. кости для всех значений доминирующих длин волн в видимом спектре. Некоторые цвета на са- мом деле не могут быть уравнены, однако оказыва- ется, что добавив какой-либо из основных цветов к этому цвету, его уже можно урав- нять с помощью двух дру- гих основных цветов. От- рицательные значения на рис. 17.14 говорят о том, что к уравниваемому цве- ту был добавлен основной цвет. Это не означает, что при помощи смеси красно- го, зеленого и синего цветов нельзя получить другие цвета, наоборот, существует широкий охват (диапазон) цветов, которые можно уравнять с помощью положитель- ных количеств красного, зеленого и синего цветов. Ведь в против- ном случае не работало бы цветное телевидение. Важно отметить, что, поскольку человеческий глаз менее чувствителен к синему све- ту, чем к зеленому, в процессе уравнивания синего цвета потребует- ся меньше. Человеческий глаз способен различать около 350 000 различных цветов. Это число основывается на экспериментальных данных, в процессе получения которых большое число пар цветов сопостав- лялось многими наблюдателями. Наблюдатели указывали одинако- вые эти цвета или разные. В случаях когда цвета отличаются только цветовым тоном, длины волн четко различимых цветов расходятся более чем на 10 нм в экстремумах спектра и всего лишь приблизи- тельно на 1 нм для синего и желтого цветов. За исключением спек- тральных экстремумов, различия между большинством соседних цветов оказываются не более 3 нм. Всего различимо около 128 цве- товых тонов. Если цвета отличаются друг от друга только по насы- щенности, мы можем различить от 16 (для желтого) до 23 (для красного и фиолетового) таких цветов. 17.3.2. Цветовой график МКО Возможность подбирать, а следовательно, и воспроизводить окрашенный свет при помощи трех фиксированных основных цветов весьма привлекательна, однако концепция отрицательных весов,
Цвет в машинной графике 323 проиллюстрированная на рис. 17.14, неудобна при расчетах. В 1931 г. Международной комиссией по освещению (МКО) были введены три основных цвета (X, Y, Z)* Комбинацией этих цветов с положительными весами можно описать любые световые ощуще- ния, которые испытывают наши глаза. Основные цвета МКО, хотя их и нельзя увидеть в действительности, приняты в качестве между- народного стандарта для задания цвета. Основные цвета опреде- ляются как три спектральных распределения энергии, причем ос- новной цвет Y задается таким образом, чтобы его распределение 0,1 0,2 0,3 0,4 0,5 0,6 0,7 Рис. 17.15. Цветовой график МКО. Длины волн выражены в нанометрах. Рис, 17.16. Доминирующие длины волн цветов А и В совпадают (около 565 нм). энергии в точности совпадало с кривой спектральной чувствитель- ности глаза (рис. 17.13). Пусть (X, Y, Z) — веса основных цветов МКО, используемые при уравнивании цвета. Можно ввести в рассмотрение величины цветности (которые определяются только доминирующей длиной волны и насыщенностью и не зависят от количества излучаемой энергии), если пронормировать'цвета по значению яркости (которое представляет собой полное количество света) следующим образом: _ X _ Y _ Z /17 191 Х~ X+Y+Z* U — X+Y+Z ’ 2 ~ X + Y+Z ' U'-l*) Отметим, что сумма x+y+z должна быть равна 1. Если мы изобразим х и у для всех видимых цветов, получим цве- товой график МКО (рис. 17.15). Внутри и на границе подковооб- разной области содержатся все видимые цветности. (Все воспри- нимаемые цвета, имеющие одинаковую цветность, но различные яркости, отображаются в одну и ту же точку внутри области.)
324 Глава 17 Абсолютно (на 100%) чистые цвета спектра лежат на криволиней- ной части границы. Их длины волн указаны на рисунке. Опорный белый цвет, являющийся аппроксимацией солнечного света, фор- мально задается стандартизованным источником света, называе- мым стандартным источником С. На графике он обозначен жирной точкой в центре. Эта точка находится вблизи позиции x=y—z=1/3. Рис. 17.17. Дополнительные цвета. Рис. 17.18. Доминирующая длина вол- ны цвета Е определяется как дополни- тельная к доминирующей длине вол- ны цвета D. В колориметрии (науке об измерении цвета) источник света С опре- деляется как излучение абсолютно черного тела при температуре 6504 К“. График цветности МКО оказывается полезным во многих слу- чаях. Прежде всего он позволяет реально измерить доминирующую длину волны и чистоту любого цвета, уравнивая цвет при помощи смеси трех основных цветов МКО. (Существуют приборы, которые позволяют это сделать.) Предположим теперь, что уравниваемому цвету соответствует точка А (рис. 17.16) При сложении двух цветов получившийся новый цвет оказывается лежащим на цвето- вом графике на прямой, соединяющей эти два цвета. Поэтому цвет А можно считать смесью «опорного» белого цвета (источник света С) и чистого спектрального цвета, расположенного в точке В. Таким образом, В определяет доминирующую длину волны. Отношение длины АС к длине ВС, выраженное в процентах, задает чистоту А. На самом деле стандартное излучение С МКО воспроизводит фазу дневного света с коррелированной цветовой температурой (т. е. с абсолютной температурой абсолютно черного тела, свет которого имеет ту же цветность, что и данвое излу- чение) 6774К. Подробнее см. работу [250], а также Международный светотехни- ческий словарь. 3-е изд.—М.: Русский язык, 1979.— Прим, перев.
Цвет в машиииой графике 325 Чем ближе точка А к точке С, тем больше белого цвета входит в со- став А и тем менее чистым является этот цвет. Поскольку яркость не оказывает влияния на график, цветовые ощущения, связанные с яркостью, здесь не учитываются. Поэтому, например, коричневый цвет, который обладает оранжево-красной цветностью при очень низкой яркости, на графике не показан. Дополнительными цветами будем называть цвета, смесь которых порождает белый цвет. Примерами могут служить точки D и Е (рис. 17.17). В этом случае вес wD цветности D в смеси определяется отношением длины отрезков СЕ и DE, а вес wE цветности Е — отношением длин отрезков DC и DE. Следовательно, С=а)д£>+ +weE. Задавая цветность координатами (х, у), получим xc=u>DXD+ayExE и yc==wDyD+wEyE. Отметим, что wD=l—wE, а это является параметрическим пред- ставлением прямой, которое использовалось в гл. 4 и 8, при Некоторые цвета (такие, как Е на рис. 17.18) нельзя определить с помощью доминирующей длины волны. Такие цвета называются неспектральными. В этих случаях говорят, что доминирующая длина волны является дополнительной к доминирующей длине волны точки D. Она помечается буквой «с» (в нашем случае около 560 нм с). Чистоту все еще можно определить через отношение рас- стояний (в нашем случае СЕ и CF). С помощью дополнительной длины волны выражаются такие цвета, как пурпурные и пурпурно- красные; они расположены в нижней части графика МКО. Другим применением цветового графика МКО является задание цветовых охватов или цветовых диапазонов. Смешением двух цве- тов, например / и J (рис. 17.19), можно получить путем подбора их
326 Глава 17 относительных яркостей любой цвет, лежащий на прямой, соеди- няющей два смешиваемых цвета. Добавляя к различным смесям цветов / и J третий цвет К (рис, 17.20), можно также путем подбора относительных яркостей получить охват всех цветов, расположен- ных в треугольнике IJK, Достаточно взглянуть на форму цвето- вого графика и станет ясно, почему аддитивной смесью видимых красного, зеленого и синего цветов нельзя уравнять все цвета: ни один из треугольников, вершины которого находятся внутри види- мой области, не будет полностью покрывать всю видимую область. Поскольку любой предельно насыщенный цвет не содержит белого цвета, его можно задать смесью всего лишь двух основных цветов. Еще одним применением цветового графика является задание и визуальное сравнение цветовых охватов, имеющихся на различ- ных цветных дисплеях и устройствах получения «твердой копии». На вклейке 22 показаны охваты для цветных телевидения, кино и печати. Малый цветовой охват для печати по сравнению с цветовым охватом для телевидения ведет к тому, что для точного воспроизве- дения средствами печати цветных телевизионных изображений не- обходимо уменьшить диапазон цветов, используемых в телевидении. В противном случае точное воспроизведение станет невозможным. Если же целью является получение достаточно хорошей, но не обя- зательно точной копии, небольшими расхождениями в цветовых охватах можно пренебречь. 17.4. ЦВЕТОВЫЕ МОДЕЛИ ДЛЯ РАСТРОВОЙ ГРАФИКИ Назначение цветовой модели состоит в том, чтобы дать возмож- ность удобным образом описывать цвета в пределах некоторого цветового охвата. В первую очередь нас интересует цветовой охват для цветного телевидения, который определяется основными цве- тами RGB, принятыми в телевидении11 (вклейка 22), а также цве- товой охват для устройств получения твердой копии. При выборе цветовой модели определяются трехмерное цветовое координатное пространство и в нем трехмерное подпространство, внутри которого каждый выводимый на экран цвет представляется точкой. В основе всех рассмотренных в этой главе цветовых моделей лежат основные цвета RGB, хотя три основных цвета можно было бы выбрать произ- вольно. Рассматриваемые модели позволяют задавать цвета только в охвате RGB. Тремя аппаратно-ориентированными цветовыми моделями яв- ляются следующие: модель RGB, используемая в цветных телеви- зионных мониторах; модель YIQ, применяемая в цветном телеви- 4 R (red) — красный; G (green) — зеленый, В (blue) — синий.— Прим, перев.
Цвет в машинной графике 327 денни, и модель CMYn, используемая в цветных печатающих устройствах. К сожалению, ни одна из этих моделей не обеспечи- вает достаточно простого способа манипулирования цветами, по- скольку они никак не связаны с интуитивными человеческими по- нятиями цветового тона, насыщенности и светлоты. Поэтому был разработан другой класс цветовых моделей, для которых опреде- ляющим свойством является простота использования. Существует Рис. 17.21. Цветовой куб RGB. Серые Рис. 17.22. Основные субтрактивные цвета лежат на главной диагонали, цвета (голубой, пурпурный, желтый) изображенной точками. и их смеси. несколько таких моделей. Из них мы рассмотрим только две: HSV и HLS. Эти модели, а также ряд других описаны в работах [203, 244, 318, 432]. 17.4.1. Цветовая модель RGB В цветовой модели, построенной на основе красного, зеленого и синего цветов, используются декартовы координаты. Рассматри- ваемое нами подпространство представляет собой единичный куб (рис. 17.21). Основные цвета RGB аддитивны, т. е. некоторый ре- зультирующий цвет можно получить путем сложения (смешения) определенных количеств каждого из основных цветов. На главной диагонали куба, образованного равными количествами каждого из основных цветов, лежат серые цвета. На вклейке 23 приведено не- сколько изображений цветового пространства RGB. Система RGB заслуживает внимания прежде всего потому, что на ее основе рабо- тают цветные телевизионные мониторы, а также многие растровые дисплеи. Накоплен значительный объем знаний о реакции и чувст- вительности глаза к цветам, задаваемым триадами . (R, 6, В). V С (cyan) — голубой или точнее сине-зеленый или бирюзовый (циан); М (magenta) — пурпурный или точнее пурпурно-красный (фуксин); Y (yellow) — желтый.— Прим, перев.
328 Глава 17 17.4.2. Цветовая модель CMY Голубой, пурпурный и желтый цвета являются дополнительны- ми к красному, зеленому и синему цветам соответственно. Они получили название основных субтрактивных цветов, поскольку эти цвета являются результатом вычитания некоторого цвета из белого цвета. В случае модели CMY рассматривается то же Подпростран- ство в декартовой Системе координат, что и для модели RGB, только в начале координат теперь находится не черный (отсутствие света), а белый (полный свет) цвет. В модели CMY цвета задаются не теми величинами, которые добавляются к черному, а значениями, кото- рые вычитаются из белого света. Знание модели CMY оказывается полезным, когда приходится иметь дело с устройствами получения твердой копии, в которых цветные пигменты наносятся на бумагу. Примерами таких устройств могут служить копировальное устройство фирмы Xerox и струйный плоттер фирмы Applicon. Если поверхность покрыта голубой крас- кой, красный свет от нее не отражается. Голубой цвет является ре- зультатом вычитания красного из отраженного белого света, кото- рый сам является суммой красного, зеленого и синего цветов. Следовательно, в терминах основных аддитивных цветов голубой цвет является суммой синего и зеленого цветов. Аналогично пурпур- ный цвет поглощает зеленый свет, поэтому он представляет собой сумму красного и синего цветов. В то же время желтый цвет погло- щает синий свет, поэтому он является суммой красного и зеленого цветов. Поверхность, покрытая голубой и желтой красками, погло- щает при освещении белым светом его красную и синюю состав- ляющие, отражая лишь зеленый свет. Поверхность же, покрытая голубой, желтой и пурпурной красками, поглощает красный, зеле- ный и синий цвета и поэтому выглядит черной. Эти соотношения, показанные на рис. 17.22 в форме диаграммы, можно увидеть на вклейке 23. Их можно также представить в виде уравнений 1 1 1 С М Y R G В (17.13) Единичный вектор-столбец является представлением белого цвета в модели RGB и черного — в модели CMY. Отметим, что координа- та Y (желтый цвет) в модели CMY отличается от координаты Y в ко- лориметрической системе МКО. Преобразование из модели RGB в модель CMY выполняется следующим образом: П Гс 1 — м 1 Y G В (17.14)
Цвет в машинной графике 329 17.4.3. Цветовая модель YIQ Цветовая модель YIQ заслуживает внимания потому, что ис- пользуется в коммерческом цветном телевизионном вещании и тесно связана с цветной растровой графикой. Эта модель представляет со- бой некоторый вариант кодирования цветов RGB, осуществляемого с целью повышения эффективности их передачи в эфир, а также для обеспечения совместимости с черно-белым телевидением. Координа- та У в модели YIQ представляет собой в действительности то же самое, что и координата Y в колориметрической системе МКО, т. е. это основной цвет, спектральное распределение энергии которого соответствует кривой спектральной чувствительности глаза. Ком- понента Y цветного телевизионного видеосигнала изображается на экране черно-белого телевизора. Модель YIQ определяет в трех- мерной декартовой системе координат подпространство, представ- ляющее собой выпуклый многогранник, который отображается в куб модели RGB. Преобразование модели RGB в модель YIQ, с по- мощью которого выполняется отображение, задается следующим образом: V / — ‘0,30 0,60 0,59 —0,28 0,11" —0,32 р?" G (17.15) .Q. .0,21 -0,52 0,31 в_ Для обратного преобразования применяется обратная матрица. На вклейке 24 показаны плоскости постоянного значения координаты Y в модели YIQ. Более подробные сведения об этой модели можно найти в работах [432, 382]. Описывая цвета в модели YIQ, можно тем самым решить важ- ную проблему, стоящую перед телевидением: два цвета, которые наши глаза воспринимают как различные, могут выглядеть совер- шенно одинаковыми при их передаче в эфир или записи на видео- пленку и последующем просмотре на черно-белом телевизионном мо- ниторе. Этого можно избежать, если двум цветам, которые следует отличать друг от друга (предназначенным, например, для изобра- жения заполненной области и ее границы), присваивать различные значения яркости (величины Y) так, чтобы эти цвета изображались с различными интенсивностями. В цветовой модели YIQ используется полезное свойство системы человеческого видения, которая более чувствительна к изменениям светлоты, чем к переменам цветового тона или насыщенности. От- сюда следует, что для представления координаты Y следует выде- лять большее количество битов (или более широкую полосу частот), чем для представления координат / и Q, обеспечивая тем самым более высокое разрешение по Y. Кроме того, объекты, занимающие очень маленькую часть поля нашего зрения, не вызывают ощущения цвета — они воспринимаются только в соответствии с их интенсив-
330 Глава 17 Рис. 17.23. Одиночный шестигранный конус цветовой модели HSV, ностью. Следовательно, для координат 7 и Q требуется меньшее пространственное разрешение, чем для координаты Y. В принятом Национальным комитетом по телевизионным стандартам (NTSC) п [382] способе преобразования модели YIQ в видеосигнал исполь- зуются оба этих свойства с целью максимального увеличения коли- чества информации, передаваемого в фиксированной полосе частот. 17.4.4. Цветовая модель HSV Цветовые модели RGB, CMY и YIQ являются аппаратно-ориен- тированными. В отличие от них предложенная Смитом модель HSV* 2) [432] ориентирована на пользователя. В ее основу положены интуитивно принятые художниками понятия разбела, оттенка и тона. Подпространство, определяемое моделью, представляет собой шестигранный конус (рис. 17.23). Верхняя часть шестигранного конуса соответствует значению 7=1; цвета при этом выражены с на- ибольшей интенсивностью. Отметим, что дополнительные цвета расположены друг против друга, т. е. отличаются один от другого на угол /7=180°. Этот угол отсчитывается вокруг вертикальной оси, причем начало отсчета совпадает с красным цветом. Значением S Ч Система NTSC используется в США, Канаде и ряде стран Американского континента, а также в Японии в качестве стандартной системы телевизионного вещания. В СССР, в большинстве социалистических стран, во Франции и некото- рых других странах цветное телевизионное вещание ведется по системе СЕКАМ (последовательная система цветного телевидения с запоминанием).— Прим, перев. 2) Н (hue) — цветовой тон; S (saturation) — насыщенность; V (value)— свет- лота (количество света).— Прим, перев.
Цвет в машинной графике 331 является отношение, изменяющееся в диапазоне от 0 на осевой линии (ось V) до 1 .на треугольных боковых гранях шестигранного конуса. Насыщенность измеряется относительно цветового охвата, задаваемого моделью, а не относительно графика МКО, поэтому это не то же самое, что чи- стота. Высота шестигранного конуса составляет единицу по координате V, а вер- шина конуса лежит в начале координат. Точка, в кото- рой находится вершина, со- ответствует черному цвету; ее координата V=0. С точ- кой У=0 может быть свя- зано любое значение коор- динаты S в диапазоне 0—1. Точка с координатами 5 = = О, К=1 соответствует бе- лому цвету. Промежуточ- ные значения координаты V Зеленый Желтый Рис. 17.24. Цветовой куб модели RGB, ес- ли на него смотреть вдоль главной диаго- нали. Видимые ребра куба изображены сплошными линиями, а невидимые — штриховыми. при S=0 (т. е. на осевой линии) соответствуют серым цветам. При S=0 значение Н считается неопределенным. Если же S не равно нулю, значение Н уже определено. Например, чистому красному цвету соответствуют координаты /7=0, S = l, К=1. В самом деле, любой цвет с координатами V=l, S = 1 похож на чистый пигмент, который художники .используют в качестве начального приближе- ния при смешении цветов. До- бавление белого пигмента соот- ветствует уменьшению V (без изменения S). Тона получаются путем уменьшения как S, так и V. И наконец, меняя координа- ту Н, мы выбираем чистый пиг- мент, с которым будем рабо- тать. Таким образом, координа- ты Н, S и V взаимно однозначно соответствуют понятиям цвето- вой системы художника. Рис. 17.25. Куб модели RGB и подкуб. Верхняя часть шестигранно- го конуса представляет собой по- верхность, которую можно увидеть, если смотреть вдоль главной диагонали цветового куба модели RGB из вершины, соответствую- щей белому цвету, в направлении к вершине, соответствующей чер- ному цвету. Такое изображение показано на рис. 17.24 и на вклей- ке 23, в. В пределах куба RGB можно выделить подкубы (рис. 17.25). Если на такой подкуб смотреть вдоль его главной диагонали, он
332 Глава 17 выглядит как шестиугольник (рис. 17.24), только его размер будет меньше. Каждая плоскость с постоянной координатой V в простран- стве HSV соответствует такому изображению подкуба в простран- стве RGB. Главная диагональ куба в пространстве RGB становится осью V пространства HSV. Приведенные ниже два алгоритма зада- ют преобразования из одной системы в другую и тем самым опреде- ляют взаимно однозначное соответствие между ними: procedure RGB_TO_HSV(r, g, b; real; var h, s, v: real); {Заданы: значения r, g, b, каждое в диапазоне [0, 1]} {Требуется определить: h в диапазоне [0, 360], s и v в диапазоне [0, 1], за исключением случая s = 0, при котором h = undefined} т. е. константе, зна- чение которой лежит вне интервала [0 , 360]} begin игах ;— MAXI MU M(r, g, b); min := MINIMUM^, g, b); v := max; {значение} if max < > 0 then s:= (max—-min)/max else s: = 0; if s = 0 then h := undefined else {насыщение} {насыщение не равно нулю, begin rc := (max—r)/(max — min); gc := (max—g)/(max—min)-, be := (max—b)/(max—min); if r = max then h be—gc else if g—max then h; = 2-j-rc—be else if b = max then h := 4-j-gc—rc; h := h* 60; if h < 0 then h := h+360 end {хроматический случай} end {RGB_TO_HSV} поэтому определяем цвето- вой тон} {rc характеризует «удален- ность» цвета от красного} {результирующий цвет лежит между желтым и пурпурно- красным} {результирующий цвет лежит между голубым и желтым} {результирующий цвет лежит между пурпурным и голубым} {переводим в градусы} {делаем неотрицательным} procedure HSV_TO_RGB(var г, g, b: real; h, s, c: real); {Заданы: h в диапазоне [0, 360] или undefined, s н v в диапазоне [0, 1]} Требуется определить! значения г, g, b, каждое из которых в диапазоне [0. И] begin if s = 0 then {ахроматический цвет: отсутствует цветовой тон} if b = undefined then begin {ахроматический случай} г := v; § :== - b := v end
Цвет в машинной графике 333 else ERROR else begin if Л = 360 then Л = 0; h := Л/60; / := FLOOR(h); f ;== h—i-t p := ц*(1—s); q ;= u»(l —(s*/)); t := y*(l-(s*(l -/))): case i of 0.(r, g, b) — (f. t, P)< l:(r, g, b) := (<?, v, p); 2:(r, g,b) := (p, v, t)- 3:(r, g, b) := (p, q, t>); 4:(r, g, b) := (/, p, c); 5-(r, g, b) := (y, p, <?); end {case} end {цветовой тон} end {HSV-TO-RGB} {если s=0, a h принимает некоторое значение, то ошибка} {хроматический цвет: присутствует цветовой тон} {Л теперь лежит в диапазоне [0, 6)} {наибольшее целое Ф=Л} {дробная часть Л} {задание тройки} 17.4.5. Цветовая модель HLS В основе цветовой модели HLS11, применяемой фирмой Tektro- nix, лежит цветовая система Оствальда [361]. Эта модель образует подпространство, представляющее собой двойной шестигранный конус (рис. 17.26). Цветовой тон задается углом поворот? вокруг вертикальной оси двойного шестигранного конуса, причем красный цвет соответствует углу 0°2). Цвета следуют вокруг периметра в том же порядке, в каком они появляются на цветовом графике МКО, когда его граница обходится против часовой стрелки: крас- ный, желтый, зеленый, голубой, синий и пурпурный. Кроме того, этот порядок совпадает с порядком в модели HSV, в которой за- дается одиночный шестигранный конус. На самом деле можно счи- тать, что модель HLS получается в результате модификации модели HSV: белый цвет как бы «вытягивается» вверх из плоскости К=1, чтобы образовать верхний шестигранный конус. Как и в случае модели с одиночным шестигранным конусом, дополнение каждого цветового тона отстоит на 180° от этого цветового тона при повороте вокруг оси конуса, а насыщенность измеряется в радиальном на- правлении, начиная от вертикальной оси, где ее значение равно 0, и кончая поверхностью конуса, на которой оно равно 1. Светлота изменяется в пределах от 0 для черного цвета (нижняя вершина двойного шестигранного конуса) до 1 для белого цвета (верхняя 11 Н (hue) — цветовой той; L (lightness) — светлота; S (saturation) — насы- щенность.— Прим, перев. а> Для совместимости с моделью HSV мы отошли от принятого в фирме Tekt- ronix соглашения, в соответствии с которым 0° соответствует синему цвету; кроме того, мы описываем модель как двойной шестигранный конус, а не как обычный двойной конус.
334 Глава 17 Рис. 17.26. Двойной шестигранный конус цветовой модели HLS. вершина конуса). На вклейке 25 показано разрезанное на части цветовое пространство HLS; двойной шестигранный конус тополо- гически деформируется в обычный двойной конус. Так же как и модель HSV, модель HLS проста в использовании. Все серые цвета имеют S=0, а максимально насыщенные цветовые тона получаются при S = l, L=0,5. Если параметры цветовой мо- дели задаются с помощью потенциометров, получение предельно насыщенных цветов путем установки значения L=0,5 менее удоб- но, чем в моделе HSV, в которой тот же эффект достигается при зна- чениях координат 3 = 1 и У=1. Отметим, однако, что ни координата V в модели HSV, ни координата L в модели HLS никак не связаны с яркостью в модели YIQ, поэтому два различных цвета, заданные в любом из этих пространств, вполне могут обладать одной и той же яркостью и быть неотличимыми на экране черно-белого телеви- зора или при записи на видеопленку. Отметим также, что, строго говоря, термин «светлота» (lightness), как правило, используется при рассмотрении отражения света, поэтому его применение здесь является не совсем Точным1’. И Из-за различия между несамосветящимися и самосветящимися предметами для определения светлоты используются два термина: lightness для несамосветя-
Цвет в машинной графике 335 Приведенные ниже программы преобразований, разработанные Метриком [203], модифицированы так, чтобы при S=0 координата И принимала значение undefined и значение 77=0 совпало с крас- ным, а не с синим цветом. procedure RGB_TO_HLS(r, g, b: real; var h, I, s: real); {Заданы: значения r, g, b, каждая в диапазоне [0, 1]} {Требуется определить: h в диапазоне [0, 360), I и s в диапазоне [0, 1J, за исключением случая s = 0, при котором h — undefined} begin max := MAXIMUMS, g, &); min := MlN1 MUM(r, g, b); I := (max-}-min)/2; {светлота} {Вычисляем насыщенность} If max = min then (r — g = b: ахроматический случай} begin s := 0; h := undefined end {ахроматический случай} else begin {хроматический случай} if I <=0.5 then s := (max—min)/(max-j-min) end else s := (max—min)/(2 {Вычисляем цветовой тон} re := (max — r)/(max—min); gc := (max—g)/(max—min); » be ;= (max—b)/(max—min); if r^=max then h := be—gc else if g = max then h 2-}-rc—be else if b = max then h := 4-}-gc—re; h := /t*60; if h < 0.0 then h Л—1-360 end {хроматический случай} {RGB_TO_HLS} max—min); {результирующий цвет лежит между желтым и пурпурным} {результирующий цвет ле- жит между голубым и жел- тым} {результирующий цвет ле- жит между пурпурным и голубым} {переводим в градусы} {делаем неотрицательным} procedure HLS_TO_RGB(var г, g, b; real; Л, I, s: real); {Заданы: h в диапазоне [0, 360] или undefined, l и s в диапазоне [0, 1]} {Требуется определить: г, g, b, каждая из которых в диапазоне [0, I]} function VALUE(n\, п2, hue) begin if hue > 360 then hue := hue—360; if hue < 0 then hue := /tue+360; if hue <60 then VALUE := nl + (n2—nl)*hue/60; else if hue < 180 then VALUE := n2; щихся предметов и brightness (или luminosity) для самосветящихся. Светлота несамосветящихся предметов изменяется от черной до белой (или абсолютно проз- рачной). Светлота самосветящихся предметов изменяется от невидимой глазу до слепящей (максимальная светлота, которую может ощущать наблюдатель). Под- робнее см, работу [250]. — Прим, перев.
336 Глава 17 nl-f-(n2—nl)*(240—Л«е)/60; nl else if hue < 240 then VALUE := else VALUE := end {VALUE}-, begin if I <=0.5 then m2 := Z*(14-s) else m2 := Z-j-s—Z*s; ml := 2*1—m2-, If s = 0 then if h —undefined then r g b -.= I else ERROR else begin r := VALUE(ml, m2, h+ 120); g := VALUE(ml, m2, h,)-, b VALUE(ml, m2, h—120) end end {HLS-TO-RGB} {ахроматический цвет: отсутствует цветовой тон} {ахроматический случай} {если s = 0, a h принимает некоторое значение, то ошибка} {хроматический цвет: присутствует цветовой тон} 17.4.6. Интерполяция в цветовом пространстве Необходимость в интерполяции цветов возникает по крайней мере в трех случаях: при закраске методом Гуро (разд. 16.4), при построении последовательности изображений, передающих эффект постепенного «усиления» и «угасания», и, наконец, в случае смеше- ния цвета частично прозрачной поверхности с цветом другой по- верхности (разд. 16.6). Результаты интерполяции во многом зависят от цветовой модели, в рамках которой производится интерполяция цветов. Поэтому выбору соответствующей модели следует уделять особое внимание. Если при преобразовании из одной цветовой модели в другую прямая линия (представляющая собой путь интерполяции), задан- ная в одном цветовом пространстве, переходит в прямую линию в другом цветовом пространстве, результаты интерполяции в обеих моделях будут идентичными. Это имеет место в цветовых моделях RGB, CMY и YIQ, связанных между собой простыми аффинными преобразованиями. Однако прямая линия, заданная в модели RGB, в общем случае не переходит в прямую линию в моделях HSV или HLS. Рассмотрим, например, случай интерполяции между красным и зеленым цветами. В модели RGB красный цвет имеет координаты (1, 0, 0), а зеленый— (0, 1, 0). Путем интерполяции этих цветов (с обоими весами, равными для простоты 0,5) находим (0,5, 0,5, 0). Применяя к этому результату алгоритм RGB_TO_HSV, получаем (60°, 1, 0,5). Для красного и зеленого цветов в координатах модели HSV получим (0°, 1, 1) и (120°, 1, 1). Однако результатом интерпо- ляции с равными весами в пространстве HSV будет (60°, 1, 1). Таким
Цвет в машинной графике 337 образом, это значение отличается на 0,5 от значения, найденного путем такой же интерполяции в пространстве RGB. В качестве второго примера рассмотрим случай интерполяции между красным и голубым цветами в моделях RGB и HSV. В мо- дели RGB эти цвета задаются координатами (1, 0, 0) и (0, 1, 1) соот- ветственно. Путем их интерполяции получим значения координат (0,5, 0,5, 0,5), которые после преобразования в пространство HSV примут вид (undefined, 0, 0,5). В модели HSV красный и голубой цве- та имеют координаты (0°, 1, 1) и (180°, 1, 1). С помощью интерполя- ции мы получаем (90°, 1, 1), т. е. при максимальных значениях ко- личества и насыщенности вводится новый цветовой тон, в то время как «правильным» результатом смешения равных количеств допол- нительных цветов является серый цвет. Здесь, как и в предыдущем случае, интерполяция и последующее преобразование приводят к результатам, отличающимся от результатов, которые получаются, если сначала проводить преобразование и лишь потом интерполя- цию. Какую цветовую модель следует использовать для интерполя- ции? Если требуются традиционные результаты, построенные на основе аддитивных цветов (отметим, что интерполяция является в основном аддитивным процессом), модель RGB более удобна, чем модели HSV и HLS. Если же необходимо проинтерполировать меж- ду двумя цветами, обладающими одним и тем же цветовым тоном (или насыщенностью), чтобы при этом все проинтерполированные цвета имели тот же цветовой тон (насыщенность), более предпочти- тельными оказываются модели HSV и HLS. 17.5. ПОЛУЧЕНИЕ ЦВЕТНЫХ ТВЕРДЫХ КОПИЙ Способ печати цветных изображений аналогичен способу печати одноцветных изображений. При этом, однако, печатается четыре набора полутоновых точек — по одному для каждого из основных субтрактивных цветов и один для черного цвета. Черный цвет используется потому, что при печати с помощью комбинации трех основных цветов трудно добиться насыщенного черного цвета. Точ- ки очень точно размещаются относительно друг друга и поэтому не перекрываются. Ориентации сеток точек относительно друг друга различаются и поэтому не образуются интерференционные карти- ны. На вклейке 26 показано цветное полутоновое изображение в увеличенном масштабе. Наши глаза пространственно интегрируют свет, отраженный от прилежащих друг .к другу точек, поэтому мы видим цвет, который определяется соотношениями основных цветов в этих смежных точках. Пространственная интеграция различных цветов — то же самое явление, которое происходит, когда мы смот- рим на триады красных, зеленых и синих точек на экране цветного телевизора.
338 Глава 17 Итак, воспроизведение цвета при печати и на экране ЭЛТ опре- деляется тем же эффектом пространственной интеграции, от кото- рого зависит восприятие одноцветных изображений. При выводе на экран цветных изображений можно также воспользоваться и од- ноцветными методами возбуждения (разд. 17,2.2) для расширения количества имеющихся цветов за счет разрешения. Рассмотрим цветной дисплей с тремя битами на пэл — по одному на красный, зеленый и синий цвета. Если взять конфигурации пэлов размером 2x2 (такие, как на рис. 17.8), то можно получить 125 различных цветов, поскольку каждая конфигурация позволяет выводить на экран по пять уровней интенсивности для красного, зеленого и си- него цветов соответственно, что дает 5x5x5=125 комбинаций раз- личных цветов. На вклейке 27 показаны 125 различных цветов, построенных таким способом. Не все способы воспроизведения цветов определяются простран- ственной интеграцией. Например, в цветном копировальном уст- ройстве фирмы Xerox и в струйном плоттере фирмы Applicon не- большой набор различных цветов получается путем смешения суб- трактивных пигментов на бумаге. В копировальном устройстве Xerox цветные пигменты сначала наносятся последовательно в три стадии на бумагу, затем нагреваются и сливаются воедино. Краски, разбрызгиваемые плоттером, смешиваются перед тем, как они вы- сохнут. Пространственную интеграцию можно использовать для дополнительного расширения цветового охвата. 17.6. ЦВЕТОВАЯ ГАРМОНИЯ Современные цветные дисплеи и устройства получения твердой копии позволяют создавать широкий диапазон цветов. Одни цве- товые сочетания хорошо гармонируют друг с другом, другие оказы- ваются взаимно несовместимыми. Как следует отбирать цвета, что- бы они гармонировали друг с другом? Выбору цветов посвящено множество книг, например [36]. Мы же приведем здесь несколько простейших правил достижения цветовой гармонии. Наиболее фундаментальным правилом является использование цветов, отобранных в соответствии с некоторым методом (системой отбора), обычно путем проведения гладкой траектории в цветовом пространстве и/или путем ограничения диапазона используемых цветов в цветовой модели плоскостями (или шестигранными кону- сами) постоянной светлоты. Это может сводиться к использованию цветов одного и того же цветового тона, двух дополнительных цветов и их смесей или цветов постоянной светлоты. Так, например, на вклейке 28 показано применение цветов, выбранных вдоль траек- тория в цветовой модели RGB. Более того, цвета лучше всего раз- мещаются с промежутками, воспринимаемыми как равноудален- ные, вне зависимости оттого, из какого подпространства они взяты
Цвет в машинной графике 339 (эта операция не совпадает с размещением в подпространстве с оди- наковыми приращениями координат и вполне может оказаться трудно исполнимой). Отметим также, что линейная интерполяция между цветами (как при закраске методом Гуро) приводит к раз- личным результатам в разных цветовых пространствах. Если цветовые тона и насыщенности выбирать случайным об- разом, они, как правило, будут выглядеть слишком яркими. Смит описал эксперимент, в котором сетка размером 16x16 заполнялась цветами, полученными случайным образом. Неудивительно, что эта сетка имела мало привлекательный вид. Сортировка 256 цветов в соответствии со значениями их Н-, S- и У-координат и последую- щее заполнение сетки упорядоченными цветами привели к замет- ному улучшению внешнего вида сетки. В более частных случаях применения этих правил предпола- гается, что, если график составлен только из нескольких цветов, в качестве фона следует использовать дополнение к одному из этих цветов. Если же изображение состоит из большого количества цве- тов, лучше воспользоваться нейтральным (серым) фоном. Когда два примыкающих друг к другу цвета не гармонируют, их можно разделить тонкой черной линией. С физиологической точки зрения низкая чувствительность глаза к синему цвету означает, что на черном фоне трудно различить си- ний цвет. Отсюда следует, что желтый цвет (дополнительный к си- нему) также трудно различить на белом фоне (дополнительном к черному) (упражнение 17.10). Люди, которые страдают красно-зе- леной цветовой слепотой (наиболее часто встречающаяся форма цве- товой слепоты), не должны работать с красными и зелеными цве- тами с малыми насыщенностью и яркостью. 17.7. ИСПОЛЬЗОВАНИЕ ЦВЕТА В ИНТЕРАКТИВНОЙ МАШИННОЙ ГРАФИКЕ В интерактивных графических системах с цветом имеют дело программисты и пользователи. Задача программиста заключается в том, чтобы дать пользователю понятную цветовую модель или приемлемый набор цветов. В простых приложениях при создании изображения выбор цветов осуществляет программист — пользо- ватель в этом процессе участия не принимает. Такие ситуации воз- никают при использовании интерактивной машинной графики в уп- равлении или для представления данных. В -других случаях поль- зователю предоставляется фиксированный набор цветов, из кото- рого он может выбирать тот или иной цвет. Как правило, цвета за- даются в виде сетки цветовых квадратов, изображенных вдоль ниж- ней части экрана. Желаемый цвет выбирается с помощью логиче- ского селектора. Иногда могут быть доступны сразу несколько на- боров цветов (называемых обычно палитрами), в каждом из которых
340 Глава 17 содержатся цвета, отобранные на основе, например, правил цвето- вой гармонии. В наиболее часто встречающихся приложениях, связанных с цветом, пользователю предоставляется возможность самому созда- вать палитру цветов либо путем задания точек в некотором цвето- вом пространстве, либо конструктивно — путем построения все- возможных смесей нескольких основных цветов; при этом создаются новые цветовые тона, а также их разбелы, тона и оттенки. Таким образом обычно поступают в приложениях, связанных с раскраши- ванием и мультипликацией, где требуется очень точное управление цветом. УПРАЖНЕНИЯ 17.1. Получите уравнение для уровней интенсивности, которые можно пред- ставить с помощью конфигураций пэлов размером тХт, где каждый пэл задается w битами. 17.2. Напишите программы, необходимые для проведения гамма-коррекции черно-белого изображения с использованием таблицы цветов. Входными парамет- рами являются у, /0, т — желаемое число уровней интенсивности и с — констан- та из уравнения (17.3). 17.3. Составьте общий алгоритм, позволяющий выводить на экран массив пэлов на двухуровневом устройстве графического вывода. Входными данными для алгоритма являются: а) массив интенсивностей пэлов размером тХт, где каждый пэл представляется w битами; б) матрица нарастающей последователь- ности размером пХп. Предполагается, что устройство вывода обладает разреше- нием т-пХт-п. 17.4. Решите предыдущую задачу с помощью метода упорядоченного возбуж- дения. Устройство вывода имеет разрешение тХт, совпадающее с размерностью входного массива интенсивностей пэлов. 17.5. Составьте алгоритм, позволяющий вывести на экран двухуровневого устройства многоугольник, заполненный узором размером пХп. 17.6. Если некоторые узоры используются для заполнения многоугольника, изображаемого на растровом дисплее с чересстрочной разверткой, то все «вклю- ченные» пэлы будут попадать либо на нечетные, либо на четные строки развертки, в результате чего появится слабое мерцание. Измените алгоритм из упражнения 17.5, чтобы можно было переставить строки в конфигурации размером пХп так, чтобы следующие друг за другом копии конфигурации попеременно использовали а б Рис. 17.27. Результаты, полученные с помощью уровня интенсивности 1 (см. рис. 17.3). а — с чередованием (подсвеченные пэлы расположены на обеих строках развертки); б — без чередования (все подсвеченные пэлы лежат на одной строке развертки) нечетные и четные строки развертки. На рис. 17.27 показаны результаты, полу- ченные с помощью изображенного иа рис. 17.8 уровня интенсивности 1 с использо- ванием и без использования такого чередования. 17.7. Постройте геометрическое место точек с постоянными значениями яр- кости 0,25, 0,50 и 0,75, задаваемыми как У=0,30й-|-0,59G+0,11В, на кубе RGB, двойном конусе HLS и шестигранном конусе HSV.
Цвет в машинной графике 341 17.8. Почему противоположные концы спектра на цветовом графике МКО соединены прямой линией? 17.9. Какими комбинациями цветов R, G и В определяется интенсивность в моделях YIQ, HSV и HLS? 17.10. Вычислите значения яркости аддитивных и субтрактивных основных цветов в модели YIQ. Расположите цвета в соответствии с их яркостью В резуль- тате получатся относительные интенсивности, с которыми эти цвета появляются на экране черно-белого телевизора или воспринимаются нашими глазами 17.11. Рассмотрите проект растрового дисплея, в котором для задания цвета используется не модель RGB, а модель HSV или HLS. 17.12. К каким цветовым моделям наиболее легко применяются правила цветовой гармонии? 17.13. Определите координаты х, у и г основных телевизионных цветов модели RGB на цветовом графике МКО. Получите преобразование из модели RGB в цветовые координаты МКО.
ЛИТЕРАТУРА 1. Adage Software Reference Manual, Adage Corporation, Boston, Mass., 1967. 2. Ahuja D. V., An Algorithm for Generating Spline-like Curves, IBM Systems Journal, 7 (3/4), 1968, pp. 206—217. . 3. Ahuja D. V., Coons S. A., Geometry for Construction and Display, IBM Sys- tems Journal, 7 (3/4), 1968, pp. 188—205. 4. Akima H., A New Method of Interpolation and Smooth Curve Fitting Based on Local Procedures, Journal of the ACM, 17(4), Oct. 1970, pp. 589—602. 5. Akima H., A method of Bivariate Interpolation and Smooth Surface Fitting Based on Local Procedures, Communications of the ACM, 17(1), Jan. 1974, pp. 18—20. 6. Akin R. H., Hood J. M., Photometry, в книге Luxemberg H. R., Kuehn R. L. (eds.), Display Systems Engineering, McGraw-Hill, New York, 1968. 7. Anderson S. E., Computer Animation a survey, Journal of Micrographics, 5(a), Sept. 1971, pp. 13—20. 8. American National Standards Institute, ANSI X3H32 Proposal for Structure, Document X3H32/81-09R1, Apr. 20, 1981; ANSI X3H31 Attributes Proposal, Document X3H31/81-10R1, Apr. 20, 1981; ANSI X3H31 Status Report on the H31 Strawman Proposal on Input Functionality, Document X3H31/81-11R1, Apr. 20, 1981. 9. AokiM., Levine M., Computer Generating of Realistic Pictures, Computers and Graphics, 3, 1978, pp. 149—161. 10. Apollo Domain Architecture, Apollo Computer, North Billerica, MA, Febr., 1981. 11. Appel A., The Notion of Quantitative Invisibility and the Machine Rendering of Solids, Proc, of the ACM National Conference, Thompson Books, Washing- ton, D. C., 1967, pp. 387. 12. Appel A., Some Techniques for Shading Machine-Renderings of Solids, SJCC 1968, Thompson Books, Washington, D. C., pp. 37—45. 13. Armit A. P., Forrest A. P., Interactive Surface Design, Computer Graphics 1970, Brunel University, Apr. 1970. 14. Armit A. P., The Interactive Languages of Multipatch and Multiobject Design Systems, Computer Aided Design, 4(1), Autumn 1971, ppi 10—15*. 15. Armstrong J. R., Design of a Graphic Generator for Remote Terminal Appli- cation, IEEE Transactions on Computers, C-22(5), May 1973, pp. 464—468. 16. Atherton P., Weiler K-, Greenberg D., Polygon Shadow Generation, S1GG- RAPH’78 proceedings, Computer Graphics, 12(3), Aug. 1978, pp. 275—281. 17. Badler N. I., Disk Generators for a Raster Display Device, Computer Graphics and Image Processing, 6(6), Dec. 1977, pp. 589—593. 18. Baecker R. M., Picture-Driven Animation, SJCC 1969, AFIPS Press, Montvale, N. J., pp. 273—288. 19. Baecker R. M., A Conversational Extensible System for the Animation of Shaded Images, SIGGRAPH’76 proceedings, Computer Graphics, 10(2), Summer 1976, pp. 32—39. 20. Barnhill R. E., Riesenfeld R. F. (eds.), Computer Aided Geometric Design, Academic Press, New York, 1975.
Литература 343 21. Barnhill R. Е., Brown J. H./ Klucewicz I. M., A New Twist in Computer Aided Geometric Design, Computer Graphics and Image Processing, 8(1), Aug. 1978; pp. 78—91. 22. Barrett R. C., Jordan B. W. (Jr.).^Scan-Conversion Algorithms for a Cell Or- ganized Raster Display, Communications of the ACM, 17(3), March 1974, pp. 157—163. 23. Baskin H. B., Morse S. P., A Multilevel Modeling Structure for Interactive Graphics Design, IBM Systems Journal, 7(3/4), 1968, pp. 218—228. 24. BaskettF., ShustekL., The Design of a Low-Cost Video Graphics Terminal, SIGGRAPH’76 proceedings, Computer Graphics, 10(2), Summer 1976, pp. 235— 240. 25. Batter J. J., Brooks F. P. (Jr.), GROPE-1: a Computer Display to the Sense of Feel, IFIP 1971, North-Holland, Amsterdam, pp. 759—763. 26. Baumgart B. G., Geometric Modeling for Computer Vision, Stanford Univ. Computer Science Dept., AIM-249, STAN-CS-74-463, Oct. 1974. 27. Baumgart B. G., A Polyhedron Representation for Computer Vision, NCC 1975, pp. 589—596. 28. Bayer В. E., An Optimum Method for Two-Level Rendition of Continuous- Tone Pictures, International Conference on Communications, Conference Re- cord, 1973, pp. (26—ll)-(26—15). 29. Bechtolsheim A., BaskettF., High-Performance Raster Graphics for Micro- computer Systems, Proc. 1980 SIGGRAPH Conference, Computer Graphics, 14(3), July 1980, pp. 43—47. 30. Belser K., Comment on an Improved Algorithm for the Generation of Non- parametric Curves, IEEE Transactions on Computers, C-25 (1), Jan. 1976, p. 103. 31. Bergeron R. D., Bono P., Foley J. D., Graphics Programming Using the Core System, Computing Surveys, 10(4), Dec. 1978, pp. 389—443. 32. BerthodM., Maroy J., Learning in Syntactic Recognition of Symbols Drawn on a Graphic Tablet, Computer Graphics and Image Processing, 9(2), Febr. 1979, pp. 166—182. 33. Bezier P., Numerical Control — Mathematics and Applications, A. R. For- rest (trans.), Wiley, London, 1972. 34 Bezier P., Mathematical and Practical Possibilities of UNISURF, in: Barn- hill R. E., Riesenfeld R. F. (eds.), Computer Aided Geometric Design, Aca- demic Press, New York, 1974. 35. Bibberman L. M., Perception of Displayed Information, Plenum, New York, 1973. 36. Birren F., Creative Color, Van Nostrand Reinhold Co., New York, 1961. 37. Bitzer D. L., Slottow H. G., The Plasma Panel: a Digitally Addressable Dis- play with Inherent Memory, FJCC 1966, Spartan Books, Washington, D. C., pp. 541—547. 38. Blatt H., Conic Display Generator Using Multiplying Digital-Analog Conver- ters, FJCC 1967, Thompson Books, Washington, D. C., pp. 177—184. 39. Blinn J. F., Goodrich A. C., The Internal Design of the IG Routines: An In- teractive Graphics System for a Large Time-Sharing Environment, SIGG- RAPH’76 proceedings, Computer Graphics, 10(2), Summer 1976, pp. 229—234. 40. Blinn J. F., Newell M. E., Texture and Reflection in Computer Generated Images, Communications of the ACM, 19(10), Oct. 1976, pp. 542—547. 41. Blinn J. F., Models of Light Reflection for Computer Synthesized Pictures, SIGGRAPH’77 proceedings, Computer Graphics, 11(2), Summer 1977, pp. 192— 198. 42. Blinn J. F., A Homogeneous Formulation for Lines in 3-Space, SIGGRAPH’77 proceedings, Computer Graphics, 11(2), Summer 1977, pp. 237—241. 43. Blinn J. F., Newell M. E., Clipping Using Homogeneous Coordinates, SIGG- RAPH’78 proceedings, Computer Graphics, 12(3), Aug. 1978, pp. 245—251. 44. Blinn J. F., Simulation of Wrinkled Surfaces, SIGGRAPH’78 Proceedings, Computer Graphics, 12(3), Aug. 1978, pp. 286—292. 45. Blinn J. F., Computer Display of Curved Surfaces, Ph. D. dissert., Univ, of Utah, Dept, of Computer Science, Dec. 1978.
344 Литература 46. BlinnJ.F., Carpenter L., Lane J., Whitted T., Scan Line Methods for Dis- playing Parametrically Defined Surfaces, Communications of the ACM, 23(1), Jan. 1980, pp. 23—24. 47. Boehm B., et al., Interactive Problem-Solving — an Experimental Study of Lock-out Effects, Proc. 1971 SJCC, pp. 205—210. 48. Bolt R. A., Spatial Data-Management, Report to DARPA, MIT Architecture Machine Group, Cambridge, Mass., 1979. 49. Bolt R. A., Put-That-There: Voice and Gesture at the Graphics Interface, SIGGRAPH’80 Proceedings, Computer Graphics, 14(3), July 1980, pp. 262—270. 50. Bond A. H., RightnourJ., Coles L. S., An Interactive Display Monitor in a Batch-processing Environment with Remote Entry, Communications of the ACM, 12(11), Nov. 1969, pp. 595—603. 51. Bouknight W. J., An Improved Procedure for Generation of Half-tone Compu- ter Graphics Representations, Univ. Ill. Coord. Sci. Lab., R-432, Sept. 1969. 52. Bouknight W. J., Kelly К. C., An Algorithm for Producing Half-tone Computer Graphics Presentations with Shadows and Movable Light Sources, SJCC 1970, AFIPS Press, Montvale, N. J., pp. 1—10. 53. Bouknight W. J., A Procedure for Generation of Three-Dimensional Half- toned Computer Graphics Representations, Communications of the ACM, 13(9), Sept. 1970, pp. 527—536. 54. Bowman W. J., Graphic Communication, Wiley, New York, 1968. 55. Bracchi G., SomalvicoM., An Interactive Software System for Computer Aided Design: An Application to Circuit Project, Communications of the ACM, 13(9), Sept. 1970, pp. 537—545. 56. Braid I. C., The Synthesis of Solids Bounded by Many Faces, Communications of the ACM, 18(4), Apr. 1975, pp. 209—216. 57. Brenner A. E., de Bruyne P., A Sonic Pen: A Digital Stylus System, IEEE Trans, on Computers, EC-19(6), June 1970, pp. 546—548. 58. BresenhamJ. E., Algorithm for Computer Control of Digital Plotter, IBM System Journal, 4(1), 1965, pp. 25—30. 59. Bresenham J. E., A Linear Algorithm for Incremental Digital Display of Cir- cular Arcs, Communications of the ACM, 20(2), Febr, 1977, pp. 100—106. 60. Brown R., On-Line Computer Recognition of Hand-Printed Characters, IEEE Trans, on Computers, EC-13(12), Dec. 1964, pp. 750—752. 61. Brown F. H., Zayac M. T., A Multi-Color Plasma Panel Display, Owens-Il- linois, 1971. 62. Brown H. G., O’Brien C. D., SawchukW., Storey J., TELIDON: A New Approach to Videotex System Design, IEEE Trans, on Consumer Electronics, Special Issue on TELETEXT and VIEWDATA, July 1979. 63. Bui-Tuong, Phong., Illumination for Computer-Generated Pictures, Communi- cations of the ACM, 18(6), June 1975, pp. 311—317. 64. Burtnyk N., WeinM., Interactive Skeleton Techniques for Enhancing Motion Dynamics in Key Frame Animation, Communications of the ACM, 19(10), Oct. 1976, pp. 564—569. 65. Burton R. P., Real-time Measurement of Multiple Three-dimensional Positi- ons, Univ. Utah Computer Sci. Dept., UTEC-CSc-72-122, 1972, NTIC AD-262 028. 66,. Burton R. P., Sutherland I. E., Twinkle Box: A Three-Dimensional Computer Input Device, NCC 1974, AFIPS Press, pp. 513—520. 67. Burton W., Representation of Many-sided Polygons and Polygonal Lines for Rapid Processing, Communications of the ACM, 20(3), March 1977, pp. 166—171. 68. Butland J., Surface Drawing Made Simple, Computer-Aided Design, 11(1), Jan. 1979, pp. 19—22. 69. BYTE, Special Issue on Smalltalk, 6(8),'Aug. 1981. 70. California Computer Products, Inc. Calcomp Subroutine Reference Manual, California Computer Products, Inc., Anaheim, California 92801. 71. Calvert T. W., Projections of Multidimensional Data for Use in Man Computer Graphics, FJCC 1968, Thompson Books, Washington, D.G., pp. 227—231. 72. Capowski J. J., Matrix Transform Processor for Evans and Sutherland LDS-2
Литература. 345 Graphics System, IEEE Trans, on Computers, C-27(7), July 1976, pp, 703—714. 73. CardS., English W.K-, Burr B. J., Evaluation of Mouse, Rate-controlled Isometric Joystick, Step. Keys, and Text Keys for Text Selection on a CRT, Ergonomics, 21(8), Aug. 1978, pp. 601—613. 74. Card S., Moran T., Newell A., The Keystroke-Level Model for User Perfor- mance Time with Interactive Systems, Communications of the ACM, 23(7), July 1980, pp. 396—410. 75. Carlbom I., Paciorek J., Geometric Projection and Viewing Transformations, Computing Surveys, 1(4), 1978, pp. 465—502. 76. Carlbom, Ingrid B., System Architecture for High-Performance Vector Grap- hics, Ph. D. thesis, Dept, of Computer Science, Brown University, Providence, R. I., 1980. 77. Carpenter L., Fournier A., Fussel D., Fractal Surfaces, CACM 1981. 78. Carterette В. C., Friedman M. P. (eds.), Handbook of Perception, V, Seeing, Academic Press, New York, 1975. 79. Caruthers L., van Dam A., User’s Tutorial for the General Purpose Graphics System, Technical Report, Katholieke Universiteit, Nijmegen, The Netherlands, 1975. 80. Castleman P. A. et al., The Implementation of the PROPHET System, NCC 1974, AFIPS Press, p. 457—468. 81. Catmull E., A Subdivision Algorithm for Computer Display of Curved Sur- faces, Univ. Utah Computer Sci. Dept., UTEC-CSc-74-133, Dec. 1974. 82. Catmull E., Computer Display of Curved Surfaces, Proc. IEEE Conf, on Com- puter Graphics, Pattern Recognition and Data Structure, May 1975; Tutorial and Selected Reading in Interactive Computer Graphics, H. Freeman (ed.), IEEE, 1980, p. 309—315. 83. Catmull E., A Hidden-Surface Algorithm with Anti-Aliasing, SIGGRAPH’78 Proceedings, Computer Graphics, 12(13), Aug. 1978, pp. 6—11. 84. Catmull E., Clark J., Recursively Generated В-Spline Surfaces on Arbitrary Topological Meshes, Computer Aided Design, 10(6), Nov. 1978. 85. Catmull E., The Problems of Computer-Assisted Animation, SIGGRAPH’78 Proceedings, Computer Graphics, 12(3), Aug. 1978, pp. 348—353. 86. Catmull E., A Tutorial on Compensation Tables, SIGGRAPH’79 Proceedings, Computer Graphics, 13(2), Aug. 1979, pp. 1—7. 87. Catmull E., Smith A. R., 3-D Transformations of Images in Scanline Order, SIGGRAPH’80 Proceedings, Computer Graphics, 14(3), July 1980, pp. 279— 285. 88. Chasen S. H., The Introduction of Man-Computer Graphics into the Aerospace Industry, FJCC 1965, Spartan Books, Washington, D. C., pp. 883—892. 89. Chasen S. H., Geometric Principles and Procedures for Computer Graphics Applications, Prentice-Hall, Englewood Cliffs, N. J., 1978. 90. Cheek T. B., A Graphic Display System Using Raster-Scan Monitors and Real Time Scan Conversion, 1973 SID Int. Symp. Dig. Tech. Papers, May 1973, pp. 56. 91. Cheriton D., Man-Machine Interface Design for Timesharing Systems, Proc. ACM 1976 Conference, pp. 362—366. 92. Christ R. F., Review and Analysis of Color Coding Research for Visual Dis- plays, Human Factors, 17(6), June 1975, pp. 542—570. 93. Christensen C., Pinson E. N., Multi-function Graphics for a Large Computer System, FJCC 1967, Thompson Books, Washington, D. C., pp. 697—712. 94. Citron J., Whitney J. H., CAMP: Computer Assisted Movie Production, FJCC 1968, Thompson Books, Washington, D. C., pp. 1299—1308. 95. Clark J. H., Designing Surfaces in 3-D, Communications of the ACM, 19(8), Aug. 1976, pp. 454—460. 96. Clark J. H., Hierarchical Geometric Models for Visible Surface Algorithms, Communications of the ACM, 19(10), Oct. 1976, pp. 547—554. 97. Clark J. H., Parametric Curves, Surfaces and Volumes in Computer Graphics and Computer-aided Geometric Design, NASA Ames Research Center, 1978.
346 Литература 98. Clark J. H., A VLSI Geometry Processor for Graphics, IEEE Computer, 12(7), J July 1980. « 99. Cohen D., Lee T. M. P., Fast Drawing fo Curves for Computer Display, SJCC „ 1969, AFIPS Press, Montvale, N. J., pp. 297—307. 100. Comba P. G., A Procedure for Detecting Intersections fo Three Dimensional Objects, Journal of the ACM, 15(3), July 1968, pp. 354. 101. Computer Aided Design Centre, GINO-F User Manual, Cambridge, England, Dec. 1976. 102. Cook R. L., Torrance K., A Reflectance Model for Computer Graphics, SIGG- RAPH’81 Proceedings, Computer Graphics, 15(3), Aug. 1981, pp. 307—316. 103. Coons S. A., Computer Graphics and Innovative Engineering Design, Data- mation, May 1966, p. 32. 104. Coons S. A., Surfaces for Computer Aided Design of Space Forms, MIT Project Mac, TR-41, June 1967. 105. Cornsweet T. N., Visual Perception, Academic Press, New York, 1970. 106. Cornwell B., Computer Generated Simulation Films, Inf.Disp., 8(1), Jan. 1971, pp. 21. 107. Cotton L, Network Graphic Attention Handling, Online 72 International Con- ference, Brunel University, Uxbridge, England, pp. 465—490. 108. Creagh L. T., KmetzA. R., Reynolds R. A., Liquid Crystal Displays, 1971 IEEE Int. Conv. Dig., pp. 630. 109. CrowF. C,. Shadow Algorithms for Computer Graphics, SIGGRAPH’77 Pro- ceedings, Computer Graphics, 11(2), Summer 1977, pp. 242—247. HO. CrowF. C., The Aliasing Problem in Computer-Generated Shaded Images, Communications of the ACM, 20(11), Nov. 1977, pp. 799—805. 111. CrowF. C., Shaded Computer Graphics in the Entertainment Industry, Com- puter J., 11(3), March 1978, pp. 11—22. 112. CrowF. C., The Use of Grayscale for Improved Raster Display of Vectors and Characters, SIGGRAPH’78 Proceedings, Computer Graphics, 12(3), Aug. 1978, pp. 1—5. Г13. CrowF., A Comparison of Antialiasing Techniques, IEEE Comparer Graphics and Applications, 1(1), Jan. 1981, pp. 40—49. 114. Csun C. A., Real-Time Computer Animation, IFIP 1974, North-Holland, Amsterdam, pp. 707—711. 115. Danielsson P. E., Comments on a Circle Generator for Display Devices, Com- puter Graphics and Image Processing, 7(2), Apr. 1978, pp. 300—301. 116. Date C., An Introduction to Database Systems, 3rd ed., Addison-Wesley, Rea- ding, Mass, 1981. 117. Davis M. R., Ellis T. O., The Rand Tablet: A Man-Machine Graphical Com- munication Device, FJCC 1964, Spartan Books, Baltimore, Md., pp. 325—331. 118. Davis S., Computer Data Displays, Prentice-Hall, Englewood Cliffs, N. J., 1969. 119. Davson H. (ed.), The Eye, Academic Press, New York, 1962. 120. DeFanti T. A., The Digital Component of the Circle Graphics Habitat, NCC 1976, AFIPS Press, pp. 195—203. 121. DeFanti T. A., ed., SIGGRAPH Video Tape Review, № 1, 1980. 122. Denert E., GRAPHEX68: Graphical Language Features in Algol 68, Compu- ters and Graphics, 1, 1975, pp. 195—202. 123. Denes P. R., Gershkoff I. K., An Interactive System for Page Layout Design, Proc. ACM Nat. Conf., 1974, p. 212. 124. Denes P. B., A Scan-Type Graphics System for Interactive Computing, Proc. IEEE Conf, on Computer Graphics, Pattern Recognition and Data Structure, May 1975, pp. 21. 125. Dertouzos M. L., Graham H. L., A Parametric Graphical Display Technique for Online Use, FJCC 1966, Spartan Books, Washington, D. C., pp. 201—210. 126. Dill J. D., Thomas J. J., On the Organization fo a Remote Low Cost Intel- ligent Graphics Teminal, SIGGRAPH’75 Proceedings, Computer Graphics, 9(2), 1975, pp. 1—8. 127. Dionne M.S., Mackworth A. K., ANTICS; A System for Animating LISP
Литература 347 Programs, Computer Graphics and Image Processing, 7(1), Febr. 1978, pp. 105— 119. 128. DorosM., Algorithms for Generation fo Discrete Circles, Rings and Disks, Computer Graphics and Image Processing, 10(4), Aug. 1979, pp. 366—371. 129. Drucker P. F., The Age of Discontinuity: Guidelines for our Changing Society, Harper and Row, New York, 1968. 130. Dube R., Herron G. J., Little F. F., Riesenfeld R. F., SURFED: An Interac- tive Editor for Free-Form Surfaces, Computer Aided Design, 10(2), March 1978, pp. 111—115. 131. Duda R. D., Hart P. E., Experiments in the Recognition of Hand-printed Text, II: Context Analysis, FJCC 1968, Thompson Books, Washington, D. C., pp. 1139—1150. 132. Dungan W., Stenger A., Sutty G., Texture Tile Considerations for Raster Graphics, SIGGRAPH’78 Proceedings, Computer Graphics, 12(3), Aug. 1978, pp. 130—134. 133. Eastman Kodak, Halftone Methods for the Graphics Arts. Data Book Q-3, Eastman Kodak Company, Rochester, N. Y„ 1968. 134 Eastman C., Lividini J., Stoker D., A Database for Designing Large Physical Systems, AFIPS Press, NCC 1975, pp. 603—611. 135 Eastman C., HenrionM., GLIDE: A Language for Design Information Sys- tems, SIGGRAPH’77 Proceedings, Computer Graphics, 11(2), 1977, pp. 24—33. 136. Embley D., Nagy G., Behavioral Aspects of Text Editors, Computing Surveys, 13(1), March 1981, pp. 33—70. 137. Encarnacao J., et al. The Workstation Concept of GKS and the Resulting Conceptual Differences to the GSPC Core System, SIGGRAPH’80 Proceedings, Computer Graphics, 14(3), July 1980, pp. 226—230. 138. Engel S., Granda R., Guidelines for Man/Display Interfaces, Technical Re- port TR 00.2720, 1975, IBM, Poughkeepsie, N. Y. 139. Englebart D. C., English W. K., A Research Center sor Augmenting Human Intellect, FJCC 1968, Thompson Books, Washington, D. C., p. 395. 140. English W. K., Englebart D. C., Berman M. L., Display-Selection Techni- ques for Text Manipulation, IEEE Trans, on Human Factors in Electronics, HFE-8(1), 1967, pp. 21—31. 141. Entwisle J., An Image-processing Approach to Computer Graphics, Computers and Graphics, 2(2), 1977, pp. Ill—118. 142. Erdahl A. C., Displaying Computer-generated Half-tone Pictures in Real Time, Univ. Utah Computer Sci. Dept., TR-14. 143. Evans and Sutherland Computer Corporation, Line Drawing System Model 1: System Reference Manual, Salt Lake City, Utah, May 1971. 144. Evans and Sutherland Computer Corporation, Picture System 2 User’s Manual, Evans and Sutherland Computer Corp., Salt Lake City, Utah, May 1977. 145. Evans and Sutherland Computer Corporation, Picture System 2/PDP-ll Re- ference Manual, E&S 901130-001-AL, Salt Lake City, Utah, 1977. 146. Evans and Sutherland Corporation, PS300 User’s Manual, Salt Lake City, Utah, 1981. 147. Eves H., A Survey of Geometry, Allyn and Bacon, Inc., Boston, 1965. 148. Ewald R. H., Fryer R. (eds.), Final Report of the GSPC State-of-the Art Sub- committee, Computer Graphics, 12(1/2), June 1978. 149. Faiman M., NievergeltJ. (eds.) Pertinent Concepts in Computer Graphics, Proc. 2nd Univ. Ill. Conf. Computer Graphics, University of Illinois Press, Urbana, 1969. 150. Faux I. D., Pratt M. J. Computational Geometry for Design and Manufacture, John Wiley, New York, 1979. [Имеется перевод: Фокс А., Пратт M. Вычисли- тельная геометрия. Применение в проектировании и на производстве.— М.: Мир, 1981.] 151. Feiner S., Nagy D., van Dam A., An Integrated System for Creating and Pre- senting Complex Computer-Based Documents, Proc. 1981 SIGGRAPH Confe- rence, Computer Graphics, 15(3), Aug. 1981, pp. 181—190.
1 348 Литература 152. Feldmann R. J., The Design of Computing Systems for Molecular Modeling, Ann. Rev. Biophys. Bioeng., 5, 1976, pp. 477—510. 153. Feng D. Y., Riesenfeld R. F., A Symbolic System for Computer-aided Develop- ment of Surface Interpolants, Software Pract. Exper., 8(4), July — August 1978, pp. 461—482. 154. Ferguson J., Multivariate Curve Interpolation, Journal of the ACM, 11(2), 1964, pp. 221—228. 155. Fields A., Maisano R., Marshall C., A Comparative Analysis of Methods for Tactical Data Inputting, Army Research Institute, 1977. 156. Fisher M. A., Nunley R. E., Raster Graphics for Spatial Applications, Com- puter Graphics, 9(2), Summer 1975, pp. 1—8. 157. Floyd R.W., Steinberg L., An Adaptive Algorithm for Spatial Gray Scale, SID 1975 Int. Symp. Dig. Tech. Papers, p. 36. 158. Foley J. D., Evaluation of Small Computers and Display Controls for Compu- ter Graphics, Computer Group News, 3(1), Jan./Feb. 1970, pp. 8—22. 159. Foley J. D., An Approach to the Optimum Design of Computer Graphics Sys- tems, Communications of the ACM, 14(6), June 1971, pp. 380—390. 160. Foley J. D., Software for Satellite Graphics Systems, Proc, of the ACM 1973 Annual Conference, pp. 76—80. • 161. Foley J. D., Wallace V. L., The Art of Natural Graphic Man-Machine Conver- sation, Proc. IEEE, 62(4), Apr. 1974, pp. 462—470. [Имеется перевод: Фоли Дж., Уоллес В. Искусство организации естественного графиче- ского диалога человек—машина, ТИИЭР, 62, 4, 1974. 162. Foley J. D., A Tutorial on the Satellite Graphics Systems, Computer, 9(8), Aug. 1976, pp. 14—21. 163. Foley J. D., User’s Manual: GWU Core System with Raster Extensions, The George Washington University, Dept, of EE&CS, technical report GWU-EE/ CS-79-13, Washington, D. C., 1979. 164. Foley J. D., Templeman J., Dastyar D., Some Raster Graphics Extensions to the Core System, SIGGRAPH’79 Proceedings, Computer Graphics, 13(2), Aug. 1979, pp. 15—24. 165. Foley J. D., The Structure fo Interactive Command Language, in: Guedj R. A. et al. (eds.), Methodology of Interaction, North-Holland, Amsterdam, 1980, pp. 227—234. 166. Foley J. D., Wallace V., Chan P., The Human Factors of Interaction Techni- ques, The George Washington University, Institute for Information Science and Technology Technical Report GWU-IIST-81-03, Washington, D. C., 1981; University of Kansas, Department of Computer Science TR-81-3, Lawrence, Kanses, 1981. 167. Foley J. D., Wenner P. A., The George Washington University Core System Implementation, SIGGRAPH’81 Proceedings, Computer Graphics, 15(3), Aug. 1981, pp. 123—131. 168. Forrest A. R., Interactive Interpolation of Approximation by Bezier Polyno- mials, Computer J., 15(1), Jan. 1972, pp. 72. 169. Forrest A. R., Mathematical Principles for Curve and Surface Representation, in: Curved Surfaces in Engineering, Brown I. J. (ed.), IPC Science and Techno- logy Press Ltd., Guildford, Surrey, England, 1972, pp. 5. 170. Forrest D. R., On Coons and Other Methods for the Representation of Curved Surfaces, Computer Graphics and Image Proceessing, 1(4), Dec. 1972, pp. 341. 171. Forrest A. R., A Computer Peripheral for Making Three-Dimensional Models, Automatisme, 16(6/7), June/July 1974, p. 347. 172. Freeman H., Loutrel P. P., An Algorithm for the Solution of the Two-Dimen- sional Hidden-Line Problem, IEEE Trans, on Computers, EC-16(6), Dec. 1967. 173. Freeman H., Computer Processing of Line-Drawing Images, Computer Surveys, 6(1), March 1974, pp. 57—93. 174. Frieden A., A CORE Viewing System for APL, Computer Graphics, 13(1), March 1979, pp. 55—77. 175. FRESS User’s Manual, Text Systems, Inc., Barrington, R. I., 1976.
Литература 349 176. Fryer R., A Fortran Windowing Technique for Simulation and CAD, Proc. Vector General User’s Group, 1972, pp. 1—16. 177. Fuchs H., Duran J., Johnson B., A System for Automatic Acquisition of Three-Dimensional Data, Proceedings of the 1977 NCC, AFIPS Press, pp. 49— 53. 178. Fuchs H., Kedem Z. M., Uselton S. P., Optimal Surface Reconstruction from Planar Contours, Communications of the ACM, 20(19), Oct. 1977, pp. 693—702. 179. Fuchs H., Distributing a Visible Surface Algorithm over Multiple Processors, Proceedings 1977 ACM National Conference, pp. 449—450. 180. Fuchs H., Barros J., Efficient Generation of Smooth Line Drawings on Video Displays, SIGGRAPH’79 Proceedings, Computer Graphics, 13(2), Aug. 1979, pp. 260—269. 181. Futrelle R. P., GALATEA, Interactive Graphics for the Analysis of Moving Images, IFIP, 1974, North-Holland, Amsterdam, pp. 712—716. 182. Galimberti R., Montanari U., An Algorithm for Hidden-Line Elim ination, Communications of the ACM, 12(4), Apr. 1969, pp. 206—211. 183. Garrett M., Logical Pick Device Simulation Algorithms for the Core System, Computer Graphics, 13(4), Feb. 1980, pp. 303—313. 184. Garrett M., A Unified Non-procedural Environment for Designing and Imple- menting Graphical Interfaces to Relational Data Base Management Systems, Ph. D. dissertation, Dept of EE & CS Technical Report GWU-EE/CS-80-13, The George Washington University, Washington, D. C., 1980. 185. GeldardF. A., The Human Senses, John Wiley, 1953. 186. Genisco Computers, Inc., GCT-3011 Programmable Graphics Processor, Ge- rt isco Computers, Inc., Irvine, Ca. 187. Geyer К. E., Wilson K. R., Computing with Feeling, Proc. IEEE Conf, on Computer Graphics, Pattern Recognition and Data Structure, May 1975, pp. 343—349. 188. Giloi W., Interacitve Computer Graphics — Data Structures, Algorithms, Lan- guages, Prentice-Hall, 1978. [Имеется перевод: Гилой В. Интерактивная машинная графика.— М.: Мир, 1981.] 189. Gino-F User Manual, Issue 2, Computer-Aided Design Centre, Cambridge, England, Dec. 1976. 190. Goldberg, Adele and David Robson, A Metaphor for User Interface Design, Xerox Pelo Alto Research Center, 1979. 191. Goodwing N., Cursor Positioning on an Electronic Display Using Lightpen, Lightgun or Keyboard for Three Basic Tasks, Human Factors, 17(3), June 1975, pp. 289—295. 192. Gordon W. J., Riesenfeld R. F., Bernstein-Bezier Methods for the Computer- aided Design of Free-Form Curves and Surfaces, Journal of the ACM, 21(2), Apr. 1974, pp. 393—410. 193. Gordon W. J., Riesenfeld R. F., В-Spline Curves and Surfaces, in R. E. Barn- hill, R. F. Riesenfeld (eds.), Computer Aided Geometric Design, Academic Press, P. Y„ 1974. 194. Gouraud H., Continuous Shading of Curved Surfaces, IEEE Transactions on Computers, C-20(6), June 1971, pp. 623—628. 195. Gray J. C., Compound Data Structures for Computer Aided Design, A Survey, Proc. ACM Nat. Conf., Thompson Books, Washington, D. C., 1967, pp. 355. 196. Gregory R. L., The Intelligent Eye, McGraw-Hill, London, 1970. 197. Griffiths J. G., A Surface Display Algorithm, Computer Aided Design, 10(1), Jan. 1978, pp. 65—73. 198. Griffiths J. G., A Bibliography of Hidden-Line and Hidden-Surface Algorithms, Computer Aided Design, 10(3), May 1978, pp. 203—206. 199. Groner G. F., Real-Time Recognition of Hand-Printed Text, FJCC 1966, Spartan Books, Washington, D. C., pp. 591—602. 200. Groner G. F., Clark R. L., Berman R. A., DeLand E. C., BIOMOD, An In- teractive Graphics System for Modeling, FJCC 1971, AFIPS Press, Montvale, N. J„ pp. 369—378.
350 Литература 201. Grossman D. D., Procedural Representation of Three-Dimensional Objects, ! IBM J. Res. Dev., 20(6), Nov. 1976, pp. 582. г 202. Status Report of the Graphics Standards Planning Committee, Computer Gra- , phics, 11, 1977. 203. Status Report of the Graphics Standards Committee, 'Computer Graphics, 13(3), Aug. 1979. 204. Guedj R., et al (ed.), Methodology of Interaction, North-Holland, Amsterdam, 1980. 205. Gupta S., Sproull R., Filtering Edges for Gray-Scale Displays, SIGGRAPH’81 Proceedings, Computer Graphics, 15(3), Aug. 1981, pp. 1—5. 206. Gupta S., Sproull R., A VLSI Arcnitecture for Updating Raster-Scan Dis- plays, SIGGRAPH’81 Proceedings, Computer Graphics, 15(3), Aug. 1981, pp. 71—78. 207. Gurwitz R. F., et al., BUMPS, A Program for Animating Projections, SIGG- RAPH’80 Proceedings, Computer Graphics, 14(3), July 1980, pp. 231—237. 208. Gurwitz R., Fleming R., van Dam A., MIDAS, A Microprocessor Instructional Display and Animation System, IEEE Transactions on Education, Febr. 1981. 209. Hamlin G., Foley J., Configurable Applications for Graphics Employing Sa- tellites (CAGES), SIGGRAPH’75 Proceedings, Computer Graphics, 9(2), Sum- mer 1975, pp. 9—19. 210. Hamlin G., GearC., Raster-Scan Hidden Surface Algorithm Techniques, SIGGRAPH’77 Proceedings, Computer Graphics, 11(2), Summer 1977, pp. 206. 211. Hanau P. R., Lenorovitz D. R., Prototyping and Simulation Tools for User/ Computer Dialogue Design, SIGGRAPH’80 Proceedings, Computer Graphics, 14(2), July 1980, pp. 271—278. 212. Hansen W., User Engineering Principles for Interactive Systems, Proceedings 1971 Fall Joint Computer Conference, pp. 523—532. 213. Hartke D. H., Sterling W. M., Shemer J. E., Design of a Raster Display Pro- cessor for Office Applications, IEEE Transactions on Computers, C-27(4), Apr. 1978, pp. 337—348. 214. Harvard University Laboratory for Computer Graphics, Harvard Library of Computer Graphics Mapping Collection, Cambridge, MA, 1980. 215. Hayes P., Ball E., Reddy R., Breaking the Man-Machine Communication Bar- rier, Computer, 14(3), March 1981, pp. 19—30. 216. Heindel L., Roberto J., LANG-PAK— An Interactive Language Design Sys- tem, Elsevier, New York, 1975. 217. Herot C. F., Graphical Input Through Machine Recognition of Sketches, Com- puter Graphics, 10(2), Summer 1976, pp. 97—102. 218. Herot C. F., et al., A Prototype Spatial Data Base Management System, SIG- GRAPH’80 Proceedings, Computer Graphics, 14(2), July 1980, pp. 63—70. 219. Hertz С. H., Mansson A., Color Plotter for Computer Graphics Using Three Electrically Controlled Ink Jets, IFIP 1974, North-Holland, Amsterdam, pp. 85—88. 220. Herzog B., In Memorium of Steven Anson Coons, Computer Graphics, 13(4), Febr. 1980, pp. 228—231. 221. Hiler H., Color Harmony and Pigments, Chicago, Favor, Ruhl, & Co. 222. Hoehn H. J., Martel R. A., A 60 Line per Inch Plasma Display Panel, IEEE Transactions on Electronic Devices, ED-18(9), Sept. 1971, p. 659. 223. Horn В. К P., Circle Generator for Display Devices, Computer Graphics and Image Processing, 5, 1976, pp. 280—288. 224. Hornbuckle G. D., The Computer Graphics/User Interface, IEEE Trans., HFE-8(1), March 1967, pp. 17—20. 225. Hosaka M., Kimura F., An Interactive Geometrical Design System with Hand- writing Input, IFIP 1977, North-Holland, Amsterdam, p. 167. 926. Hubschman H., ZuckerS., Frame-to-Frame Coherence and the Hidden Sur- face Computation, Constraints for a Convex World, SOGGRAPH’81 Proceedings, Computer Graphics, 15(3), Aug. 1981, pp. 45—54. 227. Hunt R. W. G., The Reproduction of Color, 3rd ed., Wiley, New York, 1975.
Литература 351 228. Hurwitz A., Citron J., Yeaton J., GRAF, Graphical Extensions to FORTRAN, SJCC 1967, Thompson Books, Washington, D. C., pp. 553—557. 229. International Business Machines Corp., IBM 2250 Display Model 3, Form No A27-2721-0. 230. IEEE Transactions on Consumer Electronics, Special Issue on TELETEXT and VIEWDATA, July, 1979. 231. Ikonas Graphics Systems, Inc., Raleigh, N. C. 232. Ingalls D., The Smalltalk Graphics Kernel, special issue on Smalltalk, BYTE, 6(8). Aug. 1981. 233. Integrated Software Systems Corp., DISSPLA Reference Manual, Integrated Software Systems Corp,, San Diego, Ca. 234. Irani K., Wallace V., On Network Linguistics and the Conversational Design of Queueing Networks, Journal of the ACM, 18, Oct. 1971, pp. 616—629. 235. Irby С. H., Display Techniques for Interactive Text Manipulation, NCC 1974, AF1PS Press, pp. 247—255. 236. International Standards Organization, Graphical Kernel System (GKS), Ver- sion 6.6, May 1981. 237. Jacobson E., Basic Color — An Interpretation of the Oswald Color System, Chicago, Paul Theobald, 1948. 238. Jarvis J. F., Two Simple Windowing Algorithms, Software — Practice and Experience, 5, 1975, pp. 115—122. 239. Jarvis J. F., Judice C. N., Ninke W. N., A Survey of Techniques for the Ima- ge Display of Continuous Tone Pictures on Bilevel Displays, Computer Graphics and Image Processing, 5(1), March 1976, pp. 13—40. 240. Jarvis J. F., Roberts C. S., A New Technique for Displaying Continuous Tone Images on a Bilevel Display, IEEE Trans., COM-24(8), Aug. 1976, pp. 891— 898. 241. Jarvis J. F., The Line Drawing Editor, Schematic Diagram Editing Using Pattern Recognition Techniques, Computer Graphics and Image Processing, 6(5), Oct. 1977, pp. 452—484. 242. Jensen K, Wirth K- and N., Pascal User Manual and Report, 2nd. ed., Sprin- ger-Verlag, New York, 1974. 243. Jern M., Color Jet Plotter, Computer Graphics, 11(1), Spring 1977, pp. 18. 244. Joblove G. H., Greenberg D., Color Spaces for Computer Graphics, SIGG- RAPH’78 Proceedings, Computer Graphics, 12(3), Aug. 1978, pp. 20—27. 245. Johnson C. L, SKETCHPAD III, A Computer Program for Drawing in Three Dimensions, SJCC 1963, Spartan Books, Balitmore, Md., pp. 347. 246. Johnson S, Lesk M., Language Development Tools, The Bell System Technical Journal, 57(6,2) July — August 1978, pp. 2155—2176. 247. Jordan B. W., Jr., Barrett R. C., A Scan Conversion Algorithm with Reduced Storage Requirements, Communications of the ACM, 16(11), Nov. 1973, pp. 676— 679. 248. Jordan B. W., Lennon W. J., Holm В. C., An Improved Algorithm for the Generation of Non-parametric Curves, IEEE Transactions on Computers, C-22( 12) Dec. 1973, pp. 1052—1060. 249. Jordan B. W., Jr., Barrett R. G., A Cell Organized Raster Display for Line Drawings, Communications of the ACM, 17(2), Febr. 1974, pp. 70—77. • 250. Judd D., Wyszecki G., Color in Business, Science, and Industry, John Wiley and Sons, New York, 1975. [Имеется перевод: Джадд Д., Вышецки Г. Цвет в науке и технике.— М.: Мир, 1978.] 251. Judice J. N., Jarvis J. F., Ninke W., Using Ordered Dither to Display Con- tinuous Tone Pictures on an AC Plasma Panel, Proc. SID, Fourth Quarter 1974, pp. 161 — 169. 252. Julesz B., Foundations of Cyclopean Perception, Chicago, University of Chi- cago Press, 1971. 253. Julesz B., Cooperative Phenomena in Binocular Depth Perception, American Scientist, 62, Jan.—Febr. 1974, pp. 32. 254. Kajiya J. T., Sutherland I. E., Cheadle E. C., A Random-Access Video Fra-
1 352 Литература ‘ me Buffer, Proc. IEEE Conf, on Computer Graphics, Pattern Recognition and. Data Structure, May 1975, pp. 1. 255. Kaplan M., Greenberg D., Parallel Processing Techniques for Hidden Surface Algorithms, SIGGRAPH’79 Proceedings, Computer Graphics, 13(2), Aug. 1979, pp. 300—307. 256. Kaplan G., Words into Action, IEEE Spectrum, 17(6), June 1980, pp. 22—25. 257. Kay A., Goldberg A., Personal Dynamsc Media, Computer* 10(3), March 1977, pp. 31—42. 258. Kay Alan C., Microelectronics and th'? Personal Computer, Scientific Ameri- can, 237(3), Sept. 1977, pp. 230—2441.' 259. Kay D., Greenberg D., Transparency for Computer Synthesized Images, S1G- GRAPH’79 Proceedings, Computer Graphics, 13(2), Aug. 1979, pp. 158—164. 260. Kelly K., Judd D., COLOR — Universal Language and Dictionary of Names, National Bureau of Standards Spec. Publ. 440, Government Printing Office Stock No. 003-003-01705-1, 1976. 261. Kennedy J. R., A System for Time-Sharing Graphic Consoles, FJCC 1966, Spartan Books, Washington, D. C., pp. 211—222. 262. Kilgour A. C., The Evolution of a Graphic System for Linked Computers, Software — Practice and Experience, 1, 1971, pp. 259—268. 263. Kilgour A. C., A Hierarchial Model of a Graphics System, Computer Graphics, 15(1), Apr. 1981, pp. 35—47. 264. Klemmer E. T., Keyboard Entry, Applied Ergonomics, March 1971, pp. 2—6. 265. Knott G. D., Reece D. K-, Modelab: A Civilized Curve-fitting System, Proc. ONLINE 72, Uxbridge, England, Sept. 1972. 266. Knowlton К. C., EXPLOR: A Generator of Images from Explicit Patterns, Local Operations, and Randomness, Proc. 1970 UA1DE Annual Meeting, Stromberg Datagraphix, pp. 544. 267. Knowlton К. C., Harmon L., Computer-Produced Gray Scales, Computer Graphics and Image Processing, 1(1), Apr. 1972, pp. 1. 268. Knowlton К- C., Virtual Pushbuttons as a Means of Person-Machine Interac- tion, Proc. IEEE Conf, on Computer Graphics, Pattern Recognition, and Data Structure, May 1975, pp. 350—351. 269. Knowlton К. C., Cherry L., ATOMS — A Three-D Opaque Molecule System for Color Pictures of Space-Filling or Ball-and-Stick Models, Computers and Chemistry, 1, 1977, pp. 161—166. • 270. Knuth D. E., The Art of Computer Programming, Volum 1: Fundamental Al- gorithms, Addison-Wesley, Reading, Mass., 1973. [Имеется перевод: Кнут Д. Е„ Искусство программирования для ЭВМ. Т. 1.— М.: Мир, 1976.] 271. Kriloff Н., Human Factor Considerations for Interactive Display Systems, in S. Trem, ed., Proceedings ACM/SIGGRAPH Workshop on User-Oriented De- sign of Interactive Graphics Systems, ACM 1976, pp. 45—52. 272. Kroemer К- H. E., Human Engineering the Keyboard, Human Factors, 14(1), Febr. 1974, pp. 51—63. 273. Kulsrud H. E., A General Purpose Graphic Language, Communications of the ACM, 11(4), Apr. 1968, pp. 247—254. 274. Lafue G., Recognition of Three-Dimensional Objects from Orthographic Vi- ews, SIGGRAPH’76 Proceedings, Computer Graphics, 10(2), Summer 1976, p. 103—108. 275. Laib G., Puk R., Stowell G., Integrating Solid Image Capability into a Gene- ral Purpose Calligraphic Graphics Package, SIGGRAPH’80 Proceedings, Computer Graphics, 14(3), July 1980, pp. 79—85. 276. Lampson, Butler W., Bravo Manual, in Alto User’s Handbook, Xerox Palo Alto Research Center, Palo Alto, CA, Nov. 1978, pp. 31—62. 277. Land R. L, Sutherland I. E., Real-Time, Color, Stereo, Computer Displays, Applied Optics, 8(3), 1969, pp. 721. 278. Land E. H., The Retinex Theory of Color Vision, Scientific American, Dec. 1977, pp. 108-128. 279. Lane J., Carpenter L., A Generalized Scan Line Algorithm for the Computer'
Литература 353 Display of Parametrically Defined Surfaces, Computer Graphics and Image Processing, 11, 1979, pp. 290—297. 280. Laws B. A., A Gray-Scale Graphic Processor Using Run-Length Encoding, Proc. IEEE Conf, on Computer Graphics, Pattern Recognition and Data Struc- ture, May 1975, pp. 7. 281. Lechner B. J., Liquid Crystal Displays, in M. Faiman, J. Nievergelt (eds.), Pertinent Concepts in Computer Graphics, University of Illinois Press, Urbana, 1969. 282. Lee T. M. P., A Class of Surface ror Computer Display, SJCC 1969, AFIPS Press, Montvale, N. J., pp. 309—319. 283. Levin J., A Parametric Algorithm for Drawing Pictures of Solid Objects Com- posed of Quadric Surface, Communications of the ACM, 19(10), Oct. 1976, pp. 555—563. 284. Levin J., QUADRIL: A Computer Language for the Description of Quadric- Surface Bodies, SIGGRAPH’80 Proceedings, Computer Graphics, 14(3), July 1980, pp. 86—92. 285. Levine K-, Core Standard Graphics Package for the VGI 3400, SIGGRAPH’78 Proceedings, Computer Graphics, 12(3), Aug. 1978, pp. 298—300. 286. Levinson J. Z., Psychophysics and TV, in T. S. Huang, O. J. Tretiak (eds.), Picture Bandwidth Compression, Gordon and Breach Science Publishers, 1972. 287. LevoyM., A Color Animation System Based on the Multiplane Technique, SIGGRAPH’77 Proceedings, Computer Graphics, 11(2), Summer 1977, pp. 65— 71. 288. Lewis H. R., SHAPESHIFTER: An Interactive Program for Experimenting with Complex-Plane Transformations, Proc. ACM Nat. Conf., 1968, pp. 717. 289. Licklider J. C. R., A Picture is Worth a Thousand Words — and It Costs .... SJCC 1969, AFIPS Press, Montvale, N. J., pp. 617—621. 290. Lieberman H., How to Color in a Coloring Book, SIGGRAPH’78 Proceedings, Computer Graphics, 12(3), Aug. 1978, pp. Ill—116. 291. Lipscomb J., Three-Dimensional Cues for a Molecular Computer Graphics System, Ph. D. Dissertation, Dept, of Computer Science, Univ, of North Ca- rolina, Chapel Hill, 1979. 292. Loutrel P. P., A Solution to the Hidden-Line Problem for Computer-drawn Polyhedra, IEEE Transactions on Computers, EC-19(3), March 1970, pp. 205— 213. 293. Luxenberg H. R., Kuehn R. L. (eds.), Display Systems Engineering, McGraw- Hill, New York, 1968. 294. Macaulay M., A Low Cost Computer Graphic Terminal, FJCC 1968, Thompson Books, Washington, D. C., pp. 777—785. 295. MacCallum K- J.> Surfaces for Interactive Graphical Design, Computer Jour- nal, 13(4), Nov. 1970, pp. 352. 296. Magnenat-Thalmann N., Thalmann D., A Graphical Pascal Extension Based on Graphical Types, Software-Practice and Experience, 11, 1981, pp. 55—62. 297. Mahl R., Visible Surface Algorithm for Quadric Patches, IEEE Transactions on Computers, C-21, Jan. 1972, pp. 1—4. 298. Mallgren A., Shaw A. C., Graphical Transformations and Hierarchic Picture Structures, Computer Graphics and Image Processing, 8,Oct. 1978, pp. 237—258. 299. Marcus А., Сотри ter-Assisted Chart Making from the Graphic Designer’s Perspective, SIGGRAPH’80 Proceedings, Computer Graphics, 14(3), July 1980, pp. 247—257. 300. Martin W. A., Computer Input/Output of Mathematical Expressions, 2nd Symposium Symbolic Algebraic Manipulation, ACM, March 1971, pp. 78. 301. Martin J., Design of Man-Computer Dialogues, Prentice-Hall, Englewood Cliffs, N. J., 1973. 302. Maruyama K-> A Procedure to Determine Intersections Between Polyhedral Objects, Int. J. Comp. Inf. Sci., 1(3), 1972, 255—266. 303. Mathematical Applications Group, Inc., 3-D Simulated Graphics, Datamation, Febr. 1968.
354 Литература 304. Matsushita Y., Hidden-Line Elimination for a Rotating Object, Communica-‘. tions_of the ACM, 15(4), April 1972, pp. 245—252. 305. Max N., Clifford W., Jr., Computer Animation of the Sphere Eversion, Com- puter Graphics, 9(1), Spring 1975, pp. 32—39. 306. Max N., ATOMLLL: — ATOMS with Shading and Highlights, SIGGRAPH’79 Proceedings, Computer Graphics, 13(2), Aug. 1979, pp. 300—307. 307. Maxwell E. A. Methods of Plane Projective Geometry Based on the Use of General Homogenous Coordinates, Cambridge Univ. Press, Cambridge, 1946. 308. Maxwell E. A., General Homogenous Coordinates in Space of Three Dimensi- ons, Cambridge Univ. Press, Cambridge, 1951. 309. Mazziotta J. C., Huang H. K-, THREAD (Three-Dimensional Reconstruction and Display) with Biomedical Applications in Neuron Ultrastructure and Com- puterized Tomography, NCC 1976, AFIPS Press, pp. 241—250. 310. McCracken T. E., Sherman B. W., Dwyer III S. J., An Economical Tonal Dis- play for Interactive Graphics and Image Analyst Data, Computers and Grap- hics, 1(1), 1975, pp. 79—94. 311. McKenzie John, Elton L. R. B., Lewis R., Interactive Computer Graphics in Science Teaching, Horwood, Chichester, 1978. 312. McLain D. H., Computer Construction of Surfaces through Arbitrary Points, IFIP 1974, North-Holland, Amsterdam, pp. 717—721. 313. McManigal D., Stevenson D., Architecture of the IBM 3277 Graphics Attach- ment, IBM Systems Journal, 19(3), 1980, pp. 331—344. 314. Megatek Corporation, San Diego, CA, 1981. 315. Mehr M. H., Mehr E. Manual Digital Positioning in 2 Axes: A Comparison of Joystick and Track Ball Controls, Proceedings 16th Annual Meeting, Human Factors Society, 1972. 316. Metcalfe R. M., Boggs D. R., ETHERNET: Distributed Packet Switching for Local Computer Networks, Communications of the ACM, 19(7), July 1976, p. 395—404. 317. Metzger R. A., Computer Generated Graphic Segments in a Raster Display, SJCC 1969, AFIPS Press, Montvale, N. J., pp. 161—172. 318. Meyer G. W., Greenberg D. P., Perceptual Color Spaces for Computer Gra- phics, SIGGRAPH’80 Proceedings, Computer Graphics, 14(3), July 1980, pp. 254—261. 319. MeyrowitzN., Moser M., BRUWIN: An Adaptable Design Strategy for Win- dow Manager/Virtual Terminal Systems, Proceedings of the 8th Annual Sym- posium on Operating Systems Principles (SIGOPS), Pacific Grove, CA, Dec. 1981. 320. Michener J. C., Foley J. D., Some Major Issues in the Design of the Core Gra- phics System, Computing Surveys, 10(4), 1978, pp. 445—464. 321. Michener J. C., van Dam A., A Functional Overview of the Core System with Glossary, Computing Surveys, 10(4), 1978, pp. 381—388. 322. Michener J. C., Some Viewing Considerations for the 1979 GSPC Core System, Intermetrics, 1979 (не опубликовано). 323. Michener J. C., Carlbom I. В., Natural and Efficient Viewing Parameters, SIGGRAPH’80 Proceedings, Computer Graphics, 14(3), July 1980, pp. 238—245 324- Miller R. B., Response Time in Man-Computer Conversational Transactions, 1968 FJCC, AFIPS Conf. Proc., Vol. 33, Montvale, N. J., AFIPS Press, 1968, pp. 267—277. 325. Miller S. W., Display Requirements for Future Man-Machine Systems, IEEE Trans., ED-18(9), Sept. 1971, pp. 616. 326. Miller Lance H-, An Investigation of the Effects of Output Variability and Out- put Bandwidth on User Performance in an Interactive Computer System, Re- port ISI/RR-76-50, Information Science Institute, University of Southern California, 1976. 327. Mitchell W. J., Computer-Aided Architectural Design, Petrocelli-Charter, New York, 1977. 328. Miyamoto E., Binford T. O., Display Generated by a Generalized Cone Rep-
Литература 355 reservation, Proa. IEEE Conf, on Computer Graphics, Pattern Recognition, and Data Structure, May 1975, pR. 385—387, 329. Moran T., The Command Language Grammar: A Representation for the User Interface of Interactive Computer Systems, International Journal of Man- Machine Studies, 15, 1981, pp. 3—50. 330. Morland D. V., Computer Generated Stereograms, Computer Graphics, 10(2), Summer 1976, pp. 19—24. 331. Munsell Color Company, Book of Color, 2441 North Calvert Street, Baltimore, MD, 21218, 1976. 332. Munson J. N., Experiments in the Recognition of Hand-Printed Text, I: Cha- racter Recognition, FJCC 1968, Thompson Books, Washington, D. C., pp, 1125— 1138. 333. Myer T. H., Sutherland 1, E., On the Design of Display Processors, Communi- cations of the ACM, 11(6), June 1968, pp. 410—414. 334. Myers A., An Efficient Algorithm for Computer Generated Pictures, Ohio State Univ. Computer Graphics Res, Group, 1975. 335. Nagesh A. R., Guj'ar U. G., OSCUBA — A Buffered Core Graphics System, School of Computer Science, University of New Brunswick, N. B., Canada, TR79-016, June 1979. 336. Nake F., Rosenfeld A., eds., Graphic Language, North-Holland, 1972. 337. Negroponte N., Recent Advances in Sketch Recognition, NCC 1973, AFIPS Press, pp. 663—675. 338. Negroponte N. (ed.), Computer Aids to Design and Architecture, Petrocelli/ Charter, New York, 1975. 339. Negroponte N., Raster-Scan Approaches to Computer Graphics, Computers and Graphics, 2(3), 1977, pp. 179. 340. Nemcsics A., The Coloroid Color System, Color Research and Application, 5(2), Summer 1980, pp. 113—120. 341. Newell M. E., Newell R. G., Sancha T. L., A New Approach to the Shaded Picture Problem, Proc. ACM Nat. Conf., 1972, pp. 443. 342. Newell M. E., The Utilization of Procedure Models in Digital Image Synthe- sis, Univ. Utah Computer Sci. Dept., UTEC-CSc-76-218, Summerl975, NTIS AD/A039 008/LL. 343. Newell A., Fahlman S., Sproull R. S., Proposal for a Joint Effort in Personal Scientific Computing, Computer Science Department, Carnegie-Mellon Uni- versity, Aug. 1979. 344. Newman W. M., A Graphical Technique for Numerical Input, Computer Jour- nal, 11(1), May 1968, pp. 63. 345. Newman W. M., A System for Interactive Graphical Programming, SJCC 1968, Thompson Books, Washington, D. C., pp. 47—54. 346. Newman W. M., Display Procedures, Communications of the ACM, 14(10), 1971, pp. 651—660. 347. Newman W. M., An Informal Graphics System Based on the Logo Language, NCC 1973, AFIPS Press, pp. 651—655. 348. Newman W. M., Sproull R. F., Principles of Interactive Computer Graphics, McGraw-Hill, New York, 1973. [Имеется перевод: Ньюмен У., Спрулл Р. Основы интерактивной машинной графики.— М.: Мир, 1976.] 349. Newman W. М., Sproull R. F., An Approach to Graphics System Design, Proc. IEEE, 62(4), April 1974, pp. 471—483. [Имеется перевод: Ньюмен, Спрулл. Методика разработки программного обеспечения для систем машин- ной графики.— Труды института инженеров по электротехнике и радио- электронике, 62, 4, 1974, с. 67—83.] 350. Newman W. М., Trends in Graphic Display Design, IEEE Transactions on Computers, C-25(12), Dec. 1976, pp. 1321—1325. 351. Newman W. M., van Dam A., A Brief History of Efforts towards Graphics Standardization, Computing Surveys, 10(4), 1978, pp. 365—380. 352. Newman W. M., Sproull R. F., Principles of Interactive Computer Graphics, 2nd ed., McGraw-Hill, New York, 1979.
356 Литература 353. Ng N., Marsland T., Introducing Graphics Capabilities to Several High-Level! Languages, Software — Practice and Experience, 8, 1978, pp. 629—639. J 354. Ninke W. H., Graphic 1, A Remote Graphical Display Console System, FJCC'I 1965, Spartan Books, Washington, D. C., pp. 839. 1 355. Ninke W. H., A Satellite Display Console System for a Multi-Access Central 's Computer, IFIP 1968, North-Holland, Amsterdam, pp. 962. 1 356. Noll A. M., Scanned-Display Computer Graphics, Communications of the ACM, 14(3), March 1971, pp. 143—150. 357. Notley M. G., A Graphical Picture Drawing Language, Computer Bulletin, 14(3), March 1970, pp. 68. 358. O’Brien Michael T., A Network Graphical Conferencing System, Rand Corpo- ration, Santa Monica, California, 1979 (N-1250-DARPA). 359. Ophir D., Shepherd B., Spinard R. J., Three-Dimensional Computer Display, Communications of the ACM, 12(6), June 1969, pp. 309—318. 360. Ortony A., A System for Stereo Viewing, Computer Journal, 14(2), May 1971, pp. 140—144. t 361. Ostwald W., Colour Science, Winsor & Winsor, London, 1931. 362. Parent R. E., A System for Sculpting 3-D Data, SIGGRAPH’77 Proceedings, Computer Graphics, 11(2), Summer 1977, pp. 138—147. 363. Parke F., Computer Generated Animation of Faces, Proceedings ACM National Conference, 1972, pp. 451. 364. Park F., Simulation and Expected Performance Analysis of Multiple Processor Z-Buffer Systems, SIGGRAPH’80 Proceedings, Computer Graphics, 14(3), July 1980, pp. 48—56. 365. Pavlidls T., Filling Algorithms for Raster Graphics, Computer Graphics and Image Processing, 10(2), June 1979, pp. 126—141. 366. Pavlidis T., Contour Filling in Raster Graphics, SIGGRAPH’81 Proceedings, Computer Graphics, 15(3), Aug. 1981, pp. 29—36. 367. Pearson D. E., Transmission and Display of Pictorial Informations, Halstead Press (Eiley), New York, 1975. 368. PERO, Three Rivers Computer Corporations, Pittsburgh, PA, 1980. 369. Peters G. J., Interactive Computer Graphics Application of the Bi-Cubic Parametric Surface to Engineering Design Problems, 1974 NCC, AFIPS Press, pp. 491—511. 370. Petty W. D., Slottow H. G., Multiple States and Variable Intensity in the Plasma Display Panel, IEEE Trans., ED-18(9), Sept. 1971, pp. 654. 371. Pfister G. F., A High Level Language Extension for Creating and Controlling Dynamic Pictures, Computer Graphics, 10(1), Spring 1976, pp. 1—9. 372. Piller E., Real-Time Raster Scan Unit with Improved Picture Quality, Com- puter Graphics, 14(1 & 2), July 1980, pp. 35—38. 373. Pitteway M., Algorithm for Drawing Ellipses or Hyperbolae with Digital Plotter, Computer Journal, 10(3), Nov. 1967, pp. 282—289. 374. Pitteway M., Watkinson D., Bresenham’s Algorithm with Grey Scale, Commu- nications of the ACM, 23(11), Nov. 1980, pp. 625—626. 375. PizerS., Numerical Computing and Mathematical Analysis, SRA, 1975. 376. Pobgee P. J., Parks J. R., Applications of a Low Cost Graphical Input Tablet, IFIP 1971, North-Holland, Amsterdam, pp. TA-4-169. 377. Porter T., Spherical Shading, SIGGRAPH’78 Proceedings, Computer Graphics, 12(3), Aug. 1978, pp. 282—285. 378. Porter T., The Shaded Surface Display of Large Molecules, SIGGRAPH’79 Proceedings, Computer Graphics, 13(2), Aug. 1979, pp. 234—236. 379. Potmesil M., Chakravarty I., A Lens and Aperture Camera Model for Synthetic Image Generation, SIGGRAPH’81 Proceedings, Computer Graphics, 15(3), Aug. J 1981, pp. 297—305. 1380. Preiss R. B., Storage CRT Display Terminals, Evolution and Trends, Computer, 11(11), Nov. 1978, pp. 20—28. 381. Prince D., Interactive Graphics for Computer-Aided Design, Addison-Wesley, 1971. [Имеется перевод: Принс M. Д. Машинная графика и автоматизация проектирования.— М.: Сов. радио, 1975.)
Литература 357 382. Pritchard D. Н., U.S. Color Television Fundamentals — A Review, IEEE Transactions on Consumer Electronics, CE-23(4), Nov. 1977, pp. 467—478. 383. Ramot J., Nonparametric Curves, IEEE Transactions on Computers, C-25(l), Jan. 1976, pp. 103—104. 384. Ratliff F., Mach Bands: Quantitative Studies on Neural Networks in the Re- tina, Holden-Day, San Francisco, 1965. 385. Rawson E. G., Vibrating Varifocal Mirrors for 3-D Imaging, IEEE Spectrum, 6(9), Sept. 1969, pp. 37. 386. Reisner P., Formal Grammar and Human Factors Design of an Interactive Graphics System, IEEE Trans, on Software Engineering, SE-7(2), March 1981, pp. 229—240. 387. Requicha A., Representations for Rigid Solids, Theory, Methods, and Systems, Computing Surveys, 12(4), Dec. 1980, pp. 437—464. 388. Resch R. D., The Topological Design of Sculptural and Architectural Systems, NCC 1973, AFIPS Press, pp. 643—650. 389. Resch R. D-, Portfolio of Shaded Computer Images, Proc. IEEE, 62(4), April ' 1974, pp. 496—502. [Имеется перевод: Рэш. Полутоновые машинные изобра- жения.— Труды института инженеров по электротехнике и радиоэлектро- нике, 62 , 4, 1974, с. 99—103.] 390. Richardus Р., Adler R., Map Projections, Elsiver North-Holland, New York, 1972. 391. Riesenfeld R. F., Applications of B-spline Approximations to Geometric Pro- blems of Computer-Aided Design, Univ. Utah Computer Sci. Dept., UTEC- CSc-73-126, March 1973. 392. Riesenfeld R. F., Aspects of Modeling in Computer-Aided Geometric Design, NCC 1975, pp. 597. 393. Riesenfeld R. F., Non-uniform B-spline Curves, Proc. 2nd USA-Japan Computer Conf., 1975, pp. 551. 394. Riesenfeld R. F., On Chaikin’s Algorithm, Computer Graphics and Image Pro- cessing, 4(3), 1975, pp. 304—310. 395. Robbins M. F., Beyer J. D., An Interactive Computer System Using Graphical Flowchart Input, Communications of the ACM, 13(2), Febr. 1970, pp. 115—118. ’ 396. Roberts L. G., Machine Perception of Three Dimensional Solids, MIT Lin- coln Lab., TR 315, May 1963. Also in Tippet J. T. et al. (eds.), Optical and Electro-Optical Information Processing, MIT Press, Cambridge, Mass., 1964, pp. 159. [Имеется перевод: Робертс Л. Автоматическое восприятие трехмер- ных объектов.— Интегральные роботы.— М.: Мир, 1973, с. 162—208.] 397. Roberts L. G., Homogeneous Matrix Representations and Manipulations of N-Dimensional Constructs, Document MS 1405, Lincoln Laboratory, Massa- chusetts, 1965. 398. Roberts L. G., The Lincoln Wand, FJCC 1966, Spartan Books, Washington D. C. pp. 223—228. 399. Roese J. A., Khalafalla A. S., Stereoscopic Viewing with PLZT Ceramics, Ferroelectrics, 10(1/2/3/4), pp. 47—51. 400. Roese J. A., McCleary L., Stereoscopic Computer Graphics for Simulation and Modeling, SIGGRAPH’79 Proceedings, Computer Graphics, 13(2), Aug. 1979, pp. 41—47. 401. Roetling P. G., Halftone Method with Edge Enchancement and Moire Suppres- sion, J. Opt. Soc. Am., 66(10), Oct. 1976, pp. 985—989. 402. Rogers D. F., Adams J. A., Mathematical Elements for Computer Graphics, McGraw-Hill, New York, 1976. [Имеется перевод: Роджерс Д., Адамс Дж. Математические основы машинной графики.— М.: Машиностроение, 1980.] 403. Romney G. W-, Watkins G. S., Evans D. C., Real Time Display of Computer Generated Half-tone Perspective Pictures, IFIP 1968, North-Holland, Amster- dam, pp. 973. 404. Rose G. A., Computer Graphics Communication Systems, IFIP 1968, North- Holland, Amsterdam, pp. 211. 405. Rosenfeld A., Picture Processing: 1977, Computer Graphics and Image Proces- sing, 7(2), April 1978, pp. 211—242.
-1 358 Литература; 406. Ross D. T., Rodriguez J. E., Theoretical Foundations for the Computer-Aided , Design System, SJCC 1963, Spartan Books, Baltimore, Md., pp. 305. 407. Ross D. T., The AED Approach to Generalized Computer-Aided Design, Proc. ACM Nat. Conf., Thompson Books, Washington, D. C., 1967, pp. 367. 408. Rougelot R. S., The General Electric Computer Color TV Display, inFaimanM., Niervergelt J., eds., Pertinent Concepts in Computer Graphics, University of Illinois Press, Urbana, 1969. 409. Rougelot R. S., Schumaker R. A., General-Electric Real-Time Display, NASA Rep, NAS 9-3916. 410. Rubin F., Generation of Nonparametric Curves, IEEE Transactions on Compu- ters, C-25(l), Jan. 1976, p. 103. 411. The Graphic 8 System, Sanders Corporation, Nashua, P. H., 1980. 412. Scala J., Teaching Art Through Computer Graphics, NCC 1976, AFIPS Press, pp. 185—189. 413. Schrack G., Design, Implementation and Experiences with a Higher-Level Graphics Language for Interactive Computer-Aided Design Purposes, Proc. ACM Symposium on Graphics Languages, Computer Graphics 10(1), Spring 1976, pp. 10—17. 414. Schwartz J. L., Taylor E. F., Computer Displays in the Teaching of Physics, FJCC 1968, Thompson Books, Washington, D. C., pp. 1285—1292. 415. Science Accessories Corporation, Graf/Pen Sonic Digitizer, Science Accessories Corp., Southport, Conn., 1970. 416. Sechrest S., Greenberg D-, A Visible Polygon Reconstruction Algorithm, SIG- GRAPH’81 Proceedings, Computer Graphics, 15(3), Aug. 1981, pp. 17—27. 417. Secrest T., NievergeltJ. (eds.), Emerging Concepts in Computer Graphics, 1967 Univ. Illinois Conf. Computer Graphics, Benjamin, New York, 1968. 418. Seybold J., The Xerox ‘Professional Workstation’, The Seybold Report, 10(16) April 1981, pp. 3—18, Seybold Publications, Media, PA. 419. Shamos M. L, Computational Geometry, Springer-Verlag, 1979- 420. Shaw A. C., Parsing of Graph-Representational Pictures, Journal of the ACM 17(3), July 1970, pp. 453—481. 421. Sherr S., Electronic Displays, Wiley, New York, 1979. 422. Shneiderman B., Human Factors Experiments in Designing Interactive Sys- tems, Computer, 12(12), Dec. 1979, pp. 9—19. 423. Shoup R. G., Some Quantization Effects in Digitally Generated Pictures, SID Int. Symp., 1973, pp. 58. 424. Shoup R. G., Color Table Animation, SIGGRAPH’79 Proceedings, Computer Graphics, 13(2), Aug. 1979, pp. 8—13. 425. Sibert J. L., Continuous-Color Choropleth Maps, Geo-Processing, 1, 1980, pp. 207—216. 426. Sloan K., Brown C., Color Map Techniques, Computer Graphics and Image Pro- cessing, 10(4), Aug. 1979, pp. 297—317. 427. Slottow H. G., The Plasma Display Panel: Principles and Prospects, 1970, IEEE Conf. Displ. Devices, pp. 57. 428. Slottow H. G., Plasma Displays, IEEE Transactions on Electron Devices, ED-23(7), July 1976. 429. Smith L. B., A Survey of Interactive Graphical Systems for Mathematics, Computer Surveys, 2(4), Dec. 1970, pp. 261—297. 430. Smith L. B., Use of Interactive Graphics to Solve Numerical Problems, Com- munications of the ACM, 1.3(10), Oct. 1970, pp. 625—634. 431. Smith D. P., GPL/I — A PL/I Extension for Computer Graphics, Proc. SJCC 1971, AFIPS Press, pp. 511—528. 432. Smith A. R., Color Gamut Transform Pairs, SIGGRAPH’78 Proceedings, Computer Graphics, 12(3), Aug. 1978, pp. 12—19. 433. Smith A. R., Tint Fill, SIGGRAPH’79 Proceedings, Computer Graphics, 13(2), Aug. 1979, pp. 276—283. 434. Sneeringer J., User-Interface Design for Text Editing: A Case Study, Softwa- re — Practice and Experience, 8, 1978, pp. 543—557.
Литература 359 435. Speer R., Sources of Films in the U. S., Canada and Europe, Computer Graphics, 8(3), Fall 1974, pp. 64. 436. Sproull R. F., Sutherland I. E., A Clipping Divider, FJCC 1968, Thompson Books, Washington, D. C., pp. 765—775. 437. Sproull R. F., Omnigraph, Simple Terminal-Independent Graphics Software, Xerox Palo Alto Research Center, CL-73-4, 1973. 438. Sproull R. F., Thomas E. L., A Network Graphics Protocol, Computer Grap- hics, 8(3), Fall 1974, pp. 27. 439. Sproull R. F., Newman W. M., The Design of Gray-Scale Graphics Software, Proc. IEEE Conf, on Computer Graphics, Pattern Recognition and Data Struc- ture, May 1975, pp. 18. 440. Sproull R. F., Raster Graphics for Interactive Programming Environments, SIGGRAPH’79 Proceedings, Computer Graphics, 13(2), Aug. 1979, pp. 83—93. 441. Stack T. R., Walker S.T., AIDS — Advanced Interactive Display System, 1971 SJCC, AFIPS Press, pp. 113—121. 442. Staudhammer J., On Display of Space Filling Atomic Models in Real-Time, SIGGRAPH’78 Proceedings, Computer Graphics, 12(3), Aug. 1978, pp. 167—172. 443. Stephenson M. B., Christiansen H. N., A Polyhedron Clipping and Capping Algorithm and a Display System for Three-Dimensional Finite Element Models, Computer Graphics, 9(3), Fall 1975, pp. 1. 444. Stone Harold, Critical Load Factors in Two-Processor Distributed Systems, IEEE Transactions on Software Engineering, SE-4(3), May 1978, pp. 254—258 445. Suenaga Y., Kamae T., Kobayashi T., A High-Speed Algorithm for the Gene- ration of Straight Lines and Circular Arcs, IEEE Transactions on Computers, TC-28(10), Oct. 1979, pp. 728—736. 446. Sutherland I. E., SKETCHPAD: A Man-Machine Graphical Communication System, SJCC 1963, Spartan Books, Baltimore, Md., pp. 329. 447. Sutherland I. E., Computer Inputs and Outputs, Scientific American, Sept. 1966. 448. Sutherland I. E., Ten Unsolved Problems in Computer Graphics, Datamation, 12(5), May 1966, pp. 22. 449. Sutherland W. R., On-Line Graphical Specification of Computer Procedures, MIT Lincoln Lab. Tech. Rep. 405, May 1966. 450. Sutherland I. E., A Head-Mounted Three Dimensional Display, FJCC’ 1968, Thompson Books, Washington, D. C., pp. 757—764. 451. Sutherland W. R-, ForgieJ.W., Morello M. V., Graphics in Time-Sharing, A Summary of the TX-2 Experience, SJCC 1969, AFIPS Press, N. J., pp. 629— 636. 452. Sutherland I. E., Three-Dimensional Data Input by Tablet, Proc. IEEE, 62(4), April 1974, pp. 453—461. [Имеется перевод: Сатерланд. Ввод трехмер- ных данных посредством вводной панели.— Труды института инженеров по электротехнике и радиоэлектронике, 62 , 4, 1974, с. 44—54.] 453. Sutherland I. Е., Hodgman G. W., Reentrant Polygon Clipping, Communica- tions of the ACM, 17(1), Jan. 1974, pp. 32—42. 454. Sutherland I. E., Sproull R. F., Schumacker R. A., A Characterization of Ten Hidden-Surface Algorithms, Computing Surveys, 6(1), March 1974, pp. 1—55. 455. Talbot P. A., Carr J-W., Coulter R., Hwang R. C., Animator: An On-Line Two-Dimensional Film Animation System, Communications of the ACM, 14(4), April 1971, pp. 251—259. 456. Tannas L., Flat Panel Displays: A Critique, IEEE Spectrum, 15(7), July 1978. 457. Teitelman W-, Real Time Recognition of Hand-drawn Characters, FJCC 1964, Spartan Books, Baltimore, Md., pp. 559. 458. Teitelman W., A Display-Oriented Programmer’s Assistant, Proceedings 5th International Joint Conference on Artificial Intelligence, 1977, pp. 905—915. 459. Tektronix, Inc., 4012 Graphic Computer Terminal, Tektronix, Inc., Beaverton, Oregon. 460. Puk R., Template User’s Manual, Megatek Corporation, 1981. 461. Thacker С. P., McCreight E. M., Mapson B. W., Sproull R. F., Boggs D. R.,
360 Литература Alto: A Personal Computer, in Siewiorek D., Bell G., and Newell A. M., Com- puter Structures: Readings and Examples, 2nd ed., McGraw-Hill, 1981. 462. Thanhouser N., Intermixing Refresh and Direct View Storage Graphics, SIG- GRAPH’78 Proceedings, Computer Graphics, 10(2), Summer 1978, pp. 13—18. 463. Thorton R. W., The Number Wheel: A Tablet Based Valuator for. Three-Di- mensional Positioning, SIGGRABH’79 Proceedings, Computer Graphics, 13(2), Aug. 1979, pp. 102—107. 464. Three Rivers Computing Corp., Graphic Display Programmer’s Guide, Three Rivers Computing Corp., Pittsburgh, Pa., June, 1978. 465. Tilbrook D., A Newspaper Page Layout System, M. Sc. Thesis, Department of Computer Science, University of Toronto, Canada, 1976, Demonstrated in SIG- GRAPH Video Tape Review, 1 May, 1980. 466. Time, News by Computer, Time Magazine, Dec. 13, 1973, p. 64. 467. Torrance К. E., Sparrow E. M., Polarization, Direction Distribution, and Off- Specular Peak Phenomena in Light Reflected from Roughened Surfaces, J. Opt. Soc. Am., 56(7), July 1966, pp. 916—925. 468. Torrance К. E., Sparrow E. M., Theory for Off-Specular Reflection from Ro- ughened Surfaces, J. Opt. Soc. Am., (57)9, Sept. 1967, pp. 1105 — 1114. ' 469. Traub A. T., Stereoscopic Display Using Rapid Varifocal Mirror Oscillations, Applied Optics, 6, 1967, pp. 1085—1087. 470. Trowbridge T. S., Reitz К. P., Average Irregularity Representation of Roug- hened Surfaces for Ray Reflection, J. Opt. Soc. Am., 65(5), May 1975, pp. 531— 536. 471. van Dam A., Microprogramming for Computer Graphics, ACM SICMICRO Bulletin, 1972. 472. van Dam A., Some Implementation Issues Relating to Data Structures for In- teractive Graphics, International Journal of Computer and Information Scien- ces, 1(4), 1972. 473. van Dam A., Stabler G. M., Harrington R. J., Intelligent Satellites for In- teractive Graphics, Proceedings of the IEEE, 62(4), April 1974, pp. 483—492. [Имеется перевод: Ван Дам, Стэблер, Харрингтон. Интеллектуальные са- теллитные системы для интерактивной графики.— Труды института инже- неров по электротехнике и радиоэлектронике, 62, 4, 1974, с. 84—96.] 474. van den Bos J., Caruthers L. C., van Dam A., GPGS: A Device-independent General Purpose Graphic System, SIGGRAPH’77 Proceedings, Computer Graphics, 11(2), Summer 1977, pp. 112—119. 475. van den Bos J., Definition and Use of Higher-Level Graphics Input Tools, SIGGRAPH’78 Proceedings, Computer Graphics, 12(3), Aug. 1978, pp. 38—42. 476. Vector General, Inc., Graphics Display System, Model 3404, System Reference Manual, Publ. No. M110700REF, Woodland Hills, CA, 1978. 477. Vector General Inc., Series 3400 Technical Manual, Vol. I: Graphics Display System, Publ. No. Ml 10700, Woodland Hills, CA, 1978. 478. Verdina J., Projective Geometry and Point Transformations, Allyn and Bacon, Boston, 1971. 479. Voelcker H. B., Requicha A. G., Geometric Modelling of Mechanical Parts and Processes, Computer, Dec. 1977, pp. 48—57. 480. Voelcker H. B. et al., The PADL-1.0/2 System for Defining and Displaying Solid Objects, SIGGRAPH’78 Proceedings, Computer Graphics, 12(3), Aug. 1978, pp. 257—263. 481. Wallace V. L., The Semantics of Graphics Input Devices, Proc. SIGGRAPH/ SIGPLAN Conf, on Graphics Languages, Computer Graphics, 10(1), April 1976, pp. 61—65. 482. Walton J. S., Risen W. M., Jr., Computer Animation, On-Line Dynamics Display in Real Time, J. Chem. Educ., 1969, pp. 334. 483. Ward A., Terman C., An Approach to Personal Computing, Laboratory for Computer Science, M. I. T., Cambridge, MA, 1979. 484. Warnock J., A Hidden-Surface Algorithm for Computer Generated Half-Tone Pictures, Univ. Utah Computer Sci. Dept., TR 4-15, 1969, NTIS AD-753 671.
Литература 361 485. Warnock J., The Display of Characters Using Grey Level Sample Arrays, SIG- GRAPH’80 Proceedings, Computer Graphics, 14(3), July 1980, pp. 302—307. 486. Wasserman G., Color Vision: An Historical Introduction, John Wiley and Sons, New York, 1978. 487. Watkins G. S., A Real-Time Visible Surface Algorithm, Univ. Utah Computer Sci. Dept., UTEC-CSc-70-101, June 1970, NTIS AD-762-004. 488. Watson R. W., Myer T. H., Sutherland I. E., Vosbury M. K-, A Display Processor Design, FJCC 1969, AFIPS Press, Montvale, N. J., pp. 209. 489. Wegner P., Programming with Ada: An Introduction by Means of Graduated Examples, Prentice-Hall, Englewood Cliffs, 1980. 490. Weiler K-, Atherton P., Hidden Surface Removal Using Polygon Area Sorting, SIGGRAPH’77 Proceedings, Computer Graphics 11(2), Summer 1977, pp. 214. 491. Weiler K-, Polygon Comparison Using a Graph Representation, SIGGRAPH’80 Proceedings, Computer Graphics, 14(3), July 1980, pp. 10—18. 492. WeimanC., Continuous Anti-Aliased Rotation and Zoom of Raster Images, SIGGRAPH’80 Proceedings, Computer Graphics, 14(3), July 1980, pp. 286— 293. 493. WeinM., Burtnyk N., Computer Animation, in BelzarJ., Holzman A. G., Kent A. (eds.), Encyclopedia of Computer Science and Technology, Vol. 5, Marcel Dekker, New York, 1976, pp. 397. 494. WeinM., Tanner P., Bechtold G., Burtnyk N., Hidden Line Removal for Vector Graphics, SIGGRAPH’78 Proceedings, Computer Graphics, 12(3), Aug. 1978, pp. 173—ISO. 495. Weinberg R., Computer Graphics in Support of Space Shuttle Simulation, SIGGRAPH’78 Proceedings, Computer Graphics, 12(3), Aug. 1978, pp. 82—86. 496. Weiss R. A., Be Vision, a Package of IBM 7090 Fortran Programs to Draw Orthographic Views of Combinations of Planes and Quadric Surfaces, Journal of the ACM, 13(2), April 1966, pp. 194. 497. Weller D., Williams R., Graphic and Relational Data Base Support for Prob- lem Solving, SIGGRAPH’76 Proceedings, Computer Graphics, 10(2), Summer 1976, pp. 183—189. 498. Wenner P. et al., Design Document for the George Washington University Implementation of the 1979 GSPC Core System, Institute for Information Sci- ence and Technology Technical Report GWU-IIST-80-06, Washington, DC, 1980. 499. Wentworth J. W., Color Television Engineering, McGraw-Hill, New York, 1965. 500 Whitted T., An Improved Illumination Model for Shaded Display, Communi- cations of the ACM, 23(6), June 1980, pp. 343—349. 501. Williams R., A Survey of Data Structures for Computer Graphics Systems, Computer Surveys, 3(1), March 1971, pp. 1—17. 502. Williams R., Krammer G., EX. GRAF, An Extensible Language Including Graphical Operations, Computer Graphics and Image Processing, 1, 1972, pp. 317—340. 503. Williamson H., Hidden-Line Plotting Program, Communications of the ACM, 15(2), Febr. 1972, pp. 100—103. 504. Williams R., On the Application of Relational Data Structures in Computer Graphics, Proc. 1974 IFIP Congress, North-Holland Pub. Co., pp. 722—726. 505. Williams R., Giddings G. M., A Picture-building System, Proc. IEEE Conf, on Computer Graphics, Pattern Recognition, and Data Structure, May 1975, pp. 304. 506. Williams L., Casting Curved Shadows on Curved Surfaces, SIGGRAPH’78 Proceedings, Computer Graphics, 12(3), Aug. 1978, pp. 270—274. 507. Wipke W. T., Heller S. R., Feldmann R. J., Hyde E. (eds.), Computer Rep- resentation and Manipulation of Chemical Information, Wilev, New York, 1974. 508. Wiseman N. E., Lemke H. U., Hiles J. O., PIXIE, A New Approach to Graphical Man-Machine Communication, Proc. 1969 CAD Conf., Southhamp- ton, IEE Conf. Pub., 51, pp. 463. 509. Woodson W. E., Human Engineering Guide, Univ, of California Press, 1954.
362 Литература 510. Woodsford Р. A., The Design and Implementation of the GINO 3D Graphics Software Package, Software — Practice and Experience, 1, 1971, pp. 335. 511. Woodsford P. A., The HRD-1 Laser Display System, SIGGRAPH’76 Pro- ceedings, Computer Graphics, 10(2), July 1976, pp. 68—73. 512. Woon P. Y., Freeman H., A Procedure for Generating Visible-Line Projections of Solids Bounded by Quadric Surfaces, Proceedings 1971 IFIP Congress, North-Holland Pub. Co., Amsterdam, 1971, pp. 1120—1125. 513. Wright W. V., An Interactive Computer Graphic System for Molecular Studies, Ph. D. Dissertation, Dept, of Computer Sci., Univ, of N. C., Chapel Hill, N. C., 1972. 514. Wright T. J., A Two Space Solution to the Hidden Line Problem for Plotting Functions of Two Variables, IEEE Transactions on Computers, TC22(1), Jan. 1973, pp. 28—33. 515. Wu, S. C., Abel J. F., Greenburg D. P., An Interactive Computer Graphics Approach to Surface Representation, Communications of the ACM, 20(19), Oct. 1977, pp. 703—712. 516. Wylie C., Romney G. W., Evans D. C., Erdahl A. C., Halftone Perspective Drawings by Computer, FJCC 1967, Thompson Books, Washington, D. C., pp. 49—58. 517. Wyszecki G., Stiles W. S., Color Science, Wiley, New York, 1967. 518. Yamaguchi F., A New Curve Fitting Method Using a CRT Computer Display, Computer Graphics and Image Processing, 7(3), June 1978, pp. 425—437. 519. Yule J. A., Principles of Color Reproduction, Wiley, New York, 1967.
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ Цифры, набранные полужирным шрифтом, соответствуют страницам кн. 2. Абсолютные координаты 57 Автоматизация чертежных н конструктор- ских работ 19 Адаптивное отсечение 70 Аккордная клавиатура 234 Алгоритм Брезенхема 130, 142 — Вейлера — Азертона 162 — внутренне-заполняющнй 154 — Коэна —Сазерленда 177, 342 — на основе 2-буфера 274 — Сазерленда — Ходгмана 70, 159 — сортировки на глубине 271—273 Алгоритмы затенения 300 — для криволинейных поверхностей 286— 288 — построчного сканирования 163, 167, 275 — 279 — развертки 121, 164 — разбиения области 279—284 Анализ задачи 284 — сцен 15 Аппроксимация полутонами 313 Атрибуты 41, 95 Ахроматические цвета 309 Бинокулярный эффект 259 Битовая карта 35 Бланкирование см. Срезка 103 Буксировка 98, 248, 252, 343 Буфер регенерации 33, 160 Гранично-определенные области 184 Графическая система 41 Графические примитивы 167 Графический терминал см. Дисплей 39 Графопостроители 122 — 126 Двойная буферизация 106 Двумерные преобразования 290 Двухслойные цветные ЭЛТ 135 Двухточечная центральная проекция 317 Действие 77 Детализация цветом 305 Диаграмма переходов 86, 89, 111, 275 Динамика движения 16 — изменения 18 Динамические атрибуты сегмента 60 Динамическое меню 247 Диспетчерская таблица 80 Дисплеи 126 — на плазменных панелях 137 Дисплей см. Графический терминал 39 Дисплейная программа 33, 116 Дисплейные процедуры 44 Диффузное отражение 290 — пропускание света 301 Доминирующая длина волны 320 Дополнительные цвета 325 «Доска сообщений» 50 Драйвер логического устройства 213 *— физического устройства 214 Валюатор 39, 95, 158, 219, 231 Ввод 169 Векторный дисплей 33, 144 Вид 46 Видимый объем 327 — — канонический 331 Видовая операция 64, 69, 94, 169, 174 Визуальные игровые процессоры 11 Внутренне-определенные области 154 Внутренняя точка пересечения 176 Воображаемая фотокамера 50, 172 Временный приоритет 185 Время компиляции изображения 29 — отклика программы 273 — послесвечения люминофора 131 Выбор квадранта 103 «Вывешивание» 83 Выпуклая оболочка 234 Выходные графические примитивы 49 Гамма-коррекция 312 Генератор символов 152 Геометрические данные 41 Геометрический приоритет 182 Главная точка схода 316 Гномон 249 Жезл Линкольна 227 Закон Фнтта 242 Запоминающая трубка 133 Зеркальное отражение 292 Зональная теория 321 Игровые ЭВМ 11 Изображение 49 Интеллектуальный сателлит 34 Интерактивная машинная графика см. Ин- терактивная графика 14, 16 Интерполяция в цветовом пространстве 336—337 Каркасный рисунок 24 Карта корреляции 199 Картография 19 Категории пользователей 270 Клавиатура 39, 157, 219, 232 Клеточное кодирование 213 Кнопки 233 Когерентность области 280 — по глубине 278
— ребер 167 Композиция 295 Контроллер изображения 118 Концептуальная модель 284 — программистская модель 46 Концептуальное проектирование 266 Координаты пользователя 55 — мировые 55 “ нормированные 65 — однородные 293 — относительные 57 Крупный план 59 Лексическое проектирование 261, 287 Летные тренажеры 16, 21 Линнн постоянной яркости 145 Линейность дисплея 132 Линейный дисплейный файл (ЛДФ) 40 Логические устройства 76, 219 Локатор 39, 93, 219, 221 Масштабирование 291 Матрица текущего преобразования 17 Машинная графика 14 Машинное видение 15 Мелкий план 59 Меню 245 Меню-клавиатура 244 Меню символов 90 Метафайл 213 Метод Безье 230 — В-сплайнов 230 — выравнивания 143 — Гуро 297 — кодирования полос 211 — резиновой мыши 249 — • Эрмнта 230 Мировые координаты 55 Мобильность прикладной программы 38 — программного обеспечения 37 Моделирование 19 Модель 46, 21, 5 — 9 — объектов 171 — Торрэнса — Спэрроу 293 — Фонга 292, 299 Модельные преобразования 16 Мультипликация 19, 202—203 Мышь 222 Мягкое стирание 100 Направленное пропускание 301 Насыщенность цвета 317 Неспектральные цвета 325 Неявные операции 188, 197 Нормированные координаты (НК) 65 Обнаружение образов 14 Оболочка см. Экранная оболочка 72 — выпуклая 234 Оболочки 269 Объект 54, 11, 62 Однопроцессорная система 208 Однородные координаты 293 Однотонная закраска 296 Окно 58 Оконтуривание 311 Оператор case 77 — with 71 Опорная точка 326 Опрашиваемое устройство 93 Организация буфера регенерации 210 — 214 Ортогональная матрица 303 Относительные координаты 57 Отсечение 58 — по глубине 256 Ошибки 208—210 Пакетирование 207 Палитра цветов 339 Панорамирование 59 Параллельная проекция 315, 317 — 320, 254 Параметрические бикубические куски 219 — кубические кривые 228—237 — — поверхности 237 — 244 Перенос изображения 290 Перспективное преобразование 348 — укорачивание 315 Перспективные проекции 254 Пиксел см. Пэл 35, 159 «Пннг-понговая» модель 51 Планшет 157 Повернутые окна 182 Поворот изображения 292 Повторяемость 132 Подсистема 9 Поле вывода 58, 64 Полигональная сетка 219, 220—223 Пошаговый алгоритм 139 Преобразование образа 203 Привязка к сетке 251 Прикладная библиотека 9 — модель 59, 41, 47 ।— программа 39 — структура данных 41 Примитивы 94 — вывода 159 Программирование растрового дисплея 190—196 Программируемая функциональная клавиа- тура 233 Программистская модель 45 Программный диспетчер окон 28 Проектор 314 Проекции 315 «Прозрачность» многоугольника 303 Простой графический пакет (ПГП) 52, 167 Пространственная интеграция 313 — когерентность 72, 165 Процесс развертки 164 Процессор изображения 119 Разрешающая способность 132, 119 Распознаватель литер 244 Растр 35 Растровый дисплей 189 — — набор команд 190 —192 Режим быстрого изображения 182 — приоритетного изображения 182 Рычаг 223 Сборка мусора 195 Свертывание 58, 151, 103, 104 Светлота 317 Световое перо 158, 229, 236 Светодиоды 138 Связанный список 193, 30, 32, 52, 57, 62, 77 Связная область 154 Связность 41 Сегментация 186, 187 Сегментирование дисплейных программ 206 Сегменты 62 Селектор 219, 229 Семантика прикладной программы 285 Семантическое проектирование 261 Символы 11, 45 Синтаксическое проектирование 261, 286 Система вывода изображения 199 — 207 — с одним адресным пространством 209
— — произвольным сканированием 117 — — разделением времени 28 — — растровым сканированием 117 Смешение изображений 206—207 Событие 77 Составное изображение 207 Списочная структура 193 Сплайны 235 Способы адресации данных 95 — 98 Справочник сегментов 172 Средства для работы с текстом 98 Срезка см. Бланкирование 103 Стандартный источник С 324 Статический атрибут сегмента 60 Статическое меню 247 Стереопара 259 Стереоскопия 259 Стирание символов 99 Структуризация изображения 377 Структурированный дисплейный файл 40 — В-сплайнов 235, 244 — Эрмита 230, 237 Фосфоресценция 130 Фрагментация 195 Функциональная сеть 124 Функциональное меню 81 Функция сопряжения 231 Цветные ЭЛТ с теневой маской 136 Цветовая гармония 338—339 — модель 326—333 Цветовой атлас Манселла 318 — график МКО 323 — охват 325 — тон 317 Цельность системы 274 Центральная проекция 315, 336—341, 351 Центральный графический процессор 11& С? -непрерывность 229 Таблица активных ребер (ТАР) 167 — многоугольников 276 — цветов 162, 201 — 204, 312 Текущее положение (ТП) 55 Теория оппонентных цветов 321 Точечный дисплей 139 Точка схода 315 Трассирование лучей 301, 303 Трехкомпонентная теория цвета 321 Удаление скрытых ребер 257 — 258 — — поверхностей 257—258 Улучшение изображений 14 Упорядоченное возбуждение 316 Управление сегментами 169 Установка атрибутов 169 Флуоресценция 130 форма Безье 233, 242 Частота регенерации 131 — слияния 131 Черчение графика 19 Чистота цвета 320 Шар 223 Экземплярное преобразование 14 Экранирование 84 Экранная оболочка 200, 339, 72 Эргономические факторы 74, 257 Эскнзнрованне 251 Эффект полос Маха 296, 297 Эффективность алгоритма 285—286 Эхо 76 Явные операции 189 Явный приоритет 185 Яркость цвета 320
ОГЛАВЛЕНИЕ Глава 9. Моделирование и иерархия объектов............................ 5 9.1. Что такое модель?............................................ 5 9.2. Геометрические модели и иерархия объектов................... 10 9.3. Размещение объектов и экземплярные преобразования .... 14 9.4. Преобразование объектов с использованием матрицы текущего ( преобразования................................................ 17 9.5. Обобщение для двухуровневой и n-уровневой иерархий..... 23 9.6. Способы кодирования иерархии................................ 37 9.7. Многоуровневая корреляция................................... 56 9.8. Передача атрибутов.......................................... 60 9.9. Умножение матриц преобразования слева и справа.............. 62 9.10. Комбинирование прохождения модели с видовой операцией 63 9.11. Отсечение в координатах прототипа.......................... 67 9.12. Оболочки................................................... 72 9.13. Объектные окна и прямоугольники экземпляров................ 80 9.14. Заключение................................................. 86 Упражнения....................................................... 87 Глава 10. Архитектура современных дисплеев........................... 90 10.1. Введение................................................... 90 10.2. Основные положения......................................... 90 10.3. Простой дисплей с регенерацией изображения................. 94 10.4. Преобразования векторов и отсечение в пространстве изображения 102 10.5. Высокопроизводительные дисплеи с модельными преобразова- ниями и видовой операцией ................................... 106 10.6. Функциональная модель высокопроизводительной архитектуры 110 10.7. Система PS300 — следующий виток спирали обновлений . . . 123 10.8. Система MEGATEK7200 ...................................... 127 10.9. Мультипроцессорные и сателлитные графические системы .... 131 10.10. Заключение........................................ 135 Упражнения............................................... 136 Г лава 11. Алгоритмы и программное обеспечение растро- вой графики....................................................... 138 11.1. Введение.................................................. 138 11.2. Преобразование отрезков из векторной формы в растровую ... 139 11.3. Растровая развертка литер ................................ 146 11.4. Растровая развертка окружностей .......................... 148 11.5. Заполнение области........................................ 153 11.6. Отсечение многоугольников................................. 157 11.7. Растровая развертка многоугольников....................... 163 11.8. Несегментированиый пакет графических подпрограмм с времен- ным приоритетом.............................................. 172
Оглавление 367 11,9. Сегментированный пакет графических подпрограмм, построенный на основе приоритетов....................................... 179 Упражнения ................................................. 186 Глава 12. Архитектура растровых дисплеев................ 189 12.1. Введение................................................ 189 12.2. Простая растровая дисплейная система.................... 189 12.3. Программирование растрового дисплея..................... 196 12.4. Система вывода изображения.............................. 199 12.5. Альтернативные архитектуры растровых дисплеев........... 208 12.6. Растровая архитектура для персональных ЭВМ.............. 214 Упражнения.................................................. 217 Глава 13. Представление пространственных форм.............. 218 13,1. Введение................................................ 218 13.2. Полигональные сетки..................................... 220 13.3. Непротиворечивость представлений полигональной сетки . . 224 13.4. Уравнения плоскости..................................... 225 13.5. Параметрические кубические кривые....................... 228 13.6. Параметрические кубические поверхности.................. 237 13.7. Преобразование кривых и кусков поверхностей............. 244 13.8. Вычисление точек на бикубической поверхности............ 244 Упражнения.................................................. 249 Глава 14. Методы создания реалистических трехмерных изображений....................................................... 251 14.1. Введение............................................... 251 14.2. Методы представления отношений по глубине.............. 254 '14.3. Стереоскопия........................................... 259 14.4. Пути создания реалистических изображений............... 262 Глава 15. Алгоритмы удаления скрытых линий и поверх- ностей .......................................................... 266 15.1. Введение............................................... 266 15.2. Упрощение сравнений по глубине: перспективное преобразование 267 15.3. Исключение сравнений по глубине. Оболочки.............. 269 15.4. Алгоритм сортировки по глубине........................ 271 15.5. Алгоритм, использующий г-буфер......................... 274 15.6. Алгоритмы построчного сканирования..................... 275 15.7. Алгоритмы разбиения области.........................„ . 279 15.8. Эффективность алгоритма................................ 285 15.9. Алгоритмы для криволинейных поверхностей............... 286 Упражнения................................................ 289 Глава 16. Методы закраски......................................... 290 16.1. Введение............................................... 290 16.2. Диффузное отражение и рассеянный свет.................. 290 16.3. Зеркальное отражение................................... 292 16.4. Закраска полигональной сетки........................... 295 16.5. Тени................................................... 300 16.6. Поверхности, пропускающие свет......................... 301 16.7. Детализация поверхности................................ 304 Упражнения................................................... 307
368 Оглавление Глава 17. Цвет в машинной графике.............................. 309 17.1. Введение.............................................. 309 17.2. Ахроматический цвет. Интенсивность.................... 309 17.3. Хроматический цвет..................................’ 317 17.4. Цветовые модели для растровой графики................. 326 17.5. Получение цветных твердых копий....................... 337 17.6. Цветовая гармония..................................... 338 17.7. Использование цвета в интерактивной машинной графике . . . . 339 Упражнения.................................................. 340 Литература ................................................. 342 Предметный указатель........................................ 363 Джеймс Фоли, Андрис вэн Дэм ОСНОВЫ ИНТЕРАКТИВНОЙ МАШИННОЙ ГРАФИКИ В 2-х книгах Книга 2 Старший научный редактор И. М. Андреева Младшие научные редакторы Е. П. Орлова, Н. И Сивнлева Художник В. А. Скерсис Художественный редактор В. Б. Прищепа Технический редактор Е. С. Потапеикова Корректор С. А. Денисова ИБ № 3905 Сдано в набор 05.06.84. Подписано к печати 14.11.84. Формат бОхЭО1/!»- Бумага кн.-журн. импорт. Гарнитура литературная. Печать высокая. •Объем 11,50 бум. л. Усл. печ. л. 23,00. Усл. кр.-отт. 23,00. Уч.-изд. л. 24,53- Изд. № 20/3063, Тираж 15 000 экз. Заказ № 3113. Цена 2 р. 10 к. ИЗДАТЕЛЬСТВО «МИР» 129820, Москва, И-110, ГСП, 1-й Рижский пер.» 2 Ордена Октябрьской Революции н ордена Трудового Красного Знамени МПО «Первая Образцовая типография имени А. А. Жданова» Союзполнграфпрома прн Государственном комитете СССР по делам издательств, полиграфии н книжной торговли. 113054, Москва, Валовая, 28