Uploaded by Дмитрий Конкин

Алгоритмические основы машинной графики

advertisement
Д. Роджерс
Procedural Elements
for Computer Graphics
Алгоритмические
основы машинной
David F. Rogers
Professor of Aerospace Engineering
графики
and
Director, Computer Aided Design
and Interactive Graphics
United States Naval Academy, Annapolis, Md.
.4
.
McGraw-Hill Book Company
New York
St. Louis
Auckland
Bogota
Перевод с английского
С. А. Вичеса, Г. В. Олохтоновой
San Francisco
London
New Delhi
Hamburg
Mexico
Montreal
Madrid
Panama Paris Sao Paulo
Sydney Tokyo Toronto
и
Singapore
П. А. Монахова
под редакцией
Ю. М. Банковского и В. А. Галактионова
5?
Тверская областная библиотека
им. A.M.
Москва «Мир» 1989
Горького
БКК 32.97
+
22.1
Р60
УДК 681.3.082.5
Предисловие редакторов перевода
Роджерс Д.
Р60
Алгоритмические основы машинной
М.: Мир, 1989.
англ.
512 с, ил.
—
графики:
Пер.
с
—
ISBN 5-03-000476-9
Специалистам по машинной графике имя автора книги професКнига известного американского специалиста, знакомого советским читатечитателям по переводу его «Математических основ машинной
Новая
графики» (М.: Маши-
1980).
ачгоритмов и методов совресовременных фафических систем, особое внимание уделено методам растровой граграфики. Алгоритмы доведены до программ на псевдокоде, легко преобразуемом
Машиностроение,
в языки
книга содержит анализ
Паскаль, Фортран и Бейсик. Книга изобилует иллюстрациями и приме-
примерами, содержит задания дня самостоятельного решения.
Для математиков-вычислителей, специалистов, аспирантов и студентов,
интересующихся машинной
1602110000
—
ин-
графикой и автоматизацией проектирования.
181
ББК 681.3.082.5
041@1) —89
профессора Дэвида Роджерса хорошо известно по написанной им совмест-
Дж. Адамсом монографии «Математические основы машинмашинной графики» (М.: Машиностроение, 1980).
В новой книге, представляющей собой естественное продолжес
совместно
упомянутой монографии, рассматриваются алгоритмы и метометоды, лежащие в основе современных растровых графических систем.
От других книг по машинной графике, известных читателю, ее отпродолжение
глубина изложения и более полное представление материаматериала. Автор выделяет некоторые наиболее важные разделы современотличает
современной
Редакция литературы по математическим наукам
и
растровой графики
—
такие,
как
растровая развертка отрезков
многоугольников, отсечение, удаление невидимых поверхностей и
др.,
и
—
подробно их анализирует. При этом рассматривается и
сравнивается,
как
правило, несколько различных методов
и подхо-
Геометрические алгоритмы сопровождаются подробными
блок-схемами и программами на псевдокоде, а также многочислен-
подходов.
многочисленными
примерами.
В основе
машинной
графике, котокоторый автор читает в университете Дж. Гопкинса. Поэтому ее отликниги лежит
курс лекций
по
отличает методически
продуманный отбор материала,
простота и
изложения.
доступность
а также
просто-
Настоящую монографию и известную книгу У. Фоли и А. вэн
Дэма [1-3] разделяет по времени выхода в свет лишь три года. ОдОднако
машинная
своем развитии.
графика сделала
5-03-000476-9 (русск.)
O-07-O53534-5 (англ.)
© 1985 by McGraw-Hill, Inc.
© перевод на русский язык, с измеизменениями,
«Мир», 1989
алгоритмы
5
Лианга
это
время
большой
скачок
в
Появился ряд новых, более эффективных алгорит-
алгоритмов в традиционных разделах
ISBN
ISBN
за
—
растровой графики (например, алго-
Барского отсечения отрезков и многоугольников)
Пре шеловие редактора перевода
разработаны
методы,
принципиально
открывающие
возможности для синтеза реалистических
новые
воз-
изображений. Это трасси-
трассировка лучей с использованием глобальной модели освещения, попозволяющей учитывать как отражение, так и преломление света от
многих
источников,
ступенчатости
метод
систем
частиц,
к
Предисловие
алгоритмы устранения
русскому изданию
размытости вследствие движения, методы генера-
и
фрактальных кривых и поверхностей, создание различных опоптических эффектов и др. Все эти актуальные вопросы, не нашедшие
пока отражения в монографической литературе, и рассматриваются
генерации
в книге.
Своевременность перевода книги на русский язык подкрепляется
еще одним существенным обстоятельством. Машинная графика
стала необходимым инструментом в работе ученых и инженеров.
При наличии источников данных большого объема (таких, как сусуперЭВМ, искусственные спутники Земли, предназначенные для исисследования природных ресурсов, медицинские томографы), проблепроблема визуализации приобрела исключительную важность. Отметим,
что 50% нейронов мозга человека так или иначе связано с обработобработкой визуальной информации. Следовательно, машинная графика
должна обеспечить эффективное и рациональное использование этоэтого главного канала связи между человеком и
ЭВМ.
США разрабатывается проект «Визуачизация в научных вычислениАналогичная программа формируется в НАСА.
Характерно,
что и в
нашей стране интерес к машинной графике
проявляют представители различных специальностей: конструкто-
геофизики, биологи, медики, дизайнеры, художнихудожники-мультипликаторы. Существуют области, в которых без средств
машинной графики применение ЭВМ вообще теряет смысл. Неудиконструкторы, технологи,
Неудивительно поэтому,
острый дефицит лисовременной машинной
что постоянно ощущается
литературы, раскрывающей возможности
графики. К такого рода изданиям и относится настоящая книга.
Книгу перевели С. А. Вичес (гл. 3,4), П. А. Монахов (предисло(предисловие, гл. 1, 2), Г. В. Олохтонова (гл. 5). При переводе книги были
русского издания, книга «Алгоритмичемашинной графики» доступна читателям на 6 языках:
после
«Алгоритмические основы
выхода
английском, японском, французском, итальянском, китайском и русрусском. Я искренне рад, что русские коллеги пополнили этот список.
За время, прошедшее с момента выхода первого издания на ан-
английском языке, особенно большой прогресс был достигнут в облаобласти
Проблемы визуализации становятся камнем преткновения на пупути развития научных исследований и увеличения мощности вычисвычислительных машин. В связи с этим Национальным научным фондом
вычислениях».
Теперь,
совершенствования аппаратуры.
снижении
стоимости
превосходных
При продолжающемся резком
по
своим
выполнение
научных автоматизированных
которых 3—4 года назад затрачивались десятки часов, те-
теперь укладываются
в десятки
минут. Сегодня можно за вполне ра-
разумную цену купить инженерное рабочее место в настольном вари-
варианте, в котором аппаратно реализуются алгоритм удаления невиди-
граней с помощью z-буфера и модели закраски Гуро и Фонга.
Обычными в широкой практике стали алгоритмы синтеза изобраневидимых
изображений
с множественными
10 лет
назад
подвижными источниками света.
событием, то сегодня стало уже привычным манипулирование момоделью сплошного тела с
закраской Гуро в реальном масштабе вре-
времени.
позволяет
в
полноцветными
изображениями, формируемыми
работе
за помощь и
над переводом. Мы
благодарны проф. Роджерсу
сотрудничество.
Оборудование, приобретенное по вполне доступным ценам,
реальном масштабе времени манипулировать
лучей, правда,
пока при
Существенно
Ю. М. Баяковскип
В. А. Галактионов
Если
манипулирование каркасной геометрической моделью
в реальном масштабе времени считалось из ряда вон выходящим
сообщил нам автор, с которым мы поддерживали постоянный конпри
ин-
рабочих мест, снабженснабженных полным набором графических средств, быстро возрастают их
вычислительные и графические возможности. Алгоритмы, на выи
инженерных
исправлены некоторые ошибки и опечатки. О части из них любезно
контакт
характеристикам
трассировки
умеренном разрешении.
улучшилось
Предисловие к руеск«м\
методом
полно-
из т
наше
понимание
фундаментальных
и
физических и математических принципов в моделях освещения,
более совершенные модели быстро осваиваются в алгоритмах синсинтеза изображений. Значительное продвижение связано с воспроизвеисвоспроизведением диффузного света, когда учитывается излучательность,
Повышение эффективности
исходя из соображений переноса энергии.
Посвящаю моим родителям Глэдис Мэрион (Цоллер) Роджерс (р. в 1906 г.)
и
хаалгоритмах трассировки лучей носит поистине драматический
характер. Алгоритм, в котором сочетается излучательность для диф-
в
Льюису Фриману Роджерсу A906—1981 г.),
так облегчивших мои первые шаги самостоятельной жизни.
диффузного отражения и трассировка лучей для зеркального отражения,
устанавливает сегодняшнюю норму реалистичности изображения.
Машинная графика продолжает определяющим образом влиять
на состояние дел в разработке ЭВМ и вообще в информатике. Это
Предисловие
воистину захватывающее дух поле деятельности.
июль
1988 г.
Дэвид Ф. Роджерс
Аннаполис, Мериленд
Машинная графика в настоящее время уже вполне сформировалась
Существует аппаратное и программное обеспечение для
от простых чертежей до
получения разнообразных изображений
реалистичных образов естественных объектов. Десятилетие назад
как
наука.
—
подобные средства стоили сотни тысяч долларов, а сегодня их цена
уменьшилась в десятки раз. Во многих случаях вполне приемлемые
результаты дает
оборудование стоимостью всего в несколько тытысяч долларов. Машинная графика используется почти во всех научнаучных и
инженерных дисциплинах для наглядности восприятия и
пе-
передачи информации. Знание ее основ в наше время необходимо лю-
любому ученому или инженеру. Машинная графика властно вторгаетвторгается в бизнес, медицину, рекламу, индустрию развлечений. ПрименеПрименение во
время деловых совещаний демонстрационных слайдов, под-
подготовленных
методами
машинной
графики и другими средствами
автоматизации конторского труда, считается нормой. В медицине
становится обычным получение трехмерных изображений внутренвнутренних
органов
телевидение
по
и
данным
другие
компьютерных
томографов.
рекламные предприятия
часто
В
наши дни
прибегают
к
услугам машинной
графики и компьютерной мультипликации. ИсИспользование машинной графики в индустрии развлечений охватыва-
охватывает такие несхожие
художественные
области как видеоигры и полнометражные худо-
фильмы. Как свидетельствуют некоторые цветные фо-
фотографии, помешенные в книге, даже искусство не может устоять
против этого вторжения.
Около десяти лет назад вышла в свет сходная по тематике книУ
Предисловие
га
«Математические основы машинной графики»1*. С тех пор в рас-
достаточно знания математики на уровне колледжа и знакомства с
Знания
области
растровой графике удалось достичь существенного прогресса и в дан-
языком
данной книге внимание сосредоточено именно на этих новых аспектах
графики. Книга начинается с введения в аппаратное
обеспечение машинной графики, причем речь идет в основном о
принципах работы дисплеев на электронно-лучевых трубках (ЭЛТ)
структур данных желательны, но не обязательны.
В книге используется два способа представления алгоритмов,
детальное описание алгоритма в словесной форме. Втопервый
Второй способ более формален и основан на алгоритмическом
интерактивных устройств. В последующих главах рассматриваетрассматривается программное обеспечение растровой графики: вычерчивание от-
Из-за большой популярности машинной графики выбор
языка вызвал большие затруднения. Автор опросил по этому пово-
отрезков и окружностей; заливка многоугольников и алгоритмы усттом
устранения лестничного эффекта; дву- и трехмерное отсечение, в
поводу ряд специалистов,
машинной
и
числе отсечение
по
произвольному выпуклому объему; алгоритмы
удаления невидимых линий и поверхностей, в том числе трассировтрассировка
лучей и, наконец, визуализация, понимаемая как «искусство» по-
построения реалистичных изображений, в том числе локальная и глоглобальная модели освещения, фактура, тени, прозрачность и цвето-
эффекты. Методически книга построена так же, как и ее предпредшественница: после обсуждения каждой темы следует подробный
цветовые
алгоритм или пример,
Книга
вводного
в
целом
курса
а иногда и то и
может
машинной
быть
для
полугодового
графики (прежде всего растровой)
студентов старших курсов или аспирантов.
для
Если вводный курс уже
существует и он основан на материале книги «Математические ососновы машинной графики», то данная книга предоставляет идеальидеальный материал для более углубленного курса. Именно таким
образом ее использовал
обра-
автор. Если в односеместровом курсе желатель-
более широкий круг вопросов, то можно воспользовоспользоваться обеими книгами. В этом случае предлагаются следующие тежелательно
охватить
темы: гл.
1 обеих книг, за ней гл. 2 и 3 с отдельными темами из гл. 4
«Математических основ...»,
затем
некоторые разделы
разд. 2.15 по разд. 2.19,
из
гл.
2 (с
2.22, 2.23,
2.7, с
2.28), гл. 3 (разд. 3.1, 3.2, с разд. 3.4 по разд. 3.6, 3.9, 3.11, 3.15,
3.16), гл. 4 (разд. 4.1, часть разд. 4.2 с алгоритмом отбрасывания
заведомо невидимых граней, разд. 4.3, 4.4, 4.7, 4.9, 4.11, 4.13) и
гл. 5 (с разд. 5.1 по разд. 5.3, 5.5, 5.6, 5.14). Мы надеемся, что кникнига будет также полезна профессиональным программистам, инжеинженерам и ученым. Благодаря тому, что алгоритмы и примеры излоизложены весьма подробно, книгу могут самостоятельно изучать чита-
разд. 2.1
читатели
по
разной квалификации. Для понимания излагаемого материала
'* Имеется
машинной
10
разд. 2.5,
Роджерс Д. Ф., Адаме Дж. Математические основы
М.: Машиностроение, 1980.
Прим перев.
русский перевод:
графики.
Предисловие
—
—
высокого
уровня.
в
—
«языке».
но
к
единому мнению
прийти
не
удалось.
Преподаватели информатики предпочитают Паскаль, но с сильным
уклоном к языку Си. Специалисты, работающие в промышленнопромышленности, отдают предпочтение Фортрану из соображений совместимосовместимости с существующим программным
предпочитает
Бейсик ввиду простоты
обеспечением. Сам автор предВ результате
его использования.
детальные описания алгоритмов представлены на псевдокоде, кото-
который основан на большом опыте обучения машинной графике лиц,
не знакомых
общепринятыми языками программирования. Псев-
с
Псевдокод легко переводится на любой из этих языков. Описание псев-
другое.
использована
программирования
Все представленные в книге алго-
псевдокода приведено в приложении.
алгоритмы, написанные на псевдокоде, либо были непосредственно реа-
ЭВМ
псевдокода, либо были получены из
работающей программы, написанной на одном или нескольких об-
реализованы
на
общепринятых
на основе
языков
программирования. Диапазон языков реализареализации простирается от Бейсика на Apple lie до PL/1 на IBM 4300. Де-
Демонстрационные программы
можно получить у
автора.
Возможно,
будет интересно узнать, как создавалась
книга1). Она была набрана в корпорации TYX (Рестон, Вирджиния)
читателю
на
ЭВМ в системе обработки текстов ТЕХ.
вариант был подготовлен
на основе
Первоначальный вари-
рукописного текста.
Процессы ре-
и
верстки проводились на гранках и двух сверстансверстанных корректурах, полученных с лазерного принтера. Окончатель-
редактирования
Окончательный вариант, пригодный для вставки тоновых
иллюстраций, был
фотонаборном автомате. Я хотел бы выразить осоособую благодарность за терпение и помощь сотрудникам компании
TYX
Джиму Готье и Марку Хоффману, которые помогли мне
отпечатан на
—
разрешить мои бесчисленные затруднения. Я
благодарю Луизу Борер и Бет Лесселс за огромную работу, выполизучить
систему
выполненную
при
'
и
вводе
рукописного
материала.
Редакторы
Дэвид
Речь идет об английском оригинале. Русское издание подготовлено на фотона-
фотонаборном комщексе «Компыографик» методом оригинала-макета.
Предисловие
—
Прим. ред.
McGraw-Hill
Дэмстра и Сильва Уэррен из издательства
продемонстрировали, как и всегда, высокий профессионализм.
проде-
Эта книга никогда не появилась бы на свет без помощи многих
людей. Основу
книги
составляет
читающийся
1978 г.
в
с
материал курса для аспирантов,
Введение в машинную графику
лабораторном Центре прикладной физики
университета Джонса Гопкинса. Я признателен многим студентам,
много. Я
слушавшим этот и другие курсы, от которых я узнал гак
благодарю Тернера Уиттеда, прочитавшего первоначальные набронаброски и сделавшего ценные замечания, моих коллег Пита Атертона,
Бранена Барски, Эда Кэтмулла, Роба Кука, Джона Дилла, Стива
Хансена, Боба Лыоенда, Гэри Мейера, Элви Рэя Смита, Дэйва
Уорна и Кевина Уэйлера. Все они прочитали с красным карандакарандашом в
варианте
книга
руках один
и
стала
или несколько
благодаря
лучше.
Я
разделов книги
в
рукописном ва-
их многочисленным советам и замечаниям кни-
признателен
моим
коллегам
Линде Рийбак
примеры. Следует отметить моих студентов: Била Миера, реализовавше-
Робертса, Гэри Бохена, предложившего тест на выпувыпуклость из разд. 3.7 и Нормана Шмидта, предложившего метод разразбиения многоугольника из разд. 3.8. Я признателен Марку Мейерсону, реализовавшему алгоритмы разбиения и математически обообосновавшему метод, лежащий в их основе. Особенно ценна работа
реализовавшего алгоритм
все
штрихо-
штриховые
рисунки.
Не нахожу слов благодарности в адрес Стива Сэтерфилда, прочи-
прочитавшего все
800 рукописных страниц и сделавшему массу замечаний.
Следует поблагодарить и моего старшего сына Стефана, котокоторый реализовал все алгоритмы удаления невидимых поверхностей
из гл. 4, а также ряд других алгоритмов. Во время наших бурных
дискуссий прояснился ряд ключевых моментов.
И наконец, особенно хочу отметить мою жену Нэнси
других моих детей,
лет
все ночи
двух
Карен и Рэнсома, которые в течение полутора
терпели отсутствие своего мужа
и выходные в
и
элементы
это
исследованы
отца, скрывавшегося почти
кабинете. Вот это поддержка! Спасибо.
Дэвид Ф. Роджерс
геометрических
преобразований
поверхностей. Также изучены,
но
все
еще
тщательно
[1-1
и
—
разработанная
1-3] основные эле-
описаний кривых
и
по-
продолжают развиваться
методы растрового сканирбвания, отсечение, удаление невидимых
линий и поверхностей, цвет, закраска, текстура и эффекты прозрачпрозрачности.
Сейчас наибольший интерес представляют именно эти раз-
разделы машинной
1.1. ОБЗОР
графики.
МАШИННОЙ ГРАФИКИ
Машинная графика
разнообразная дисциплина. Для
изучения ее прежде всего необходимо разбить на обозримые части,
приняв во внимание, что конечным продуктом машинной графики
является изображение. Это изображение может, разумеется, исиспользоваться
для
разнообразных целей. Например, оно может
—
сложная
и
быть техническим чертежом,, иллюстрацией
деталей
и
Обстоятельно
дисциплина.
—
и
Линде Эдлам, прочитавшим всю рукопись и проверившим приме-
Ли Билоу и Джона Меткалфа, которые подготовили
Современная машинная графика
в
с
изображением дета-
разобранном виде в руководстве по эксплуатации, деловой
диаграммой, архитектурным видом предлагаемой конструкции или
проектируемого здания, рекламной иллюстрацией или кадром из
мультфильма. В машинной графике фундаментальным связующим
звеном является изображение; следовательно, мы должны рассмот-
рассмотреть,
как
изображения представляются в машинной графике;
изображения готовятся для визуализации;
предварительно подготовленные изображения рисуются;
осуществляется взаимодействие с изображением.
и. Обзор
машинной
графики
многих алгоритмах в качестве
Хотя во
изображения, выступают многоугольники
описывающих
каждый многоугольник
представлен
своими
или
ребро
в
свою
вершинами. Таким
образом,
точки
для
и
может
очередь
фундаментальными строительными блоками
быть представлен
своими
вершинами
бы отрезок,
ребра,
представили
быть
точек
являются
представления
алгогеометрических данных. Не меньшего внимания заслуживает
как организовать точки. В качестве иллюалгоритм, показывающий,
в первом квадранте. Он
иллюстрации рассмотрим единичный квадрат
может
бы точку в двух- или трехмерном пространстве. Две точки
геометрических данных,
(рис. 1.1):
—
Соответствующее алгоритмическое описание может выглядеть
Соединить последовательно РХР2РЪРАРХ
совокупность
получают
рисунок,
редко
совпадают
с
э
Р3Р4, Е4
s
Р4Р,
Здесь алгоритмическое описание таково:
Изобразить последовательно ребра EYE2E3E4
И наконец, для описания единичного квадрата как многоугольника
можно использовать либо точки, либо ребра. Например,
S,
=
ЕхЕгЕгЕА
Основные строительные блоки (гочки) в зависимости от размернокак
размерности пространства можно представлять либо как пары, либо
тройки чисел. Таким образом, Cvi,Ji) или (x^y^z^ представили
J
1.0
E,
можно
добавить удаление
не-
поверхностей, произвести закраску, учесть вли-
прозрачности, нанести текстуру и воспроизвести цветовые эф-
эффекты. Если не надо рисовать изображение, представленное во всей
базе данных, то следует выбрать
соответствующую его часть. Дан-
Данный процесс называется отсечением. Отсечение может быть
двухили трехмерным. В
некоторых случаях отсекающее окно или объем
могут быть
с дырами или иметь
относительно стандартных
все
нерегулярную
форму. Отсечение
областей часто реализуется аппаратно.
изображения содержат текстовую информацию. Ли-
Литеры могут генерироваться либо аппаратным, либо программным
образом, в последнем случае с ними можно обращаться как с люлюбой другой частью изображения. При аппаратной
генерации лителитеры сохраняются в виде кодов до момента непосредственного выво-
Для преобразования литер обычно предоставляются только
ограниченные возможности, например некий набор углов поворота
вывода.
и
P4
непо-
преобразования выполняются с помощью матричных Dх 4)
операций над данными, представленными в однородных координакоординатах [1-1]. Эти операции часто реализуются
аппаратно. Прежде чем
Почти
или
служащими
видовые
влияние
Р2Р31 Еъ
данными,
различных проекций данных. Как правило, эти основные ви-
ребер:
=
более
операций поворота, переноса, масштабирования и вычис-
невидимых линий или
Р,Р2, ?2
или
Данные, используемые для вывода изоизображения, часто называют дисплейным файлом. В нем содержится
некоторая часть, вид или сцена изображения, представленного в обобщей базе данных. Выводимое изображение обычно формируется с
рисовать окончательный результат,
в
трех
предста-
непосредственно для рисования.
Единичный квадрат также можно описать с помощью четырех ре-
?,
из
ребра, многоугольники накапнакапливаются, или хранятся, в базе данных. Данные, из которых полу-
вычисления
так:
ребро,
а
многоугольник. Эти точки,
помощью
Р,@, 0), Р2A,0),Р3A» 1),Р4@, 1)
или
коэффициентов масштабирования. Как правило, отсечение аппа-
ратио генерируемых литер невозможно: либо изображается вся ли-
Рз
i
литера, либо
она не
изображается вообще.
1.2. ТИПЫ ГРАФИЧЕСКИХ УСТРОЙСТВ
E2
s,
E4
Существует много разнообразных устройств для вывода изображеизображений, построенных с помощью машинной графики. В качестве титипичных
Pi
>
1
о
1.0
Рис. 1.1. Описания данных изображения.
Гл.
1. Введение
в
машинную
графику
назовем
перьевые
графопостроители,
точечно-
матричные, электростатические и лазерные печатающие устройстустройства, фильмирующие устройства, дисплеи на запоминающей
трубке,
15
14
примеров
1.2. Типы графических устройств
векторные дисплеи
с
обсуждением дисплеев на
ЭЛТ, поскольку в большинстве систем машин-
регенерацией изображения и растровые дисдисплеи на электронно-лучевой трубке (ЭЛТ). Мы ограничимся обсуж-
машинной
графики
используются дисплеи
этом типе дисплеев
концепции
вывода
типа
и
именно
в
наиболее фундаментальные концеп-
воплощены
изображения.
подобного
Другие
обсуждаются
методы
в
1-3].
[1-1
Запоминающие ЭЛТ с прямым копированием изображения (ри(рисование отрезками), векторные дисплеи с регенерацией изображе—
V
¦
(рисование отрезками) и растровые сканирующие дисплеи с ререгенерацией (поточечное рисование) являются тремя основными тиизображения
базе ЭЛТ. Развитие электронной техники
типами дисплеев на
использовать в одном дисплее
позволило
изображения.
несколько
методов
позво-
изображе-
Мы стоим на пользовательской или концептуальной точке зре-
зрения при
обсуждении различных дисплеев, т. е. в основном рассмат-
рассматриваем
функциональные возможности дисплеев,
их
а
не
особенности
электронной схемы.
1.3. ГРАФИЧЕСКИЕ ДИСПЛЕИ
НА ЗАПОМИНАЮЩЕЙ
^0 Рис. 1.2. I рафнческий дисплей
на
запоминающей
трубке.
ТРУБКЕ
Из всех дисплеев на ЭЛТ наиболее просто устроен дисплей на запозапоминающей ЭЛТ с прямым копированием
изображения (ЗЭЛТ). За-
Запоминающую ЭЛТ, называемую также бистабильной запоминаюзапоминающей трубкой, можно рассматривать как ЭЛТ, покрытую люмино-
люминофором с длительным временем послесвечения. Линия или литера
остаются на ней видимыми в течение длительного времени (до ододного часа), прежде чем станут окончательно неразличимыми. На
рис. 1.2 показан типичный дисплей такого типа. Чтобы нарисовать
отрезок
на дисплее, интенсивность
электронного луча увеличивают
до такой величины, которая вызывает запоминание следа луча на
люминофоре. Для
изображения
трубку подают
специальное напряжение, снимающее свечение люминофора. Экран
вспыхивает и принимает исходное (темное) состояние. Стирание зазанимает около '/г с. Поскольку вспыхивает вся трубка, то стираютстираются все отрезки и литеры. Таким образом, стереть отдельные линии
и литеры нельзя, и изображение динамического движения или анистирания
анимация невозможны.
на
всю
Иногда для обеспечения возможности ограни-
ограниченной регенерации используется промежуточное состояние (режим
рисования поверх изображения);
интенсивность
см. ниже.
В этом случае интенсив-
электронного луча принимает значение,
меньшее
которое вызывает
Гл.
1. Введение
в
машинную
графику
но достаточное для свечения лю-
минофора. Поскольку в этом режиме изображение не сохраняется,
для
его видимости
Дисплей
фактически
на
изображения
вообще
1024
х
(ЭЛТ
запоминающей трубке способен изображать
количество
невозможно.
Его
векторов,
фактиа мерцание изображе-
разрешение
обычно
составляет
1024 адресуемых точек A0 бит) на экране 8x8 дюймов
с диагональю 11 дюймов), или 4096 х 4096 A2 бит) либо на
экране 14
(ЭЛТ с диагональю 19 дюймов), либо на
18 дюймов (ЭЛТ с диагональю 25 дюймов). По верти14 дюймов
х
экране 18 х
вертикали
необходима постоянная перерисовка.
неограниченное
обычно видно только 78% адресуемой области.
это векторный дисплей,
Дисплей на запоминающей трубке
или дисплей с произвольным сканированием. Это означает, что ототрезок (вектор) может быть нарисован непосредственно из одной
—
адресуемой точки в любую другую. Относительно легко, быстро и
недорого можно получить твердую копию экрана. Дисплеи на запо-
трубке в некоторой степени легче программировать, ненежели векторные или растровые дисплеи с регенерацией изображе-
запоминающей
изображения.
Дисплеи на ЗЭЛТ можно объединять с микрокомпьютерами в
графические системы или графические терминалы. В
случае алфавитно-цифровая или графическая информа-
сателлигные
порогового,
последнем
16
запоминание,
17
1.3. Графические дисплеи на
ИМ. A.M.
передается от главного компьютера в терминал посредством
интерфейса. Обычно используется последовательный интерфейс,
Геометри-
Дисп-
Дисп-
Геометрический
Дисплейный
Дисплейный
Генератор
векторов/
процессор
буфер
контроллер
литер
Геометри-
Дисп-
Геометрический
Дисплейный
Генератор
векторов/
процессор
контроллер
литер
ция
т. е.
в единицу
времени передается только 1 бит информации, хотя
параллельный интерфейс. Уровень интер-
использоваться и
может
ЦПУ
интерактивности дисплея с ЗЭЛТ ниже, чем у векторного дисплея с реге-
регенерацией
или
растрового
дисплея
вследствие
небольшой скорости
ДиспДисплейный
ЦПУ
¦
буфер
интерфейса и плохих характеристик стирания.
Рис.
1.3.
Концептуальные блок-схемы векторных дисплеев с регенерацией.
1.4. ВЕКТОРНЫЕ ГРАФИЧЕСКИЕ ДИСПЛЕИ
С РЕГЕНЕРАЦИЕЙ ИЗОБРАЖЕНИЯ
(рис. 1.3, а) геометрический процессор работает медленнее, чем зто
необходимо при регенерации применяемых на практике изображеизображений (от 4000 до 5000 векторов). Таким образом, геометрические
трубке в векторвекторном (рисующем отрезки или векторы) дисплее с регенерацией изоизображения на базе ЭЛТ используется люминофор с очень коротким
данные,
временем послесвечения. Такие дисплеи
(ЦПУ) графическому дисплею, обрабатываются
В противоположность дисплею на запоминающей
часто называют дисплеями
посылаемые
центральным
процессорным
до
устройством
сохранения
в
(см. ниже). Из-за того что время
послесвечения люминофора мало, изображение на ЭЛТ за секунду
дисплейном
должно многократно перерисовываться или регенерироваться. Ми-
изображения. Дисплейный контроллер считывает информацию из
дисплейного буфера и посылает ее генератору векторов и литер.
При достижении конца дисплейного буфера контроллер возвраща-
с
произвольным сканированием
Минимальная скорость регенерации должна составлять по крайней ме-
предпочтительнее от 40 до 50 A/с).
Скорость регенерегенерации, меньшая 30 A/с), приведет к тому, что изображение будет
мерцать, как это бывает, когда кинофильм прокручивается слишслишком медленно. На такое изображение неприятно смотреть и его
мере 30 A/с),
трудно
а
использовать.
Для векторного дисплея
еще два
элемента:
с
регенерацией требуется кроме ЭЛТ
дисплейный буфер
и
дисплейный контроллер.
это непрерывный участок памяти, содержабуфер
содержащий всю информацию, необходимую для вывода изображения на
Дисплейный
—
ЭЛТ. Функция дисплейного контроллера заключается в том, чтобы
обрабатывать эту информацию со скоростью регенерарегенерации. Сложность (число изображаемых векторов) рисунка ограничиограничивается двумя факторами
размером дисплейного буфера и скороциклически
—
скоростью дисплейного контроллера. Еще одним ограничением является
обработки геометрической информации, например скоскорость выполнения таких операций, как преобразование и отсечение,
генерация текстовой информации.
скорость
На рис. 1.3
высокопроизводительных
такие
представлены
блок-схемы двух
высокопроизводи-
векторных дисплеев. В обоих случаях предполагается,
геометрические
преобразования,
как
поворот,
перенос,
что
мас-
масштабирование, перспективное проецирование и отсечение, реализореализованы
аппаратно
18
Гл. 1. Введение в машинную графику
в
геометрическом
процессоре.
В
первом
случае
буфере. Значит, в нем содержатся только те инструк-
инструкции, которые необходимы генератору векторов и литер для вывода
возвращается
на его
начало,
и цикл
повторяется снова.
При использовании первой схемы возникает идея двойной буфебуферизации и раздельного изменения изображения и его регенерации.
Так как з этой конфигурации геометрический процессор не успевает
сгенерировать сложное новое или измененное изображение во вревремя одного цикла регенерации, то дисплейный
буфер делится на две
части. В то время, как измененное изображение обрабатывается и
записывается в одну половину буфера, дисплейный контроллер ререгенерирует ЭЛТ из другой половины буфера. При завершении измеизменения изображения буферы меняются ролями и этот
процесс повтоповторяется. Таким образом, новое или измененное изображение может
генерироваться каждый второй, третий, четвертый и т. д. циклы
регенерации. Использование двойной буферизации предотвращает
одновременный вывод
части
старого
и
части
нового
измененного
изображения в течение одного и более циклов регенерации.
Во второй схеме (рис. 1.3, Ь) геометрический процессор работаработает
быстрее, чем необходимо для регенерации достаточно сложных
изображений. В этом случае исходная геометрическая база данных,
посланная из ЦПУ, сохраняется непосредственно в дисплейном бубуфере, а векторы обычно задаются в пользовательских (мировых)
координатах в
1.4.
виде
чисел
с
плавающей точкой. Дисплейный
Векторные графические лисплеи
кон-
троллер за
один
буфера,
дисплейного
регенерации считывает
цикл
пропускает
ее
через геометрический процессор
результат передает генератору векторов.
///
информацию из дис-
А/,
/ / / //
и
При таком способе обра-
обработки геометрические преобразования должны выполняться «на лелету» в течение одного цикла регенерации.
При использовании контроллера любой схемы в дисплейном буДинамическая кривая
буфере существуют инструкции рисования каждого вектора, литеры и
подкартинки.
Следовательно, любой конкретный
быть
независимо
изменен
совокупности
с
малым
может
элемент
любого другого. Эта особенность в
временем послесвечения люминофора ЭЛТ
от
изображать динамическое движение. Эта идея иллюстрииллюстрируется рис. 1.4, где показано изображение, выводимое во время че-
В
позволяет
четырех
последовательных циклов.
Сплошной отрезок
—
это
отре-
Рис.
В
Рис.
1.5. Сегментация дисплейного
1.6.
Интеллектуальная сегментация
буфера.
буфера.
лиспленного
помещены в отдельные сегменты
дисплейного
для
рисуемый для текущего цикла, а пунктирный отрезок
предыдущего цикла. Между двумя циклами регенерации изменяют—
отрезок,
координаты конца отрезка точки В. Создается впечатление,
отрезок вращается вокруг точки А.
что
изменяются
В большинстве случаев лишь часть
динамически
изменяемой.
Реально
конфигурации, показанной
изображения является дина-
большая
часть
картинки
остается
геометрического
используемые для показа опоры отрезка Л В t
при таком
они не изменяются
регенерации к другому. В то же время для показа
движения положение конца отрезка АВ и буквы В
от одного цикла
динамического
изменяются.
Эти изолированные части базы
данных
изображения
А
конфигу-
на рис.
процессора при изменении рисунка. В данном случае дочжно мо-
модифицироваться
т. е.
В
1.3, а, геометрический процессор может
игнорировать статический сегмент в дисплейном буфере, так как он
не изменяется, а это существенно сокращает
работу геометрическо-
статичной. Такое разделение наводит на мысль о сегментации диспаейного буфера. Идея иллюстрируется рис. 1.5. Здесь неподвижиснеподвижны: горизонтальный отрезок, заштрихованная часть и буква А
,
буфера.
Еще
одним
передаваемых
из
только
изображение
достоинством
подобного
в
динамическом
метода
разделении сокращается количество
ЦПУ
в
геометрический процессор при
изображения.
Разные типы
явпяется
сегменте.
то,
что
данных, передаваекаждом изменении
конфигурации на
рис. 1.3, Ь. Напомним, что здесь база данных изображения сохрасохраняется в дисплейном буфере в мировых (пользовательских) коордикоординатах, а обработка изображения происходит «на лету», в каждом
сегментации
возможны
для
регенерации. Для картинки, показанной на рис. 1.5, в дисдисплейном буфере создаются два сегмента
статический и динамицикле
—
динамический. В любом случае
обработка изображения совершается
«на
Информацию в динамическом сегменте можно изменить с
помощью функций, предоставляемых геометрическим процессором.
Таким образом, модификация изображения может происходить лолокально в графическом устройстве и для этого связь с ЦПУ не
нужнужна. В частном случае, показанном на
рис. 1.5, единственной функфункцией, необходимой для локального динамического изменения, являлету».
В
является поворот вокруг точки
А.
Для динамического изменения рис. 1.6 требуется связь с ЦПУ,
т. е.
Рис. 1.4. Динамическое движение.
-•
20
Гл. 1. Введение
в
машинную
графику
некоторое интеллектуальное
1.4.
Векторные графические дисплеи
изменение
изображения. Снова
или
ширины
полосы
пропускания между ЦПУ
и
графическим уст-
устройством, рассмотрим затраты на интеллектуальное изменение
кривой, описываемой 250 отрезками или точками. Каждая точка
задается тремя координатами. Пусть для представления чисел с
плавающей точкой используется шесть значащих цифр (литер) и
пусть каждая литера задается отдельным байтом (8 бит). Тогда
при скорости регенерации 30 кадров
в
секунду
и
при условии,
что
59ЯС
модификация производится в каждом цикле регенерации, требуемая
ширина
..
•*
30
*
полосы
пропускания
связи составляет
[(кол-во тчк) (кол-во коорл./тчк) (кол-во знач. цифр/тчк)
(кол-во бит/литера)]
30
или
•
B50) C) F) (8)
•
•
¦
=
1 080 000 бит/с
образом, необходимая скорость передачи данных может
легко превысить 1 Мбит/с. Для сложных трехмерных скульптурТаким
скульптурных
поверхностей требуемая ширина
легко
возрасти
в
10 раз,
т. е.
большинстве случаев для поддержки
Рис.
1.7.
Векторный дисплей
с
регенерацией. (С разрешения Evans & Sutherland
Cornpuier Corp.)
создаются два сегмента: статический сегмент,
содержащий опор-
опорную линию, заштрихованную часть и букву А, и динамический
В. Предположим, что форсегмент, состоящий из кривой АВ и буквы
сег-
форма
кривой АВ
другому
должна изменяться от одного цикла регенерации
в зависимости от
физических факторов. Это осуществляет
дисплейном буфере новые данные, например форма кривой.
Применение сегментации
движением или
помощью
изображения не ограничивается только
анимацией, хотя само понятие было введено с по-
примеров
из
любое изображение,
этой
что
области. Сегментировано
может
быть
особенно полезно для интерактивных гра-
графических программ. Это понятие аналогично модульному програмпрограммированию. Выбор модульных сегментов изображения, их размер
и сложность зависят от конкретной прикладной области. СложСложность элементов изображения варьируется от отдельных точек до
полных описаний объектов. Дополнительную информацию по этоэтому вопросу можно найти в [1-3].
Для того чтобы проиллюстрировать значимость скорости связи
22
Гл.
1. Введение
в
машинную
графику
достигнуть
пропускания
может
В большин-
10 Мбит/с.
интеллектуальной динамической графи-
графики в
реапьном масштабе времени такие скорости требуют примене-
применения
параллельного
интерфейса или интерфейса прямого доступа в
На
между ЦПУ и графическим устройством.
память
(DMA)
рис. 1.7
показан типичный
векторный дисплей с регенерацией.
1.5. РАСТРОВЫЕ ГРАФИЧЕСКИЕ ДИСПЛЕИ
С РЕГЕНЕРАЦИЕЙ ИЗОБРАЖЕНИЯ
к
прикладная программа в ЦПУ. Для модификации сегмента с динамидинамически изменяющимся изображением должны быть посланы и сохранесохранены в
полосы
Как дисплеи
на
ЭЛТ, так
запоминающих
произвольным
сканированием
являются
т. е.
отрезок прямой
может
и
дисплеи
с
произволь-
устройствами рисования отрезков,
быть нарисован непосредственно
из
любой адресуемой точки в любую другую. Графическое устройство
на
растровой ЭЛТ работает по-другому.
Растровое устройство
(точек), кажкаждая из которых может быть подсвечена. Таким образом, оно являможно рассматривать как матрицу дискретных ячеек
является
точечно-рисующим устройством.
исключением специальных
прямой
из
Невозможно, за исключени-
случаев, непосредственно нарисовать отрезок пря-
одной адресуемой точки
или
пиксела1* в матрице в другую
адресуемую точку или пиксел. Отрезок можно лишь аппроксимироаппроксимировать последовательностями точек (пикселов), близко лежащих к реВ поспеднее время получил распространение термин ПЭЛ
(pel), образованный
°т picture element. Он
принят в качестве стандартного фирмой IBM.
Прим. ред.
—
1.5. Растровые графические дисплеи
С
/
/
Элемент тображенпя или пиксел
"¦
D
/
Адресуемая точка
/
/
в
тт
/
/
Растровая аппроксимация
Регистр 1
/
отрезка А В
Эту идею иллюстрирует рис. 1.8. ОтОтрезок прямой из точек (пикселов) получится только в случае гориотрезков,
выглядеть
как
как
показано
на
расположенных под углом 45°
рис. 1.8. Все другие отрезки
последовательности
ступенек.
Это
называется
эффектом, или «зазубренностью». Методы, позволяюпозволяющие устранять лестничный эффект, обсуждаются в гл. 2.
Чаще всего для графических устройств с растровой ЭЛТ испольиспользуется буфер кадра. Буфер кадра представляет собой большой ненепрерывный участок памяти компьютера. Для каждой точки, или
память
в
растре отводится
битовой
как
минимум один бит
памяти.
Эта
Для квадратного растра
размером 512Х 512 требуется 218 B9
512; 218
512X512), или
262144 бита памяти в одной битовой плоскости. Изображение в бубуфере кадра строится побитно. Из-за того что бит памяти имеет
только два состояния (двоичное 0 или 1), имея одну битовую и ноноскость, можно получить лишь черно-белое изображение. Битовая
плоскость является цифровым устройством, тогда как растровая
ЭЛТ
аналоговое устройство, для работы которого требуется
электрическое напряжение. Поэтому при считывании информации
из буфера кадра и ее выводе на графическое
устройство с растровой
ЭЛТ должно происходить преобразование из цифрового представпредставления
в
аналоговый сигнал. Такое преобразование выполняет
цифро-аналоговый преобразователь (ЦАП). Каждый пиксел буфера
кадра должен быть считан и преобразован, прежде чем он будет
отображен на растровой ЭЛТ. На рис. 1.9 приведена схема графиграфического устройства с черно-белой растровой ЭЛТ, построенного на
основе буфера кадра с одной битовой плоскостью.
Цвета или полутона серого цвета могут быть введены в буфер
называется
плоскостью.
=
=
кадра путем использования дополнительных битовых плоскостей.
На рис. 1.10 показаны схема буфера кадра с^ битовыми пчоскостями для
будут выгля-
явление
1.9.
от-
лестничным
пиксела,
К
Черно-белый буфер кадра (с одной битовой плоскостью) для растрового
графического устройства.
алыюй траектории отрезка.
или
в
Рис.
Рис. 1.8. Растровая развертка отрезка.
горизонтальных, вертикальных
—гтт—
Буфер калра
—< I—
А<
градаций серого цвета. Интенсивность каждого пиксела
ЭЛТ
управляется содержимым соответствующих пикселов в
каждой из N битовых плоскостей. В соответствующую позицию
регистра загружается бинарная величина @ или 1) из каждой плона
плоскости.
Двоичное число, получившееся в результате, интерпретиру-
интерпретируется как
уровень интенсивности
Гл.
1. Введение
в
машинную
графику
между 0
и
2Ч
—
1.
С
помощью
ЦАП это число преобразуется в напряжение между 0 (темный
1 (максимальная интенсивность свечения). Всего
экран) и 2V
можно получить 2Л уровней интенсивности. Рис. 1.10 иллюстрируиллюстрирует систему с тремя битовыми плоскостями для 8 B3) уровней ининтенсивности.
Для каждой битовой плоскости требуется полный
-
например, буфер
кадра с тремя битовыми плоскостями для растра 512 х 512 занима-
объем
занимает
памяти
при
данном
разрешении
786432 C * 512* 512) битов
растра:
памяти.
—
24
ЦАП
Регистр
1
ШЩо
N
=
3
2
уровней
Буфер кадра
-I
Растр
ЭЛТ
Рис. 1.10. Полутоновый черно-белый буфер кадра с N битовыми плоскостями.
25
1.5. Растровые графические дисплеи
2W уровней интенсивности
Таблица иветов
2N одновременно
1.1.
Таблица
Цветовые комбинации для
простого буфера кадра с тремя битовыми
плоскостями.
Буфер кадра
Рис.
1.11.
Полутоновый черно-белый буфер
кадра
с
N битовыми плоскостями
и
W-разрядной таблицей цветов.
Число доступных уровней интенсивности можно
незначительно
расширив
Красный
Зеленый
Черный
0
0
0
Красный
1
0
0
Зеленый
0
1
0
Синий
0
0
1
Желтый
1
1
0
Голубой
Пурпурный
0
1
1
1
0
1
Белый
I
1
1
увеличить, не-
требуемую для этого память и воспользо-
таблицей
воспользовавшись
рис.
1.11. После
цветов,
как
это
схематично
считывания из
таблице должно
элемент может
показано
на
4-
буфера кадра битовых плоскостей
таблице цветов. В
содержаться 2V элементов. Каждый ее элев
I
-
получения дополнительных
Цветовые пушки
1
-
содержать W
F
бит, причем W может быть больше N.
В последнем случае можно получить 2W значений
интенсивности,
но одновременно могут быть доступны лишь 2Л' из них.
Для полу-
Per истры
x
i
получившееся число используется как индекс
этой
Синий
\\
-
¦
-
1
-4-
значений интенсивностей таблицу цветов не-
>-
-i
Буфер кадра
необходимо изменить (перезагрузить).
Поскольку существует три основных цвета, можно реализовать
простой цветной буфер кадра с тремя битовыми плоскостями, по
Рис. 1.12.
одной для каждого из основных цветов. Каждая битовая плоскость
Полноцветный буфер кадра может быть далее еще увеличен пупутем использования групп битовых плоскостей в качестве индексов в
управляет
индивидуальной электронной пушкой
для
трех основных цветов, используемых в видеотехнике.
цвета,
каждого
из
Три основных
комбинируясь на ЭЛТ, дают восемь цветов. Эти цвета и со-
соответствующие
им
двоичные
коды
приведены
в
табл. 1.1. Схема
простого цветового растрового буфера кадра показана на
рис. 1.12.
из
Для каждой
трех цветовых пушек могут использоваться додополнительные битовые плоскости. На рис. 1.13 схематично показан
цветной буфер кадра с 8 битовыми плоскостями на
каждый цвет,
то есть
Простой цветной буфер кадра.
таблицах цветов,
цвет и
как
это
показано
на
рис. 1.14.
При N битах на
Поразрядных элементах таблиц цветов одновременно может
быть показано B3/4
цветовых оттенков из палитры
B3)и/ возмож-
Например, при буфере кадра с 24 битовыми плоскостя8) и тремя 10-разрядными таблицами цветов {W
10)
возможных цветов.
плоскостями
(/V
может
палитры
1
=
=
быть получено 16 777 216 B24) цветовых оттенков из палит-
073 741 824
B30) цветов, т. е. около 17 млн. оттенков из па-
буфер кадра с 24 битовыми плоскостями. Каждая группа
битовых плоскостей управляет
8-разрядным ЦАП. Каждая такая
палитры
генерировать 256 B8) оттенков или интенсивностей
красного, зеленого или синего цвета. Их можно скомбинировать в
16 777 216 [B8K = 224] возможных цветов. Это
устройствах трудно достичь производительности, необходимой для
буфер кадра.
каждому индивидуальному пикселу равно 200 не B00-10"9),
группа
может
«полноцветный» бу-
26
Гл.
I. Введение
в
ivaiunHHvio
график}
немногим меньше чем
Из-за большого
1 миллиард цветов.
количества
пикселов
в
растровых
графических
работы в реальном времени, а также приемлемой скорости регенерегенерации, или смены, кадра. Например, если среднее время доступа к
27
1.5.
Растровые графические дисплеи
то для
Цветовые пушки
Н8-разр. ЦАП
I0III0I0I1I0III1
Синий 75
N=
HllOlllOlllirOlOl
Ч8-Разр. ЦАП
Зеленый 172
.Л а
0 0 0 0 10 1
Таблица
0—"8-Разр-ЦАП
цветов
Красный 10
,-4/
h—10—i
it
Буфер Kaipa
Цветовые пушки
Буфер кадра
Рис.
1.13.
Цветной буфер кадра с 24 битовыми плоскостями.
всем
кадра размером 512
512
потребуется
0.0524 с. Это эквивалентно скорости регенерации 19 кадров (карти(картинок) в секунду, что значительно ниже минимально необходимой
В
30 кадров
в
скорости
секунду.
буфере кадра размером
1024 х 1024 содержится немногим больше 1 млн бит A Мбит) и
при среднем времени доступа 200 не требуется 0.21 с для доступа
ко всем пикселам. Это составляет 5 кадров в секунду. Буфер кадра
размером 4096 х 4096 содержит 16.78 млн бит на каждую битовую
плоскость! Доступ к ним займет 0.3 с. Для достижения скорости
регенерации 30 кадров в секунду при таком растре требуется средсредняя эффективная скорость доступа 2 не/пиксел.
Работа в реальном времени с растровыми графическими устдоступа
ко
пикселам
х
элементов
устройствами осуществляется путем одновременного доступа к груп-
16, 32, 64 и более пикселов. В случае цветного буфера кадра
каждый пиксел может содержать до 32 бит, при этом все битовые
плоскости для каждого пиксела доступны одновременно. При средгруппам по
среднем
28
времени доступа для каждой группы
Гл.
1.
Введение
в
машинную
графику
пикселов
1600 не возмож-
Цветовые пушки
Рис. 1.14. Цветной буфер кадра с 24 битовыми плоскостями и
таблицей цветов.
10-разрядной табли-
¦
i
Усилитель
Элек гронные
1
i
iоризонтального
фокусирующие
линзы
L,
I
отклонения
7
i
Анод (слой
i
люминофора)
L г-
Lг
Электронный луч
•
I
!
L 5-
1
i
i
вертикального
Рис. 1.15. Сплошные фигуры на растровом гра-
I
отклонения
графическом устройстве.
i
Рис.
работа
на
в
реальном времени
х
и
512
1024
х 1024.
512
для
буферов
кадров
что не
масштабе времени с приемлемыми скоростями регенерации, на рас-
растровых устройствах достичь труднее, чем на векторных дисплеях с
регенерацией, на них легче изображать сплошные фигуры с плавныплавными переходами цветов. Как показано на рис. 1.15, растровое предсплошной «полигональной»
фигуры концептуально про-
просто.
Здесь представление сплошной фигуры, ограниченной отрезка-
отрезками
L1, L2, L3, L4, достигается установкой всех пикселов внутри
ограничивающего многоугольника
в
соответствующий цвет в буфе-
буфере кадра. Алгоритмы «растровой развертки» сплошной области обобсуждаются
в гл.
1.16.
Электронно-лучевая трубка.
размером
Хотя производительности, необходимой для работы в реальном
представление
Усилитель
Катод
2.
препятствовало, то в результате их воздействия на люмино-
люминофор весь экран ЭЛТ засветился бы ярким светом. Однако облако
электронов с помощью электронных линз фокусируется в узкий,
строго параллельный пучок. Теперь сфокусированный электронный
луч дает одно яркое пятно в центре ЭЛТ. Луч отклоняется или попозиционируется
центра
с
влево или
помощью
вправо
от
центра
и(или) выше или ниже
усилителей горизонтального
и
вертикального
отклонения.
Именно
дисплеев
растровых.
—
в
данный
как с
момент
проявляется
запоминанием, так и с регенерацией
В векторном дисплее электронный луч
непосредственно
отличие
из
может
—
векторных
от
растро-
быть отклонен
любой произвольной позиции в любую другую
произвольную позицию на экране ЭЛТ (аноде). Поскольку люмино-
1.6.
форное покрытие нанесено на экран ЭЛТ сплошным слоем,
УСТРОЙСТВО ЭЛЕКТРОННО-ЛУЧЕВОЙ ТРУБКИ
в
ре-
результате получается почти идеальная прямая. В отличие от этого в
Описанный выше буфер кадра сам по себе не является устройством
вывода, он просто применяется для хранения рисунка. Наиболее ча-
устройства отображения, используемого с буфером
кадра, выступает видеомонитор. Что^ы понять принципы работы
растровых дисплеев и в некоторой степени векторных дисплеев с
регенерацией, нужно иметь представление о конструкции ЭЛТ и мечасто в
методах
качестве
создания
На рис. 1.16
схематично
на
составляет
экране
видеоизображение. Люминофорное
покрытие
растровой ЭЛТ тоже не непрерывно, а представляет со-
собой
множество тесно
может
позиционироваться луч,
1.7.
УСТРОЙСТВО ЦВЕТНОЙ РАСТРОВОЙ ЭЛТ
расположенных мельчайших точек, куда
мо-
образуя мозаику.
показана
одинаковый заряд). Эти электроны притягиваются к
сильно
заря-
заряженному положительному аноду. На внутреннюю сторону расширасширенного конца ЭЛТ
Гл.
мозаика
видеоизображения.
ЭЛТ, используемая в видеовидеомониторах. Катод (отрицательно заряженный) нагревают до тех
пор, пока возбужденные электроны не создадут расширяющегося
облака (электроны отталкиваются друг от друга, так как имеют
30
растровом дисплее луч может отклоняться только в строго опредеопределенные позиции на экране, образующие своеобразную мозаику. Эта
нанесен
1. Введение в машинную
Цветная растровая ЭЛТ похожа на стандартную черно-белую ЭЛТ,
описанную
электронные пушки,
предыдущем разделе. В ней находятся три электронпо одной на каждый основной цвет: красный, зеленый
в
люминофор. Если бы электронам ни-
Электронные пушки часто объединены в треугольный
блок, соответствующий подобному треугольному блоку точек крас-
графику
31
и
синий.
1.7. Устройство цветной растровой ЭЛТ
интенсивность электронного луча
лишь красную точку. Изменяя
можно получить различные оттенки.
для каждого основного цвета,
большое количество цветов для
Комбинация этих оттенков дает
на
в дисплее с высоким разрешением
Обычно
пиксела.
каждого
от двух до трех цветовых триад.
каждый пиксел приходится
1.8.
СИСТЕМЫ С ТЕЛЕВИЗИОННЫМ
Процесс преобразования хранящейся
картинки в упорядоченный набор
че-
люминофоров на экране ЭЛТ (рис. 1.17I*.
Для того чтобы электронные пушки возбуждали только соответстсоответствующие им точки люминофора (например, красная пушка возбужвозбуждала только точку красного люминофора), между электронными
пушками и поверхностью экрана помещена перфорированная меного, зеленого и синего
решетка. Это так называемая теневая маска стандарт-
Отверстия в ней образуют татакие же треугольные блоки, как и точки люминофора. Расстояния
между отверстиями называются шагом. Цветовые пушки располорасположены таким образом, что их лучи сходятся и пересекаются в плоплоскости теневой маски (рис. 1.18). После прохождения через отверотверстие красный луч, например, защищен или маскирован от пересечестандартной цветной ЭЛТ с теневой маской.
зеленой
с
синей
или
точкой
люминофора. Он можег пересечь
человека
Системе визуального восприятия
для рассмотрения
требуется конечный интервал времени
Однако обеспечить впечатление непрерывности
элементов картины.
только
позволит
инерция
конкретный
показывает
включая яркость
или изменения
два'раза
Синий луч
демонстрации
кинофильма.
показывается
этом
При
но
образом, для фильма скорость
изменения равна 24,
называемого
чересстрочной разверткой.
американской стандартной видеосистеме
сканирования. В аме-
используется
в
совокупности
отношением
или видовым,
525 горизонтальных строк с кадровым,
четвертям ее шири4-3 т е высота видовой области равна трем
или
смены
кадра,
составляет
Скорость воспроизведения,
кона два поля, каждое из
30 кадр/с. Однако каждый кадр делится
чередуются
половине картинки. Эти два
которых содержит по
каждые
Они попеременно показываются через
поля
i
перемежаются.
с нечетными номерами A,
1/60 с Одно поле содержит все строки
или
Схождение лучей
начинает-
B, 4, 6,...). Сканирование
') другое
Каждая строка
начинается в'верхнем левом углу экрана
слева направо. В то время,
5
3
Рис. 1.18. Расположение
электронной пушки и теневой маски цветной ЭЛТ.
этом и следующих рисунках R
—
от
blue (синий).
—
—
сокращение от red
(красный), G
—
от green
как
в
-
с четными
сканируется
или
представляется
электронный луч движется поперек экрана
Прим. ред.
33
1. Введение
а
с нечетного поля.
поле
(зеленый), В
скорость
достигается
48. В телевидении тот же самый эффект
'
Красный луч
Гл.
в
и в результате
каждый кадр показывается дважды,
¦ авоспроизведения 48 кадр/с.
скорость
эффективная
получается
а
24 кадр/с,
ширины
32
секунду при усло-
или
Телевидение использует метод растрового
точки люминофора
в
вывода
воспроизведения
скорость регенерации
ситуация имеет мебольше, т. е. 50 кадр/с. Аналогичная
при
место
Экран ЭЛТ
-—,
1} На
изображения и конкретЭЛТ. Опыт показыва-
что минимальная
условии
что
мерцание. На мерца-
изображения является 25 кадров
с помощью метода,
Красная, зеленая, синяя
мал,
люминофор, используемый для экрана
минимальной скоростью
что для практических целей
регенерации
Зеленый луч
настолько
который
интервал,
ряд факторов,
-
Теневая маска
такой
зрительного восприятия перекрывает
мерцание влияет
ким
-—
телеэкране называется раснабор точек и частота воспроиз-
точек на
принципах электроники.
на
и
пересечения
буфере кадра растровой кар-
растровой разверткой. Сканируемый
так
визуального восприятия,
воспроизведения основаны как на особенностях
Рис. 1.17. Точечный люминофорный растр для ЭЛТ с теневой маской.
металлическая
в
РАСТРОМ
машинную
графику
1.8. Системы
с
телевизионным растром
в
слева направо, он
также перемещается
вертикально вниз, но с намного меньшей скоскоростью. Таким
«горизонтальная»
образом,
самом деле слегка наклонена.
луч делают невидимым и
Кадр
сканирующая строка на1
Нечетное поле сканирования
При достижении правого края экрана
i
Четное поле сканирования
1
i
быстро возвращают к левому краю. Та-
Такой горизонтальный возврат
I
Видимые
Вертш«льный обратный
нечетные строки
ход для нечетных строк
Вертикальный обратный
Видимые
четные строки
ход для четных строк
луча обычно занимает около 17% вревремени, отведенного для одной сканирующей
строки. Затем этот пропроцесс повторяется со
следующей нечетной строкой. Так как половиполовина от 525 равна 262 Уг
строки, то при завершении
сканирования по-
поля
нечетных
(рис. 1.19
строк луч окажется
в
241 Уг строки
центре нижней строки экрана
1.20). Луч затем быстро переводится в центр
и
I
|
21 строка
|
262 Уг строки
Перевод луча для поля четных строк возвращает его в
левый угол,
и весь
,
21 строка
,
262 Уг строки
S2S \.1
строк
^УДЧ
I
JJ.J
Рис. 1.20. Схема 525-строчного стандартного кадра
невидим или
выключен.
правом
верхний
241 Уг строки
верхней
стороны экрана. Так производится вертикальный
перевод луча для
нечетного поля. Время, затрачиваемое на
него, эквивалентно времевремени, затрачиваемому на сканирование 21
строки. Затем показываетпоказывается поле четных
строк, после чего луч оказывается в нижнем
углу.
|
верх-
процесс повторяется снова. Таким
образом,
показываются два поля для каждого
кадра, т. е. 60 полей в секунсекунду. Данный метод существенно уменьшает
мерцание, так как глаз
воспринимает скорость воспроизведения поля.
Хотя в принятой в США
стандартной видеосистеме предусмотпредусмотрено 525 строк, на самом деле видимы
только 483 строки, так как
время, затрачиваемое на сканирование 21
строки, уходит на вертивертикальный перевод луча!). В течение этого
времени электронный луч
сканирующую строку, легко подсчитывается
кадра 30/с следующим образом:
1
1
———
х
30 кадр
Так
как
для
воспроизведения
МКС
кадр
=
—
частоты
63.5
525 строка
строка
приблизительно 10 Vi мке тратится на горизонтальный
перевод луча, то вывод видимой части каждой строки должен быть
завершен за 53 мкс. В строке при нормальном соотношении сторон
видеообласти, равном 4:3, находится 644 пиксела. Таким образом,
время, отпущенное на
1
Время, отпущенное на каждую сканирую-
считывание
1
МКС
53
х
строка
Во
многих
и
вывод
строка
=
пиксела, равно
82 нс
644 пиксел
растровых дисплеях, построенных
на
основе
буфера
кадра, применяется разрешение изображения 512 пикселов в строке.
На считывание и вывод пиксела при таком разрешении отводится
приблизительно 103 наносекунды. Аналогичные результаты получаполучаются для
625-строчной видеосистемы с частотой воспроизведения
25 кадр/с, используемой в Великобритании и большинстве стран
Рис. 1.19. Схема чересстрочной
начинается со строки 1.
Европы.
развертки для растра из семи строк. Нечетное поле
Пунктиром обозначен горизонтальный обратный ход
Вертикальный обратный ход луча для нечетного поля
дтя четного поля
1} Во
—
внизу справа.
многих растровых графических
обработки другой
луча.
начинается внизу в
иентре, а
устройствах это время используется для об-
информации.
Метод чересстрочной развертки не является абсолютно необхонеобходимым при выводе видеоизображения, однако изображение без чечередования строк
будет несовместимым со стандартным телевизителевизионным приемником. При отсутствии чересстрочной развертки для
Устранения мерцания придется увеличить частоту воспроизведения
До 60 кадр/с, а это, конечно, сокращает в 2 раза время для обра-
обработки пиксела. Более высокое разрешение по числу строк и количе34
Гл.
1. Введение
в
машинную графику
1.8.
Системы
с
телевизионным
растром
ству пикселов в строке также уменьшает это время; например, при
разрешении 1024 х 1024 на считывание и вывод пиксела отводится в
4 раза
меньше
чем
времени,
25 не! В
при разрешении 512 х 512,
прибли-
—
потребуется очень быстрая память
для буфера кадра и такой же быстрый ЦАП.
приблизительно
этом
случае
1.9. ДИАЛОГОВЫЕ УСТРОЙСТВА
После того как изображение построено на экране, необходимо как-то
взаимодействовать с ним или модифицировать его. Для удовлетво-
потребности был разработан ряд диалоговых устустройств. Среди них можно назвать планшет, световое перо, рычаг,
мышь, ручки для ввода скалярных величин, функциональные перепереключатели или кнопки и, разумеется, обычную алфавитно-цифроалфавитно-цифровую клавиатуру. Прежде чем перейти к обсуждению этих физичефизических устройств, рассмотрим функциональные возможности диалодиалоговых графических устройств. Обычно насчитывают четыре или
пять таких классов
[1-3
1-6]. Логическими диалоговыми устустройствами являются локатор, валюатор, селектор и кнопка. Из-за
широкой распространенности алфавитно-цифровой клавиатуры ее
часто выделяют в пятый класс, называемый клавиатурой. На саудовлетворения
этой
Рис.
1.21.
Алфавитно-цифровая
киавиат>ра.
(С
разрешения
Evans
&
Sutherland
Computer Corp.)
—
самом деле
клавиатуру
можно
концептуально
и
функционально счи-
набором кнопок.
Функцией локатора является выдача координатной информации
считать
в
двух
координат
или
трех измерениях. Обычно выдаваемые значения коорди-
находятся
пространстве)
и
в
пространстве
обычный
карандаш), который служит для
указания
для
это вещественное число между
одиночной
нулем и
величины.
обеспечивается
отслеживающего
с
помощью
перемещение
небольшого
карандаша
символа
по
Обычно
максимумом. Кнопка используется для выбора и активирования со-
событий или процедур, управляющих ходом диалога. Кнопка обычно
предоставляет двоичную («включено» или «выключено») цифровую
информацию. В функцию селектора входит идентификация или вы-
выбор объектов или подкартинок в выведенном изображении. ЛогиЛогическая
На
клавиатура обрабатывает текстовую информацию.
планшет
локаторов
является
(рис. 1.22). Планшеты можно использовать либо отдель-
либо в комбинации с графическим дисплеем на ЭЛТ. В первом
случае их часто называют оцифровывателями. Сам по себе планотдельно,
планшет
состоит
из
плоской
поверхности
и
карандаша
(похожего
на
Рис, 1.22. Типичный планшет. (С разрешения фирмы Adage)
36
Гл.
1. Введение в машинную
графику
37
|.9. Диалоговые устройства
(курсора),
поверхности
некоторым вещественным
рис. 1.21 показана типичная клавиатура.
Наиболее общим устройством
класса
по-
связь на экране
использовании вместе с дисплеем на ЭЛТ обратная
устройства (концептуальном про-
ввода
на
возможность узнать некоповерхности планшета. Часто существует
и планшенекоторую информацию о расстоянии между карандашом
планшетом: близко или далеко от поверхности находится карандаш. При
могут быть как относительными, так и абсолютными.
Валюатор применяется
точки
отсле-
планшета.
В одной
звуковые волны.
интересной реализации
планшета
применяются звуко-
Карандаш используется для создания искры электриче-
электрического разряда, вызывающей звуковую волну. Она движется во всех
направлениях от карандаша по поверхности планшета, образуя крукруговой звуковой
направлениях
фронт. На его краях в перпендикулярных направледва
смонтированы
чувствительных
ленточных
микрофона.
Координатные расстояния можно определить с помощью точного
измерения времени,
за
которое звуковая волна доходит от каранда-
микрофонов. Данную методику можно распространить на
три измерения (рис. 1.23).
Наиболее популярны конструкции планшета, в основе которых
лежит электромагнитный принцип. При этом электрические имкарандаша
до
импульсы проходят через пластину из магнитострикционного матери-
материала, используемую в качестве поверхности планшета. Время, за ко-
чередующиеся импульсы, параллельные координатным осям
х и у, доходят от края планшета до карандаша, определяется с попомощью карандаша и соответствующих индикаторов. Эти данные
которое
преобразуются в координаты х, у.
Сенсорная панель похожа на планшет и относится к классу ло-
легко
Рис. 1.23. Трехмерный звуковой планшет.
(С разрешения фирмы Science Accessories
локаторов. В типичной
Corp.)
При использовании в качестве отдельного оцифровывателя обратобратная связь обеспечивается с помощью
цифровых отсчетов.
Планшеты выдают координатную информацию в двух или трех
измерениях. На рис. 1.23 показан трехмерный планшет. Значения,
выдаваемые планшетом,
представлены в
Они nporpaMiMiio преобразуются
Обычное разрешение и
При
в
координатах
пользовательские
точность составляют от
устройства.
координаты.
0.025 до 0.0025 см.
использовании вместе с дисплеем разрешение планшета дол-
должно совпадать или превосходить разрешение дисплея.
При создании планшетов используется
принципов. В первом планшете RAND
сетка
отдельных
проводов,
ряд различных принци-
[1-7] использовалась ортогональная
расположенных
под
поверхностью.
Каждый провод кодируется таким образом, что карандаш, дейстдействующий
как
приемник
информации,
в
каждой
точке
пересечения
(проводов) получал уникальный цифровой код. Декодирование этоэтого кода давало
ограничениями на
являются
координаты х, у карандаша. Очевидными ограничеразрешение таких матрично-кодируемых планшетов явля-
плотность
расположения проводов и способность приемника
обрабатывать уникальный код. Точность ограничивается линейнолинейностью
конкретных проводов, а также их параллельностью в двух ор-
ортогональных направлениях.
38
Гл. 1. Введение в машинную графику
двух противоположных смежсторонах смонтированы светочувствительные элементы. Лю-
расположены
смежных
сенсорной панели на двух смежных сторонах
источники света,
а
на
Любой предмет, например палец, прерывая два ортогональных луча
света, позволяет определить пару координат х, у. Из-за низкого
разрешения этот прибор лучше всего использовать для грубых опеопераций указания. В этом качестве сенсорную панель часто монтирумонтируют
поверх экрана ЭЛТ.
В таких локаторных устройствах,
качестве
часто
как
рычаг, шар и мышь, в ка-
чувствительные
переменные резисторы или потенциометры. Аналогичным образом
реализуются и ручки для ввода скалярных величин, которые являделителя
напряжения
используются
устройствами класса валюаторов. Точность всех этих устустройств зависит от качества потенциометра и обычно колеблется от
являются
0.1 до 10% всего диапазона измерения. Хотя разрешение потенциопотенциометра по существу и бесконечно,
цифровых
системах требует аналого-цифрового (АЦ) преобразования. Обычно
разрешение АЦ преобразователя варьируется в диапазоне от 8 до
14 бит, т. е. от 1/256 до 1/16384. Валюаторы также реализуются с
помощью цифровых преобразователей углового положения, котокоторые
для
каждого
но его использование в
инкрементального угла поворота ручки выдают
Цифровой результат. Типичное разрешение
1.9. Диалоговые устройства
—
от
1/256 до 1/1024.
Типичным валюатором является
рычаг (рис. 1.24). Подвижный
рычаг обычно оборудуется двумя
либо потенциовалюаторами
расположенных под прямым
резиной
колес,
легком
футляре. При
в
углом
маленьком,
—
потенциометрами, либо преобразователями углового
смонтированными
на
основании
положения, смонтиро-
прибора. Валюаторы выдают результаты,
nponopujHonaibiibie смещению ручки. В
рычаг легко добавить
тре-
третью
степень
свободы, например, используя третий
валюатор для
измерения угла поворота рычага. Для
обратной связи обычно исиспользуют графический курсор.
Шар
во
многом
рычагу. Чаще всего его можно
встретить в радарных установках,
например, в системах управлеуправления воздушными
перевозками. Сферический шар
смонтирован в ососновании
прибора, причем над поверхностью возвышается
только
его часть.
Шар может свободно вращаться в любом
направлении.
В
основании
смонтированы
два
валюатора
преобразователи углового положения),
поворот шара и выдают
результаты,
относительным величинам углов.
(потенциометры либо
которые улавливают пово-
пропорциональные относительВдобавок к обратной связи в виде
обычного
курсора пользователи получают
тактильную обратную связь в виде
скорости поворота
И рычаг,
и
фиксированным началом
координат. Мышь
относительное начало
поверхности
колеса
(потенциометров или преобрапреобразователей углового положения). Совокупное движение осей дает ко-
координаты х,-у.
Мышь
показана
на
рис.
1.25. Устройство
можно
переместить в любом направлении и поставить на поверхповерхность, по-другому ориентировав. В этом случае изменяется система
поднять,
сама система
в
которой генерируются данные, т. е.
связанная
координат,
с данными.
мышь, но не са-
Используемый
для
обратной связи курсор не движется, когда мышь не контактирует с
поверхностью. Из-за проскальзывания колес, особенно при диагодиагональных передвижениях, у мыши уменьшается точность. С недавнедавних
пор
оптическом,
появились
в
продаже мыши,
так и на магнитном
неточности, связанные
с
работающие как на оптиче-
принципе. В обоих случаях исключаются
проскальзыванием
колес.
Вероятно, наипростейшими из валюаторов являются ручки для
ввода скалярных величин. Такие ручки, показанные на рис.
являются
или
углового импульса вращения
шара.
шар имеют фиксированное положение с
фиксирован-
движении
по
управляют осями двух валюаторов
координат,
аналогичен
мыши
по
существу
чувствительными
вращающимися
1.26, яв-
потенцио-
потенциометрами или точными цифровыми преобразователями углового поположения, которые обычно объединяют в группы. Такие устройства
[1-8], напротив, имеет только от-
координат. Мышь состоит из
двух покрытых
V
\
х
л
\
«
I
4CI.V"
V
Рис. 1.24. Рычаг. (С
разрешения фирмы
Measurement Systems.)
40
Гл. 1. Введение
в
Рис. 1.25. Мышь.
(С разрешения
Apple Computer.)
фирмы
Рис. 1.26. Набор ручек для ввода скапярных значений. (С разрешения фирмы Evans
& Sutherland Computer Corp.)
машинную график}
41
1.9. Диалоговые устройства
Поле зрения
Корпус
Переключатель
затвора
Пучок световодов
Рис. 1.27. Функциональные кнопки. (С разрешения фирмы Adage.)
Фотоумножительная
особенно хорошо подходят для задания
начальных
значений для
трубка
функций поворота, переноса, масштабирования или трансфокации.
Кнопки или функциональные переключатели, показанные на
рис. 1.27, являются переключателями рычажного или нажимного
типа.
Они могут быть постоянно нажаты, постоянно отжаты, ли-
либо иметь кратковременный контакт. Наиболее удобный тип функфункционального переключателя
световыми индикаторами,
кнопки
данный
в
включают в
активны.
момент
другие устройства.
нажатии
Часто
кнопки
и
переключатели
Например, на тонком конце каран-
карандаша. На
мыши тоже
находится одна
или
подлинным
устройством указания является
све-
Перо, схематически показанное на рис. 1.28, содержит
чувствительный фотоэлемент и соответствующую электрическую
это
цепь. Основная информация, поставляемая световым пером
синхронизация1 *, поэтому она зависит от того, что изображается на
световое
Рис. 1.28. Схема светового пера.
пользование
светового
пера
с дисплеями
на
запоминающей ЭЛТ.
Его можно использовать только с дисплеями с регенерацией
—
век-
векторными или растровыми.
В тот момент, когда активированное световое перо оказывается
над той
областью ЭЛТ векторного дисплея, в которой происходит
рисование, дисплейному контроллеру посылается сигнал. Он позвопозволяет определить
несколько кнопок.
Единственным
контроллеру
указывающими, какие переключатели или кноп-
карандаша планшета обычно располагается переключатель, срабатываю-
срабатывающий при
Цепь формирования импульсов
объединяет в себе обе эти возможно-
Обычно имеется возможность программно управлять световы-
возможности.
К дисплейному
перо.
конкретную команду в дисплейном буфере, выпол-
выполняемую в этот момент времени. Прослеживание команд назад с попомощью
дисплейного
контроллера
позволяет
определить
отрезок,
объект или подкартину, которые были указаны. Используя графиграфический курсор, световое перо можно применять также
как
локатор
—
рисунке, и от порядка,
в
котором он выводится. Это исключает ис-
для векторного устройства с регенерацией.
Так как в растровом дисплее изображение генерируется в фикси-
фиксированной
последовательности,
световое
перо
используется
для
определения горизонтальной сканирующей строки (координаты у) и
1}
Межд> попадающим в поле зрения пера электронным лучом и командами про-
программы дисплейного контроллера, вызвавшими попадание луча в данную точку.
Прим. перев.
—
позиции
в
этой строке
(координаты х). Отслеживая в контроллере
можно снова определить, какой отрезок, объект или
подкартина были указаны. Этот метод несколько усложняется в
программу,
случае чересстрочной развертки. Приведенное выше описание означа42
Гл.
1. Введение в машинную
графику
43
1.9.
Диалоювыс устройства
Экран ЭЛТ
e
b
/
/
Rotate X
Rotate Y
/
/
Rotate z
\
Trans X
Trans Y
у
/
/
Trans
Z
Zoom
Scale
a
с
1
t
2
3
4
5 6
7
8 С
9 0
d
i
i
Рис. 1.29. С помощью выбора из меню световое перо использовано для моделирова-
Рис. 1.30. Использование планшета для
моделирования всех лошчсеких
функции логической кнопки. (С разрешения фирмы Adage.)
моделирования
функций: (а) локатора, (Ь) кнопки, (с) клавиатуры, (d) валюатора, (е)
ет
селектора.
также, что для растрового устройства световое перо может быть
использовано
скорее как локатор,
устройство указания.
Хотя для всех логических диалоговых устройств существуют сосоответствующие физические устройства, в конкретной ситуации нечем как
необходимо
некоторые из них могут отсутствовать. Таким образом,
уметь
пример,
моделирования
для
логические
моделировать
рис. 1.29 показан
в
функции
диалоговые
котором
световое
устройства.
перо
На
используется
логической кнопки путем
выбора из
меню световых кнопок.
Планшет
физических устустройств. Его можно использовать как оцифровыватель для получеполучения
—
одно
координат х,
у.
из
самых
универсальных
Вдобавок его легко можно
использовать
для
функций, как это покапоказано на рис. 1.30. Сам планшет является локатором (позиция а на
рис 1.30). Используя графический курсор, можно реализовать функмоделирования
функцию кнопки.
44
диалоговых
курсором на кнопку меню
полученные с
(или вблизи нес). Координаты, получен-
планшета, сравниваем
кнопок меню.
Гл. 1. Введение в машинную
графику
координатами х, у
Если находится подходящая кнопка, то она
кно-
активирует-
(позиция b на рис. 1.30). Аналогичным образом можно реализореализовать клавиатуру (позиция с на
рис. 1.30).
Отдельный валюатор обычно реализуется в сочетании с кнопактивируется
кнопкой.
Конкретная функция для определения значения выбирается
кнопкой, как правило, из меню. Затем валюатор можно смоделиросмоделировать с помощью «числовой оси»
(позиция d на рис. 1.30). Переме-
Перемещение курсора вдоль оси
генерирует координаты х, у, одна из кото-
которых
как
интерпретируется
всех логических диалоговых
Для этого с помощью карандаша планшета указываем
с известными
процентное
отношение
к
диапазону
валюатора.
Функцию указания можно реализовать с помощью локатора пупутем определения относительных
координат х иу небольшого «окна
45
1.9. Диалоговые устройства
указания»
для его
Это окно
затем
становится
графическим
курсором,
и
ЛИТЕРАТУРА НА РУССКОМ ЯЗЫКЕ
позиционирования используется карандаш планшета. Коор-
Координаты л:, у каждого из интересуемых отрезков,
картинок сравниваются
Если они попадают
указанным.
Для
в
затем
с
текущим местоположением окна.
пределы окна,
сложных
объектов или под-
то
изображений
1-1
1-2
данный элемент считается
программная
реализация
использовать
можно
как
оцифровыватель, его,
подобно планшету,
также
применять для моделирования всех логических диалоговых
функций.
1.10. РЕЗЮМЕ
В этой главе мы попытались дать обзор основных понятий машинмашинной
графики и ее аппаратного обеспечения. Более детальное и прак-
практичное
представление
о
предмете
можно
получить
лишь
путем
сравнения реального аппаратного и программного обеспечения с изизложенными концепциями.
1.11. ЛИТЕРАТУРА
1-1
Rogers, David F., and Adams, J. Alan. Mathematical Elements for Computer GraphGraphics, McGraw-Hill Book Company, New York. 1976.
1-2 Newman, William M., and SproulU Robert F., Principles of Interactive Computer
Graphics 2d cd., McGraw-Hill Book Company, New York, 1979.
1-3 Foley. J. D.. and Van Dam, A., Fundamentals of Interactive Computer Graphics,
Addison-Weslcy Publishing Company, Reading, Mass., 1982.
1-4
Foley. J. D., and Wallace, V. L., "The Art of Natural Man-Machine Conversation,"
Proc. IEEE, Vol. 62, pp. 462-471, 1974.
1-5 Wallace, V. L.. "The Semantics of Graphic
Input Devices," Computer Graphics,
Vol. 10, pp. 61-65, 1976.
1-6 Ohlson, Mark, "System Design Considerations for Graphics Input Devices," Com-
Computer, pp. 9-18. Nov. 1978.
1-7 Bergeron, R. D., Bono. P. R., and Foley, J. D., "Graphics Programming Using the
Core System," Computing Surveys, Vol. 10, pp. 389-443, 1978.
1-8 Davis. M. R., and Ellis, T. O., "The RAND Tablet: A Man-Machine Graphical
Communication Device," AFIPS Conf. Proc., Vol. 26, Part I, 1964 FJCC, pp. 325
-332. 1964.
46
Введение
в
машинную
графику
основы
машинной
графики.
—
Ньюмен У., Спрулл Р. Основы интерактивной машинной
графики
—
М
•
""
Мип
*
1976.
1-3
Фол и Дж.,
М.:
данного алгоритма может оказаться медленной, но при аппаратной
реализации заметной задержки не будет. Хотя световое перо нельзя
Роджерс Д. Ф., Адаме Дж. Математические
М.: хМашиностроение, 1980.
1-4
Мир,
вэн
Дэм А. Основы интерактивной машинной графики
В 2-х т
—
1985.
Фоли Дж., Уоллес В. Искусство организации естественного
графического диадиалога человек
—
машина,
ТИИЭР, 62, 4, 1974.
Прежде чем приступать к обсуждению конкретных алгоритмов
рисования отрезков, полезно рассмотреть общие требования к татаким
алгоритмам и
характеристики
Растровая графика
ответить на
вопрос,
изображения. Очевидно,
что
каковы желаемые
должны
отрезки
прямыми, начинаться и заканчиваться в заданных
яркость вдоль отрезка должна быть постоянной и
длины
и наклона.
характе-
выглядеть
точках.
не
Далее,
зависеть от
Наконец, рисовать нужно быстро. Как это часто
бывает, не все из перечисленных критериев могут быть полностью
удовлетворены. Сама природа растрового дисплея исключает генелиний
абсолютно
(кроме ряда специальных
прямых
генерацию
случаев), равно как и точное совпадение начала и конца отрезка с
заданными точками.
Для работы
с
специальные методы
генерации изображения, вычерчивания прямых и кри-
устройствами растровой графики нужны специаль-
кривых
линий, закраски многоугольников, создающей впечатление
сплошных объектов. Эти методы
рассматриваются в данной главе.
2.1.
Тем не менее при достаточно высоком разре-
разрешении дисплея можно получить приемлемую
аппроксимацию.
Постоянная вдоль всего отрезка яркость достигается
горизонтальных,
проведении
и
вертикальных
наклоненных
при
под
°
прямых. Для всех других ориентации разложение в растр
приведет к неравномерной яркости, как это показано на рис. 2.1.
углом 45
Даже для частных случаев яркость зависит от наклона:
АЛГОРИТМЫ ВЫЧЕРЧИВАНИЯ ОТРЕЗКОВ
лишь
заметим,
например, что расстояние между соседними пикселами для отрезка
Поскольку экран растрового дисплея с электронно-лучевой трубкой
под
(ЭЛТ) можно рассматривать как матрицу дискретных элементов
(пикселов), каждый из которых может быть подсвечен, нельзя не-
прямых.
углом
45° больше,
чем
для вертикальных
и
горизонтальных
Поэтому вертикальные и горизонтальные отрезки будут
выглядеть ярче,
чем наклонные.
Обеспечение одинаковой яркости
определения пикселов, наилучшим образом
аппроксимирующих за-
вдоль отрезков разных длин и ориентации требует извлечения квадквадратного корня, а это замедлит вычисления. Обычным компромис-
заданный отрезок,
компромиссом
непосредственно провести отрезок из одной точки в другую. Процесс
называется разложением в растр.
В сочетании с
является
нахождение
приближенной длины
к
минимуму,
предпочтительное
отрезка,
сведение
использование
построчной визуализации изображения он известен как
преобразование растровой развертки. Для горизонтальных, верти-
вычислений
вертикальных
микропрограммном уровне.
В большинстве алгоритмов вычерчивания отрезков для упроще-
процессом
и
наклоненных под
элементов очевиден.
нужные пиксеаы
углом 45
°
отрезков
выбор растровых
При любой другой ориентации выбрать нуж-
труднее,
что показано
на
арифметики,
упрощения
рис. 2.1.
а
также
реализация алгоритмов
вычислений используется пошаговый метод.
подобного алгоритма:
/
/
/
1—
/
/
1
<,
Простой пошаговый алгоритм
1
V 'У
1
позиция
шаг
[(.'III
1
начало
приращение
if позиция
—
конец < точность
if позиция >
конец then
2
if позиция <
конец then
3
then 4
Гл. 2. Растровая графика
позиция
=
позиция
—
шаг
goto 1
Рис. 2.1. Разложение в растр отрезков прямых.
48
=
=
<
2
49
на
2.1. Алгоритмы вычерчивания отрезков
целой
аппаратном
или
Приведем пример
3
4
позиция
=
позиция + шаг
goto 1
аппроксимируем
finish
if
длину отрезка
х,) ^ abs(y2
У]) then
Длина
abs(x2
х,)
abs(x2
-
—
=
Простой алгоритм разложения отрезка в растр, описанный в слеследующем разделе, иллюстрирует применение
пошаговых методов.
else
Длина
end if
ЦИФРОВОЙ ДИФФЕРЕНЦИАЛЬНЫЙ АНАЛИЗАТОР
процесс.
dy
-.—
const
=
dx
Ду
или
-
-
у,)
или
Ду равным единице раст-
растра
Один из методов разложения отрезка в
растр состоит в решении
дифференциального уравнения, описывающего этот
прямой линии имеем
abs(y2
=
большее из приращений &х
полагаем
2.2.
—
Для
Дх
АУ
Ax
Решение представляется в виде
=
х,)/Длина
У j)/Длина
—
~
округляем величины, а не отбрасываем дробную часть
использование знаковой функции делает алгоритм пригодным для
квадрантов
всех
У-1-У
s 2
(х2
(У2
=
х
=
у
=
Sign(Ax)
х, + 0.5
*
0.5
Sign(Ay)
у, +
*
начало основного цикла
3V+1
=
У!+1
=
>'/ + Д>'
i
1
=
while
B.1)
У1^21
yi +
(i < Длина)
Plot
(lnteger(x), lnteger(y))
~
X2
где xv у,
пх2,у2
—
X\
концы разлагаемого
значение для очередного шага вдоль
x
начальное
У
=
У +
Фактически уравнение
i
отрезка ъу(
отрезка.
—
B.1) представляет собой рекуррентное соотношение для
последова-
последовательных значений у
вдоль нужного отрезка. Этот
метод, используиспользуемый для разложения в
растр отрезков, называется
простой алгоритм, работающий во всех
квадрантах:
finish
Приведем пример, иллюстрирующий работу алгоритма:
Пример 2.1. Простой ЦДА в первом квадранте
Рассмотрим отрезок из точки @, 0) в точку E, 5). Используем ЦДА аля разложения
этого отрезка
Процедура разложения в растр отрезка по методу
цифрового дифференциального анализатора (ЦДА)
предполагается, что концы отрезка (х,, yj) и (х2,
Integer
части, т. е. lnteger( —&5)
=
-9, а не —8. В алгоритме
используется именно такая функция.
—
Результаты работы алгоритма таковы:
Ух
=
0
=
0
=
5
=
5
—
взятие целой
Sign
в растр.
начальные установки
у^ не совпадают
функция преобразования вещественного числа в целое.
Примечание: во многих реализациях функция Integer означает взя-
Ay
i + 1
=
end while
цифровым дифдифференциальным анализатором (ЦДА). В простом ЦДА либо
Ах,
либо ДУ (большее из
приращений) выбирается в качестве единицы
растра. Ниже приводится
+ Ax
x
=
функция, возвращающая —1, 0, 1 для отрицательного, ну-
Длина
Av
=
1
=
1
AT
==
0.5
У
==
0.5
нулевого и положительного
аргумента соответственно
результаты
50
пошагового выполнения основного цикла
Гл. 2. Растровая графика
2.2.
Цифровой дифференциальный анализатор
Plot
1
Пример 2.2. Простой ЦДЛ в
0.5
0.5
1.5
1.5
начальные установки
О. 1)
2.5
3
x^-У11
А2
У\--
2.5
0
=
-8
=
=
3.5
3.5
C, 3)
4.5
5
0
=
-
B, 2)
4
=
-4
ина
=
8
Дх
=
-1
=
-0.5
4.5
D, 4)
5.5
5.5
х
У
Полученное растровое представление
отрезка изображено на
рис. 2.2. Заметим, что концевые
точки определены точно и
выбранвыбранные пикселы
равномерно распределены
вид прямой вполне
вдоль
отрезка.
-
-0.5
=
-0.5
сделать нуль вместо
активированным пиксел с координатами
адрес пиксела задан целыми
Plot
У
неверную конечную точку от-
(рис. 2.2). Вдобавок при вычерчивании
серии последовательотрезков пиксел E, 5) будет
активирован дважды: в конце дан-
отрезка
последовательных
угла,
данного отрезка
выглядеть
и
в
начале
более яркий
как
неестественный) цвет.
иметь
(быть может, неестественСледующий пример иллюстрирует
работу алгоритма в
иной
третьем квадранте.
4
4
3
2
4
]
1
/
О
/
-2.5
-1.5
-3.5
-2.0
-4.5
-2.Ь
5
-5.5
-3.0
-6.5
-3.5
-7.5
-4.0
-8.5
-4.5
(-5,-3)
(-6,-3)
(-7.-4)
8
(-8,-4)
/
Несмотря
выглядят
точки
на
вполне
то
что
результаты,
приемлемыми,
представленные
анализ
@, 0) в точку (—8, 4) и (8, -4),
на
разложенный в растр отрезок лежит по одну сторону от реального
3
4
5
Результаты работы простого ЦДЛ в
Гл. 2. Растровая
работы
алгоритма
зависит
точность в концевых точках
первом квадранте.
целой
части использовать
от
рис. 2.3,
отрезков, проведенных из
показывает, что разложен-
одном из концов отрезка появляется лишняя точка,
12
Рис. 2.2.
52
/
/
-1.0
(-4,-2)
7
1
-1.5
(-3,-2)
3
6
5
-0.5
(-2.-1)
2
следующего. Такой пиксел может выгля-
или
-0.5
(-1,-1)
1
E, 5), что нежелательно. Ес-
координатами левого нижнего
то активация этого
пиксела даст явно
предположении, что исполь-
используется функция округления, таковы:
Внешний
единицы, то окажется ак-
инк та в
результаты пошагового выполнения основного
удовлетворителен. Однако если начальным зна-
значением переменной /
Если
-4) в третьем квадранте. Резуль-
Рассмотрим отрезок из точки @, 0) в точку (-8,
Результаты работы алгоритма таковы:
@, 0)
2
третьем квадранте
ориентации.
т. е.
и что
на
результат
Следовательно,
точ-
ухудшается. Далее, если вместо взятия цеокругление до ближайшего целого, то ре-
графика
2.2. Цифровой дифференциальный анализатор
8
-
7
-
6
-
5
-
4
-
3
2
-
1
-
0
О
A,1)
я i
г~
Уг ^ Ду/Дх ^ 1 (ошибка 5* 0)
I
-
i
2
-
0 J? Ду/Дх < Уг (ошибка
-4 V——<
щг
-
\\
-
3
4
О
-•>х
(КО)
@,0)
Рис. 2.3.
< 0)
Результаты работы простого ЦДА в третьем квадранте.
Инициализировать ошибку в
-
Уг
ошибка = ошибка + Ду/Дх
зультаты снова получатся разными. Таким
использовать более сложный
надо отступиться от
требования максимально точной аппроксима-
Вдобавок предложенный алгоритм имеет тот
аппроксимации.
он
образом, либо нужно
более медленный алгоритм, либо
и
использует вещественную
описан более приемлемый
арифметику.
недостаток, что
В следующем
разделе
алгоритм.
Рис. 2.4. Основная
идея airopiiT.via
циента, равного
1/2,
нет
Брезенхема.
какого-либо предпочтительного
В данном случае алгоритм выбирает точку A,
выбора.
1).
Не все отрезки проходят через точки растра. Подобная ситуация
2.5, где отрезок с тангенсом угла наклона 3/8
сначала проходит через точку растра @, 0) и последовательно переиллюстрируется рис.
2.3.
АЛГОРИТМ БРЕЗЕНХЕМА
Хотя алгоритм Брезенхема
пересекает
три пиксела. Также иллюстрируется вычисление ошибки при
[2-1] был первоначально разработан для
цифровых графопостроителей, однако он в равной степени
подходит и для использования
растровыми
Алгоритм выбирает оптимальные
подхо-
устройствами с ЭЛТ. Алго-
растровые координаты для представпредставления отрезка. В процессе
работы одна из координат
—
либо у
(в зависимости
единицу.
от
углового
коэффициента)
Изменение другой координаты
(либо
—
на
либо*, ли-
изменяется на
нуль,
либо
на
единицу) зависит от расстояния между действительным
положениположением отрезка и
ближайшими координатами сетки. Такое
мы назовем
0
расстояние
ошибкой.
Алгоритм построен так, что требуется
проверять лишь знак
ошибки. На рис. 2.4 это
иллюстрируется для отрезка в первом
этой
октанте,
т. е.
для
отрезка с угловым
диапазоне от нуля до единицы.
если
коэффициентом, лежащим в
Из рисунка
угловой коэффициент отрезка из точки
то его
пересечение с прямой х
прямой >>
=
1, чем к прямой у
-
=
1
можно
заметить,
@, 0) больше чем 1/2,
будет расположено ближе к прячем точка
растра A, 1)
Если угловой
A, 0).
коэффициент меньше 1/2, то верно обратное. Для углового
Гл. 2. Растровая
i
-0.5
0. Следовательно, точка
лучше аппроксимирует ход отрезка,
54
что
коэффи-
Рис. 2.5. График ошибки
в
ачгоригме Брезенхема.
рафики
2.3. Алгоритм Брезенхема
представлении отрезка дискретными
желательно
проверять
только знак
пикселами. Так как желатель-
Integer
ошибки,
устанавливается равной —1/2. Таким
образом, если угловой коэффициент
отрезка больше или равен 1/2, то величина
ошибки в следующей
точке растра с
координатами A, 0) может быть вычислена
как
то она первоначально
устанав-
=
е
=
Xj
У1
х2
т
У
Дх
угловой коэффициент. В нашем
случае при начальном зназначении ошибки —1/2
—
е
-1/2 + 3/8
=
-1/8
=
пиксела.
отрицательно, отрезок пройдет ниже середины пиксе-
Следовательно, пиксел на том же самом горизонтальном
уровне лучше
аппроксимирует положение отрезка, поэтому у
увеличивается. Аналогично вычисляем
ошибку
е
=
не
=
-
=
-
х,
АУ
У2
У1
инициализация
е с
Ду/Дх
1/2
е
Так как е
целые
инициализация переменных
=
где т
—
вещественное
—
X
е
функция преобразования в целое
Ах, Ду
х, у,
е
—
=
-
поправкой на половину пиксела
начало основного цикла
for i
=
1 to Дх
уров-
Plot
(х, у)
while (e ^ 0)
увели-
у = у + 1
е = е
1
-1/8 + 3/8 = 1/4
—
в
следующей точке растра B, 0). Теперь е
отрезок пройдет выше средней точки.
I
end while
положительно, а значит, от-
Растровый элемент B, 1) со следу-
X
=
X
+
1
координатой у лучше аппроксимирует положение
отрезка. Следовательно, у увеличивается на
единицу. Прежде чем
рассматривать следующий пиксел, необходимо
откорректировать
е
=
е
4-
Ду/Дх
следующей
по
величине
ошибку вычитанием из нее единицы. Имеем
е
=
1/4- 1
1/2 вниз,
мы
получим
как
—
Пример 2.3. Алгоритм Брезенхема
=
Так как е
=
-3/4 + 3/8
раз величину
отрицательно, то у
сказанного следует,
ошибка
что
—
это
—3/4.
задан-
Продол-
Рассмотрим отрезок, проведенный из точки @, 0) в точку E, 5). Разчожение отрезка
растр по а!горитму Брезенхема приводит к такому результату:
в
начальные установки
.V
Из всего сказанпо
=
5
е
=
1-1/2 = 1/2
Результаты пошагового выполнения основного цикла
i
Ду < Ах.
октанта,
т. е.
первого октанта
Plot
для
1
Алгоритм Брезенхема разложения в
0
Лу
оси у
растровом элементе (относипервого
=
у = 0
Д* = 5
интервал, отсекаемый
—1/2).
Приведем алгоритм Брезенхема для
случая 0 <
с
-3/8
не увеличивается.
рассматриваемым отрезком в каждом
(относительно
=
2
1. Если же перенести
Продолжение вычислений для
следующего пиксела дает
е
e
х
у
1/2
0
О
-1/2
0
1/2
1
-1/2
1
2
1/2
2
2
@,0)
растр отрезка для
0,1)
предполагается, что концы отрезка (х,,
56
Гл. 2. Растровая
графика
Пример дан ниже.
-3/4
=
отрезком лежит на 1/4 ниже прямой у
отрезок
finish
Блок-схема алгоритма приводится на рис. 2.6.
Заметим, что пересечение вертикальной прямой х
заданным
next i
у,) и (х2, yj не совпадают
57
2.3. Алгоритм Брезенхема
B,2)
1/2
2
3
1/2
3
3
1/2
3
4
1/2
4
4
1/2
4
5
1/2
5
5
C, 3)
D.4)
2.7.
Рис.
Результат показан на рис. 2.7 и совпадает с ожидаемым. Заме-
Результат
Брезенхема
Заметим, что точка растра с координатами E, 5) не активирована. Эту
точку можно активировать путем изменения условия цикла tor-next
0 to Ах. Активацию точки @,
на
поставить
в
алгоритма
работы
первом октанте.
0) можно устранить, если поста-
next i.
оператора Plot непосредственно перед строкой
2.4. ЦЕЛОЧИСЛЕННЫЙ АЛГОРИТМ БРЕЗЕНХЕМА
Алгоритм Брезенхема в том виде, как он представлен выше, требуи деления (для
требует использования арифметики с плавающей точкой
вычисления
коэффициента
углового
Быстродействие алгоритма
можно
и
увеличить,
оценки
если
ошибки). Быстро-
арифметику и исключить деление. Так
лишь знак ошибки, то простое преобразование
целочисленную
ё
=
превратит предыдущий алгорим
только
использовать
как
важен
Те Ах
в
целочисленный и позволит эф-
эффективно реализовать его на аппаратном или микропрограммном
уровне. Модифицированный целочисленный алгоритм для
октанта, т. е. для 0 < ДУ < АХ, таков:
первого
Целочисленный алгоритм Брезенхема для первого
октанта
предполагается,
совпадают и все
х
=
что
концы отрезка fx,,
переменные
—
у,) и (х2, у2) не совпада-
целые
х,
=
У
У1
Ах =у2- х1
Ау
xi
У2
инициализируем
=
ё~
Рис. 2.6. Блок-схема алгоритма Брезенхема.
58
Гл. 2. Растромня графика
59
=
~
2 * Ду
-
е с
поправкой на половину пиксела
Ах
2.4. Це.ючистснныи алгоритм
Бреюнхема
начало основного
tori
цикла
1 to Дх
=
Plot
Увеличение у на 1
(х^у)
while (e ^ 0)
у
у + 1
=
е
=
е
2 * Дх
—
Уменьшсние х на 1
Увеличение х на 1
Уменьшение х на
Увеличение х на
end while
X
=
X +
е
=
е
1
+ 2 * Ду
1
next i
finish
Уменьшение у на 1
Блок-схема, помешенная на рис. 2.6, применима и в данном случае
с соответствующими изменениями в
вычислении
ошибки.
Рис. 2.8.
ОБЩИЙ АЛГОРИТМ БРЕЗЕНХЕМА
2.5.
ента наклона
Чтобы реализация алгоритма Брезенхема была полной, необходи-
if
отрезка
Ду > Дх then
Дх
Дх
=
Врем
обрабатывать отрезки во всех октантах. Модификацию легко
необходимо
Разбор случаев для обобщенного алгоритма Брезенхема.
Ду
Врем
Ду
1
Обмен
сделать, учитывая в алгоритме номер квадранта, в котором лежит
=
=
и
отрезок
его
угловой коэффициент. Когда абсолютная
величина
=
углового
решения об изменении величины х.
(на +1 или
изменяющейся
постоянно изменяется на еди-
критерий ошибки Брезенхема используется для принятия
а
единицу,
коэффициента больше \,у
Выбор постоянно изменяющей-
1) координаты зависит от квадранта (рис. 2.8). Об-
—
Общий алгоритм может быть оформлен в следующем виде:
else
Обмен = 0
end if
инициализация е с поправкой на половину пиксела
Дх
ё = 2 * Ду
-
Обобщенный целочисленный алгоритм Брезенхема
квадрантов
основной цикл
for i
1 to Дх
=
Plot(x, у)
предполагается, что концы отрезка fx,, у,) ы (х2, у^ не совпадают
все
переменные
while (e ^ 0)
if Обмен
считаются целыми
функция Sign возвращает
и положительного
—
=
1, 0, 1 для отрицательного, нулевого
X
аргумента соответственно
=
У
=
X
У
=
Ду
=
=
е
abs(x2
abs (у2
Sign (x2
Sign (y2
-
60
Г
.
=
У + s2
S,
-
-
-
". Растроппя
графики
=
е
—
2 * Дх
end while
х,)
yj)
х,)
у,)
if Обмен = 1 then
s,
s2
обмен значений Дх и Ду в зависимости от углового коэффици=
X +
endjf
I
У1
Дх
=
else
инициализация переменных
X
1 then
61
у
eise
=
у + s2
X
=
X
+
2.5. Обший
St
алгоритм Брезенхема
ё
=
_6
_7
end if
+
e
2
¦
-4
_5
-2
-3
-'
г
Ду
next i
finish
—1
Пример 2.4. Обобщенный алгоритм Брезенхема
1Я иллюстрации
точку
(— 8,
—
обшсго алгоритма Брезеихема рассмотрим отрезок из точки @, 0)
з
4). В примере 2.2 этот отрезок был обработан с помошью простого
г
ЩА:
'ачатьные установки
а-
=
0
Рис. 2.9. Рез\'льтат работы обобщенного алгоритма Брезенхема
у =0
Дл
8
=
в
третьем
квадранте.
=
Д]'
4
4
На рис. 2.9 продемонстрирован результат. Сравнение с рис. 2.3
показывает, что результаты работы двух алгоритмов
2
Обмен = 0
е
=
отличаются.
0
2.6. АЛГОРИТМ БРЕЗЕНХЕМА
ДЛЯ ГЕНЕРАЦИИ
ОКРУЖНОСТИ
гшаговое выполнение основного цикла
В растр нужно разлагать не только линейные, но и другие, более
сложные функции. Разложению конических сечений, т. е. окружно-
Plot
0
0
-16
0
-1
-8
-1
-1
0
@. 0)
парабол, гипербол, было посвящено значительное
число работ [2-2
2-5]. Наибольшее внимание, разумеется, уделеуделено окружности [2-6
2-9]. Один из наиболее эффективных и проокружностей, эллипсов,
—
—
простых для
(-1,-1)
О
о
-1
одну
восьмую
часть
окружности. Остальные
ее
могут быть получены последовательными отражениями, как
показано на рис. 2.10. Если сгенерирован первый октант (от 0
9
-2
части
-8
-3
-2
это
0
1
-2
х, что дает в
совокупности первый квадрант. Первый квадрант отражается отно-
-16
-4
-3
относительно
-5
-3
-6
-3
-16
-6
-4
-8
-1
-4
0
-8
-4
до 45°
(-4,-2)
(-5,-3)
8
только
-16
(-3.-2)
7
алгоритмов генерации окружности принадле-
Брезенхему [2-10]. Для начала заметим, что необходимо сгене-
сгенерировать
(-2,-1)
¦»
принадлежит
понимания
против часовой стрелки), то второй октант можно получить
зеркальным отражением относительно
прямой
х
=
0
для
прямой у
получения
=
соответствующей
части
втором квадранте. Верхняя полуокружность отра0 для завершения построения. На
отражается относительно прямой у
окружности
во
=
(-6,-3)
(-7.-4)
рис. 2.10 приведены двумерные матрицы соответствующих
преоб-
преобразований.
Для вывода алгоритма рассмотрим первую четверть окружноокружности с центром в начале координат. Заметим, что если работа алгоR, то при генерации окруж0, у
алгоритма начинается в точке х
=
окружности по
63
2.6.
=
часовой стрелке в первом квадранте у является монотон-
Алгоритм
Брезенхема для генерации окружности
Отразить первый октант относите, 1ЬНО
|
-/
го п
LIOJ
Отразить первый квалрант
относительно х
=
у = X
О
Г-101
LoiJ
Отразить верхнюю
относительно у
=
О
полуокружность
Г1 01
Lo-iJ
Рис. 2.10.
Генерация полной окружности из ду(и в
убывающей функцией аргумента*
но
Рис. 2.11. Окружность
Аналогично,
исходной точкой является
у = 0, х = R , то при
генерации окружокружности против часовой
стрелки х будет монотонно
убывающей
функцией аргумента у. В нашем
случае
часовой
=
что
0, у
=
R
обозначены соответственно
mHt
mDy mv. Алгоритм выбирает пиксел, для
квадрат расстояния между одним из этих
которого минимален квад-
пикселов и
МИНИМУМ ИЗ'>
ти
=
mD =
mv =
Вычисления можно
окрестности точки
'*
Здесь
в
первом
ква-
1, у.
—
1) и от центра до точки на
окружности R2 равна
Д,-= (х,-+ IJ + (у,-- \f-R2
Как
и
в
алгоритме
Брезенхема для отрезка, для выбора соот-
соответствующего пиксела желательно использовать только знак
ошибки,
а не ее
ошиб-
величину.
При Л, < 0 диагональная точка (х{ + 1,J,
-
1) находится внут-
реальной окружности, т. е. это случаи 1 или 2 на рис. 2.13. ЯсЯсно, что в этой ситуации следует выбрать либо пиксел (х{ + 1, j,-),
т. е. тн, либо пиксел (v,- 4- 1, yf
1), т. е. mD. Для этого сначала
рассмотрим случай 1 и проверим разность квадратов расстояний от
внутри
-
окружностью, т. е.
|(JC. + , J + ^2 д2|
\(х( + IJ + (yi \J-R2\
\М2 + (у,- IJ R2\
упростить,
-
-
-
если
заметить,
что в
окрестнопересечений окружрастра, приведенных на рис. 2.13.
i +
минимизируется не квадрат
расстояния,
абсолютное значение разноразности квадратов
расстояний от центра
окружности до пиксела и до
окружности.
Прим. перев.
64
пикселов
_
(г,, у,) возможны только пять типов
окружности и сетки
до диагонального пиксела (х{ +
Предполагается,
центр окружности и начальная точка
находятся точно в точках
растра.
Для любой заданной точки на
окружности при генерации по чачасовой стрелке
только
существует
три возможности
выбрать следуследующий пиксел, наилучшим
образом приближающий окружность: гогоризонтально вправо, по диагонали
вниз и
вправо, вертикально
вниз. На рис. 2.12 эти
направления
Выбор
Разность между квадратами расстояний от центра окружности
если
.
2.12.
квадранте.
выбирается генерация по
стрелке с началом в точке х
Рис.
первом
квадранте.
первом октанте.
(рис. 2.11).
в
Гл. 2. Растровая
l.yi-1)
а
—
CD
(К)
^
^ИС- 2-^- Пересечение окружности
растра.
графика
65
2.6. Алгоритм Ьрезенхема для генерации окружности
и
сетки
окружности до пикселов в горизонтальном и
направлениях:
д = |(дг,- +
диагональном направ-
0, и при использовании того же самого критерия, что и в слуслучае 1, выбирается пиксел (*,- 4- 1, ys).
Если А, > 0, то диагональная точка (*,- 4- \,у{
1) находится
5 <
—
D2 + Су/J
R2\
-
fa + О2 + (у,-
-
D2
-
-
#2|
При 8 < 0 расстояние от окружности до диагонального
пиксела
QnD) больше, чем до горизонтального (fnH).
если 5 >
расстояние до горизонтального пиксела
образом,
при 6^0 выбираем ти
Напротив,
О,
больше.
Таким обра(тн)
вне окружности, т. е. это случаи 3 и 4 на рис. 2.13. В данной ситуа-
(v; + 1,^,)
при 8 > 0 выбираем mD в
(vjг + l,j>f.
1)
должен
быть выбран либо
(х{ 4- 1, yt
пиксел
—
1),
1), т. е. ту. Аналогично разбору предыдуmD, либо (*,•,>>,¦
предыдущего случая критерий выбора можно получить, рассматривая снасначала случай 3 и проверяя разность между квадратами расстояний
-
т. е.
от
в
что
ситуации ясно,
окружности до диагонального mD
вертикального т v пикселов,
и
т. е.
-
При 6
б'
0, когда расстояние от окружности до обоих
пикселов,
одинаковы, выбираем горизонтальный шаг.
|(а,- + IJ 4 (у,
<
О расстояние от окружности до вертикального пиксе-
-
IJ
R2\
-
=
Количество вычислений, необходимых
для оценки величины
можно
=
сократить, если заметить,
<5,
При б"
\(xif 4- (у,
-
IJ
-
-
R2\
1) больше и следует выбрать диагональный шаг mD, к
пикселу (Xj 4- 1, yt
1). Напротив, в случае 8' > 0 расстояние от
пиксела
(xity{
—
—
что в
случае 1
окружности до диагонального пиксела больше и следует выбрать
вертикальное движение к пикселу (*,¦, ys
1). Таким образом,
-
+
так как
1J + (у,-- IJ-/?2 <0
диагональный пиксел
при 8'
(xf + 1,_У,1) всегда лежит внутри
окружности, а горизонтальный
вне ее. Таким
(х,- 4- 1, >>,)
обра8
можно вычислить по
б
=
Ос, + IJ 4- О'/J
формуле
-
добавления и вычитания
6
=
Здесь в случае б'
=
в
(х,. 4- 1, yt
mv в (х-, у-
-
1)
1)
—
0, т. е. когда расстояния равны, выбран диаго-
диагональный шаг.
R2 + (х, + IJ + (у,
Дополнение до полного квадрата члена
—
при б' > 0 выбираем
-
—
образом,
^ 0 выбираем mD
-
IJ
-
Проверка компонент б' показывает, что
Я2
А-/+
(у,J с помощью добав-
IJ 4-(у,--IJ-Д2 >0
2у{ 4- 1 дает
2[(jcf- 4- IJ + (у,-
-
IJ
-
Я2]+ 2у,-
-
1
поскольку для случая 3 диагональный пиксел (*, 4-
1) нахонаходится вне окружности, тогда как вертикальный пиксел
1)
(xh yi
l,yt
-
—
В квадратных скобках стоит
по
определению
д = 2(Д,- + >v)
-
А, и его подстановка
1
б1
существенно упрощает выражение.
Рассмотрим случай 2 на рис. 2.13 и заметим, что здесь должен
быть выбран горизонтальный пиксел
является
монотонно
лежит внутри ее.
=
Это позволяет записать 5'
(*; + IJ + {у,
-
D2
-
в виде
R2 + Oaf + 0v
"
IJ
-
Я2
Дополнение до полного квадрата члена (х:,J с помощью добавления
и
(х, 4- 1,^,), так как .у являет-
убывающей функцией. Проверка компонент 8 пока-
вычитания
2х{ 4- 1 дает
д'
показывает, что
=
2[(д-/ + IJ + (у,-
-
IJ
-
Я2]- Ixi
-
1
Использование определения А,- приводит выражение к виду
(*¦ + !) +(у/- IJ-/?2 <0
поскольку
(X;
66
+
1,Л'
Гл. 2.
в
~"
случае 2 горизонтальный
(xf + 1, у.) и диагональный
^) пикселы лежат внутри окружности.
Растровая графики
6'
Следовательно,
=
2(А,- -*,)-1
Теперь, рассматривая случай 4, снова заметим, что следует вывыбрать вертикальный пиксел (*,, yt
1), так как у является моно-
67
2.6. Алгоритм Брезенхема для генерации окружности
тонно
убывающей функцией при возрастании
Проверка компонент б'
для случая 4
=
*\
показывает,
(х,-
что
=
О
О
критерия,
3, происходит верный выбор mv.
Осталось проверить только случай
=
0.
к
$j + 1, yt
пикселу
Следовательно,
1) таковы:
-
Xi+1
=
Xi + 1
=
)Ч+1
5
-
Д/ + 2ДС/+1 + 1
разработанного для случая
встречается, когда диагональный пиксел
А,-
-
Аналогично координаты нового пиксела и значение А; для ша.тътп
поскольку оба пиксела находятся вне окружности.
б' > 0 и при использовании
окружности, т. е.
=
(*+|J + 2х1ч, + 1 +(yi-\J-R2
(Xi + IJ + (у,IJ R2 + 2xi+i + 1
на
2.13, который
\ty.
1) лежит на
-
v,-
I
рис.
(*",• +
+2
—
To же самое для шага/и ^
Проверка компонент д показывает, что
к
(v,,^,-
1)
-
О,- + 1J+Ы2-/?2> О
(xt +IJ + 0v -IJ-*2
Следовательно,
у-,
—
0
=
Д/+1
д > 0 и
выбирается диагональный пиксел (*",- + 1,
1). Аналогичным образом оцениваем компоненты д' :
1J + (у,- -IJ-/?2
(JfiJ+(y,- -IJ-/?2 < О
и
5'
=
Д,--
Реализация алгоритма Брезенхема на псевдокоде для окружно
сти
+
=
ниже.
приводится
О
Пошаговый алгоритм Брезенхема для генерации
0, что является условием выбора правильного
диагональнодиагонального шага к
(х, + 1, у.
I). Таким образом, случай
0 подчиняА,подчиняется
<
—
окружности
все
в
квадранте
первом
переменные
—
целые
=
тому же
критерию,
что и
случай
А{ < 0 или Д
инициализация переменных
> 0.
Подведем итог полученных результатов:
X;
А,- < 0
Yi
5^0 выбираем пиксел (х;- +
Uy{)
б > 0 выбираем пиксел
(х, + 1,^.
—
-
—
mD
1
Л,. > 0
5'
5'
Aj
^ 0 выбираем пиксел (х, +
> 0 выбираем пиксел
(х,,^,-
=
0
1,у,—
1)
выбираем пиксел (х, + 1, J,-
—
—
—
1)
-*
\)
/wD
mD
соотношения для реареализации пошагового алгоритма. Сначала
рассмотрим горизонтальгоризонтальный шаг
к пикселу
4пиксела как
(/"
+
Xj
-г
0
или
3
As
=
0 then 20
б
=
2Д; 4- 2у{
-
1
определение случая 4 или 5
I
3
8
=
if 8
+D2 + (y,vi -О2Гл. 2. Растровая графика
=
if б <$ 0 then 10
if б > 0 then 20
.
—
У^\= У;
68
2
_
xi+]
R)
-
определение случая 1 или 2
1). Тогда координаты нового пиксела и значение
Д равны
=
Plot(Xi, У1)
Iff
1, у:). Обозначим это новое положение
(х,-
R
if As > 0 then 3
Легко разработать простые рекуррентные
ти
=
if ys ^ Предел then 4
Выделение случая 1 или 2, 4 или 5,
if As < 0 then 2
mv
—
0
2A
Предел
As
/ww
1)
=
If 8
2А4 4- 2х;
-
1
^ 0 then 20
> 0 then 30
2.(>. Алгоритм Брезенхема для
генерации
окружности
выполнение шагов
шаг
Ю
Xj
=
А{
=
Переменная предела устанавливается
ти
Xi + 1
работы алгоритма на
20
А{ 4- 2x{ 4-
1
второй октант можно получить с помощью установки
с помощью отражения втоInteger (R /V2), а первый
Предел
х (рис. 2.10).
Блок-схема
второго октанта относительно прямой у
=
mD
=
X; +
Aj
=
A. +
1
алгоритма приводится на рис. 2.14.
-
;
Пример 2.5. Алгоритм Брезенхема для окружности
2yj + 2
Для иллюстрации работы алгоритма генерации окружности рассмотрим окружность
радиуса 8 с центром в начале координат. Генерируется только первый квадрант.
шаг mv
=
y.
As
=
д.
—
=
Xj
y.
горизонтальной оси, в результате генерируется
то
октантов,
go to l
30
нуль для окончания ра-
окружность в первом квадранте. Если необходим лишь один из ок-
go to l
шаг
в
-
-
начальные установки
l
2y; 4- 1
х
=
0
go to l
У= 8
finish
А,
2A
Предел
=
-
=
8)
-14
=
0
пошаговое выполнение основного цикла
1
Plot@,8)
y( > Предел
At
< 0 go
нродолжа гь
to 2
2
б
=
2(-14) + 2(8)
10
x
=
0 + 1
=
Д,
=
-
I
-13 < 0 go to 10
=
1
-14+2+ 1= -11
go to 1
1
Plot(l,8)
у, > Предел
Л,
2
о
< 0 go
=
продолжать
to 2
2(-П) + 2(8)
-
1
=
-7 < 0 go to 10
10х— 1+1=2
-11 + 2B) + 1
go to 1
A,
1
=
=
-6
PlotB,8)
продолжать
Результаты всех последовательных проходов алгоритма сведены в таблицу. Список
пикселов, выбранных алгоритмом, состоит из @, 8), A, 8), B, 8), C, 7), D, 7), E, 6),
F.5), G,4), G,3), (8,2), (8, 1), (8,0).
Plot
Рис. 2.14. Блок-елсма
-14
ношаювого
первом квадранте.
70
Г.ч. 2.
Д,
Растровая графика
алгоритма
Бреченхема
генерации окружности
в
0
8
1
8
@,8)
-II
-13
2.6. Алгоритм Брсэснчсма для генерации окружности
A
8)
-6
-7
2
8
2.7. РАСТРОВАЯ РАЗВЕРТКА
ИЗОБРАЖЕНИЯ
-12
3
3
7
Для
B, 8)
вывода на видеомонитор
—
СПОСОБ ГЕНЕРАЦИИ
разложенный в растр образ необхо-
шаблона, который требует дисплей
(см. разд. 1.8). Это преобразование называется растровой разверт-
C, 7)
необходимо представить в виде того
-3
-11
4
7
D. 7)
соразверткой. В отличие от дисплейного списка для векторного дисплея,
или литерах, в данном
содержащего информацию только об отрезках
•>
7
5
6
E. 6)
1
5
6
о кажслучае дисплейный список должен содержать информацию
чтобы эта инфоркаждом пикселе на экране. Необходимо, кроме того,
5
F, 5)
информация
9
-11
7
G. 4)
направо.
3
7
3
18
-7
8
2
17
19
8
1
и
выводилась
со
скоростью видеогенера-
т. е. сверху вниз и слева направидеогенерации в порядке сканирования строк,
4
4
организовывалась
Существует четыре способа хюстижения
такого результата
—
растровая развертка в реальном времени, групповое кодирование,
клеточная организация и память буфера кадра.
G. 3)
(8. 2)
2.8. РАСТРОВАЯ РАЗВЕРТКА В РЕАЛЬНОМ ВРЕМЕНИ
(8, 1)
18
17
8
При развертке в реальном времени или «на лету» сцена произвольпроизвольно представляется в терминах визуальных атрибутов и геометриче-
0
(8. 0)
алгоритм
являютгеометрических характеристик. Типичными визуальными атрибутами
являются цвет, оттенок и интенсивность, тогда как координаты лг, у, углы
швершен
геометрическим характеристикам. Покоординате у. Во время воспроизведения
наклона и текст относятся к
Результаты показаны на рис. 2.15 вместе с реальной
Алгоритм легко обобщается для других
ностеи.
Последние упорядочены
окружностью
по
квадрантов или дуг окруж-
информацию и вычисляет
не
интенсивность каждого пиксела на экране. При такой развертке
на память обычно
нужны большие количества памяти. Требования
Радиус окружности равен 8
ограничиваются необходимостью хранить дисплейный
одну сканирующую строку. Более того, поскольку информация
каждого кадра процессор сканирует эту
список плюс
1
Подсвеченные
9
8
~
7
"К
6
1
ч
5
\
4
\
J
2
\
1
Г)
012345
Рис. 2.15.
6
789
0
1
2
3
4
5
6
7
7
8
8
8
сцене
8
8
8
7
7
6
5
4
3
2
1
0
Результаты работы пошагово»о алгоритма Врез енхема
ности.
пикселы
хранится
добавление
легко,
сложность
или
Гл. 2.
Растровая |рафика
произвольно организованном дисплейном списке,
удаление информации из списка осуществляется
удобно для динамических приложений. Однако слождисвыводимого изображения ограничивается скоростью
а
это
дисплейного процессора. Обычно
отрезков
или
многоугольников
это
в
означает, что ограничено число
картине, количество пересечений
сканирующей строкой или число цветов или полутонов серого.
Для получения пересечений (если они есть) каждого отрезка дисдисплейного списка со сканирующей строкой в простейшей реализации
весь
метода всякий раз при изображении строки обрабатывается
дисплейный список. При регенерации видеоизображения на каждую
сканирующую строку, а значит, и на обработку всего списка прихо-
со
генерации
окруж-
приходится только
72
в
о
63.5 микросекунды. Столь малое время позволяет ис-
о
С'канир)юшая строка
'
цифрами 2 и 3 на рис. 2.16,а. Рисунки
2.16, с и d иллюстрируют проблему, возникающую в этом простом
алгоритме. Порядок сортировки отрезков, начинающихся с одной и
той же координаты у, влияет на размер списка активных ребер.
Например, отрезок ВС на рис. 2.16, d никогда не покинет этот списписок. В результате может обрабатываться больше информации, чем
рующих строк, помеченных
на самом деле
Сканирующая
Эту и аналогичные проблемы можно устранить путем введения
-2
отрока
ВС~Ь
ВА
BD- e
CD
AD
3
ВС
ВС
ВА- ¦b BA
BD
BD-b
CD- e CD
AD
AD-e
12
ВА-b
ВС
BD-e
CD
AD
3
1
BA- b BA
ВС
ВС- b
BD
BD
CD-e CD
AD
3
BD-b
ВА
BD-b BD~b
ВА
ВА
BC-e
CD
AD
ВС
(D-e
AD
с
по
изображения, которые пе-
пересекают сканирующую строку.
наибольшей координате у. В одном из простых
перемещающихся
начала
методов такой сортировки
указателя в
используется
списка активных
для
отсортированном
обозначения начала
ребер, а указатель конца
для обозначения конца
этого списка. На рис.
2.16,а представлена сцена из нескольких отс
рис. 2.16,Ь
характерными
показан
типичный
сканирующими
строками.
На
отсортированный список отрезков
фигуры. Указатель начала в исходном положении устанавливается
установлен
выше
на тот
списка,
т. е. на
отрезок ВС. Указатель конца уста-
последний отрезок в списке,
который начинается вырассматриваемой сканирующей строки, т. е. на
отрезок BD.
При сканировании изображения необходимо корректировать
при
этом
список
каждого
Сначала
указатель
конца
передвигают вниз, чтобы
САР,
включить
в
новые
отрезки, начинающиеся на текущей сканирующей
или
выше
строке
нее. В то же самое
время указатель начала
перепередвигают вниз, чтобы исключить
отрезки, кончающиеся выше текутекущей сканирующей строки. Это
изображено на рис. 2.16 для скани-
можно
изображения
отрезка
выполняется
упростить
со
групповая сорти-
изображения. При групповой сортировке
У> (рис. 2.17, Ь) просто создаются области памяти или группы
Если, например, применяется 512
отрезков в дисплейном списке информация о каждом отрезке помещапомещается в группу, соответствующую наибольшей величине координаты
у для отрезка. Для простого черно-белого контурного изображения
необходимо записывать только
координату
х точки
пересечения
с
изменение этой координагрупповой сканирующей строкой, Ах
координаты х при переходе от одной сканирующей строки к другой, и Ау
число сканирующих строк, пересекаемых отрезком. Для простых
—
—
изображений большинство из ^-групп будет пусто.
Список активных ребер для текущей сканирующей строки форформируется добавлением информации из _у-группы, соответствующей
этой строке. Координаты
порядке сканирования,
и
х
точек
пересечения сортируются
в
по-
ребра из САР преобразуются в растровую
форму. После этого для каждого отрезка из САР Ау уменьшается
на единицу. Если Ау < 0, то отрезок исключается из списка. И нанаконец, для каждого отрезка координата
новой
сканирующей
значению
величины
строки
Ах.
получается
х
точки
пересечения для
добавлением
к
прежнему
Этот процесс повторяется для всех скани-
сканирующих строк. На рис. 2.17, с приводится САР для сканирующих
строк 3, 5 и 7 из простой сцены на рис. 2.17,а.
Если используется фиксированный размер j'-rpynn,
пересечений с каждой сканирующей строкой выдепяется
то для
пере-
фиксированное
образом, максимальное число пересечепересечений с произвольной сканирующей строкой предопределено заранее
и, следовательно, сложность изображения ограничена. Одним из
количество памяти. Таким
])
Групповая сортировка является одной из форм распределяющей сортировки,
где основание счисления равно числу групп
74
этом
—
тремя
на начало этого
v всех отрезков
При
и
управления САР можно использовать ряд
методов. Сначала отрезки изображения
сортируются по наиболь-
отрезков
пересечения
для каждой сканирующей строки.
путем введения списка активных ребер
Указатель
по
данных.
сканирующих строк, то используется 512 групп. При просмотре от-
(САР). Этот список содержит те отрезки
списке.
вычисление
сканирующими строками.
AD-e
d
пересекает каждую сканирующую строку, то
количество вычислевычислений может быть сокращено
используются два
также
сортировка
пользовать данный метод только
для рисования несложных
чертечертежей, не более. Так как в общем случае не
каждый отрезок в сцене
организации
дополнительной структуры
ВС
CD
Рис. 2.16. Простой список активных
ребер.
Для
необходимо.
(сканирующих строк). См. Кнут [2-11J.
Гл. *\ Растроили график'!
75
2.8. Растровая развертка
и
реальном времени
Сканирующая строка
у-группа
Сканирующая строка
\1\
I
пусто
I
i
I
Пересечение
,
3
Дувс
Пересечение
пусто
4
5
пуст о
6
Рис. 2.18. Простой метод расгроной развертки для почти горизонтальных отрезков.
пусто
8
пусто
методов, позволяющих преодолеть это ограничение, может служить
а
использование в качестве структуры данных последовательного ининдексированного списка.
Список активных ребер
~
у-группа
Индексированный список
Сканирующая
В этом случае каждая j-rpynna содержит
только указатель на расположение в структуре данных информации
для первого отрезка из группы
хВл + Дхвл.Дхва.
строка 3:
1
Дув
-
а
Дхвс' ДУВС
Сканирующая
~
I
2
Дхвл
3
Дувл
4
хве
1
Дувл -3.xcd
ДхСО» ДУСО
Сканирующая
строка 7:
сканирующей строке). На рис. 2.17, d показаны последовательный индекиндексированный список и структура данных для рис. 2.17, а. В этой кон-
хВа + ЗДхва.
строка 5:
ХВА
1.x вс; + Ах вс,
(т. е. начинающегося на эгой скани-
-
xcd + ЗДхсп,
8
5
Дхвс
6
Дувс
конкретной ситуации предполагается, что данные для текущей сканисканирующей строки выбираются группами по три до тех пор, пока не
встретиться пустая ссылка или знак завершения.
Метод определения пересечений отрезков со
сканирующими
строками дает хорошие результаты для вертикальных и почти вер-
вертикальных
отрезков.
Однако для
почти горизонтальных отрезков
будет вычислено очень мало точек пересечения, что приведет к ненеприемлемому изображению отрезка. В качестве простого решения
Дх AD. ДУЛО" 1
7
8
XCD
9
Axcd
10
ДУС-D
12
можно предложить определять пересечения
двух последовательпоследовательных сканирующих строках и активировать все пикселы между точточками пересечений, как это показано на рис. 2.18. Для горизонтальна
горизонтальных отрезков используются концевые точки.
Так
11
как все
изображение обрабатывается для каждого видеокад-
видеокадра, развертка в реальном времени применима для высоко интерак-
_
Завершение или пусто
12
XAD
13
Дхлп
14
ДУАП
Конец сканирующей строки
интерактивной
графики. При
отрезки могут
15
и
групповой сортировки
по
у
быть добавлены или удалены из дисплейного списка
простым добавлением
группы
использовании
или
удалением
их
из
соответствующей у-
связанной с ней структуры данных. Как показано выше
на рис.
2.17,Ь, это легче всего сделать для ^-групп фиксированной
Длины. Для удобства добавления и удаления отрезков в сцене исиспользуется структура данных в виде связного списка (рис. 2.19). За-
Рис. 2.17. Групповая сортировка по .у, список
последовательного индексированного списка.
активных
ребер и структура последо-
Заметим, что для связного списка на рис. 2.19, Ь, требуются признаки
конца каждой группы данных
и
ссылка
на
следующую группу для
рассматриваемой сканирующей строки, например элемент 4,
г
*
^
¦и
77
2.8.
Растровая
развертка
«
р..
а так-
1
Сканирующая
Сканирующая строка
Связный список
>-группаi
1
хвл
2
Дхва
7,
Дувл
4
5
Сканирующая строка
ст рока
1
2
3
9
4
5
5
-хве
6
Лхвс
7
Дувс
8
у-группа
9
XCD
10
Дхсп
11
Av'CD
13
6
7
1
2
1
Связный список
у-группа
Связный список
1
хва
I
2
ДХВА
2
3
Дувл
3
4
5
4
ХВЛ
12
Коней группы ланных
п
n
означает адрес
8
следуюшей
группы данных для
13
XAD
14
Дхлп
15
Дуло
5
хве
6
Дхвс
7
Дувс
обрабатываемой строки
Завершение связи или пусто
Коней сканирующей строки
4
9
i рупповая сортировка по у
и связный список для случая
интерактивной
графики.
9
6
7
При добавлении отрезка BD список
модифицируется так, как показано на рис. 2.19,d. Информация об
отрезке BD добавляется к концу списка данных. Дисплейный пропроцессор направляется в эту ячейку с помощью модифицированной
ссылки из ячейки 8. Пели теперь отрезок ВС удаляется из фигуры,
список модифицируется так, как показано на рис. 2.19, f. Заметим,
ссылка
в
ячейке
4
модифицирована для того, чтобы обойти
ячейки, содержащие информацию об отрезке ВС.
Этот простой пример иллюстрирует основные
модификации
связного
списка
в
интерактивных
идеи
для
Например,
должно
что
Гл.
2.
Растровая графика
Дхвс
7
Дувс
графических системах.
длина
списка
будет
17
8
XCD
9
XCD
13
13
10
Дхсо
10
11
Дусо
11
1
12
12
8
8
13
13
XAD
14
ДХАБ
14
15
AV'AD
15
XAD
Дуло
16
16
17
XBD
17
XBD
18
Дхво
18
Дхвп
19
Дуво
19
постоянно
20
78
6
моди-
Однако здесь не приведены все необходимые подробности. Наприбыть очевидно,
9
17
8
же признак завершения связи.
что
5
16
5
Рис. 2.19.
17
3
Рис. 2.19. Продолжение.
20
Интенсивность Длина участка
расти, если только «потерянные» ячейки (с 5 по 8 на рис. 2.19,f) не
будут снова использованы или список не будет сжат. ДополнительДополнительную информацию о связных списках и структурах данных можно
найти, например, в [2-12].
Так как алгоритм, работающий в таких жестких ограничениях
на время обработки одного видеокадра программно реализовать
0
о |зо|
1
Г
10
трудно, то успешные программные реализации используются глав-
образом в имитационных системах, таких, как летные тренатренажеры, навигационные тренажеры для кораблей и т. п.
главным
20
2.9. ГРУППОВОЕ КОДИРОВАНИЕ
\
1/
0
1
1
0
6
1
8
0 15
1
1
0 J5
|_
В методе группового кодирования сделана попытка воспользовать-
1 30
большие области изображения имеют одинаковую ин-
что
воспользоваться тем,
7
интенсивность
или
При простейшем групповом кодировании
цвет.
о
,
0 30
определяется только интенсивность и количество последовательных
с
пикселов
На
этой
рис. 2.20,а
30 х 30
интенсивностью
показан
на
данной сканирующей строке.
простой черно-белый чертеж
на
растре
соответствующие кодирующие последовательности для
и
сканирующих строк
с
номерами
1, 15
и
30. Кодирующие
—
0
7
J
30
интенсивПервое число
число последовательных пикселов на сканирующей
следует рассматривать группами по два.
интенсивность, второе
данные
—
строке с этой интенсивностью:
Интенсивность
Таким
образом, в строке
нулевой интенсивности,
изображение можно
т. е.
хранение,
2.20,а имеется 30 пикселов
черных или фоновых. Все изображе-
т. е.
закодировать с
одна
1
порция
Длина участка
на
рис.
помощью
208 чисел. Попиксельное храинтенсивности
для
растра
30. В этом случае сжатие данных с помощью группового кокодирования составляет 4.33 : 1.
х
Легко
Для добавления
информации на каждый пиксел (битовая
карта), потребовало бы 900 значений
30
Рис. 2.20. Примеры группового кодирования.
обрабатываются с
помощью
данного
метода
сплошные
сканирующей строке
для цвета приводятся интенсивности красной, зеленой и синей цвекодирования может быть легко расширена. На данной
цветовых пушек,
с этим
фигуры, как это продемонстрировано на рис. 2.20,b с кодированикодированием 1, 15 и 30 строк. Особый интерес представляет 15-я
сканируюсканирующая строка. Все изображенные на рис. 2.20,b может быть закодизакодировано
с
136
использованием
чисел
сжатии
при
Большая степень сжатия изображений со
данных
6.62 : 1.
фигурами по
сравнению с сеточными рисунками объясняется тем, что два ребра
покрываются одной парой
1л. 2. Растровая гриф
з
а за
ними
—
количество последовательных пикселов
цветом; например,
Интенсивность
Интенсивность
Интенсивность
красного
зеленого
синего
Длина
сплошными
«интенсивность
—
длина».
Для простого цветного дисплея, в котром цветовая пушка либо
выключена
@), либо включена A), кодирование 15 строки
81
80
цвета эта простая схема группового кодирова-
2.9. Групповое кодирование
2.20, b с желтым треугольником на синем фоне (см. табл. 1.1)
рис.
выглядит так:
0
0
Сжатие
1
данных
1
7
1
для
изображений,
0
8
0
1
0
закодированных
не
потому,
но и
потому,
память для
что оно экономит
машинно-синтезированных последо-
последовательностей кадров или фильма. Оно также экономит время перепередачи по
групповое кодирование.
Рассмотрим, например, по-
потребность в памяти для изображений с разрешением 512 х 512 х 8
в 30-секундиом фильме, в котором кадры следуют с частотой вивидеогенерации,
т. е.
30 кадр/с. Требуемая
Такое
дисковых
количество
информации
устройствах.
Однако
поместится
даже
=
236 Мбайт
1
0
в
2.10 КЛЕТОЧНОЕ
методе
В
на
только
умеренное
сжатие
больших
4:1
Добавление или
собой накладные расходы. Наконец, для коротких участможет
чем при попиксельном
2.21,
где
потребоваться
чтобы
в
было
можно
с
разбивается
пикселов. В методе кле-
помощью
минимума
т. е.
изображения,
ин-
клетки.
простейшем алфавитно-цифровом терминале с
выполнять
клеточное
на
кодирование.
клетки
реальном времени, истаком терминале область
операции
или
В
в
области,
достаточно
большие,
чтобы содержать одну литеру. Например, экран можно разбить
области размером 8x8 пикселов. Для дисплея с разрешением
в
два
512 х 512 получится 64 х 64 клетки, а для телевизионного дисплея
480 х 640
со
вывода литер с
раза
пикселы
чередующихся
чер-
с
нижними
получится
30
строк
алфавитно-цифровых
клеток.
1 0 I
1
используется для
Дополнитель-
литер,
элементами.
выносными
литер.
по
80
дисплеев.
также
а
для
На рис. 2.22
Так
как
литер,
что
типично
Используются
и
для
многих
другие размеры
10 пикселов, в результате дисплей содержит 24 стростроки по 80 литер в каждой. Шаблоны, составленные из пикселов, для
8
х
каждой литеры хранятся
20
разделения
получится
Например, для литер с матрицей 7x9 обычно использует-
используется клетка
1
пикселов
4:3
каждый второй ряд клесхеклеток для читабельности оставляется пустым, то для последней
схемы
10
8x8
точечной матрицей размером 5x7.
приводится пример маски
1
15 X
клетка
используются для
строчных литер
отношением
видовым
стандартным
60 х 80 клеток. Обычно
хранении. Это иллюстриру-
изображение состоит из
т
того
используется
Дополнительные
рис.
изображение рассматривается
на
операцией и занимает много времени из-за последовательного храхранения длин участков. Кодирование и декодирование изображения
больше памяти,
кодирования
кодирования сделана попытка
представить целые области
при
удаление отрезков или текста из изображения является трудоемкой
интенсивности
Для
экрана
У группового кодирования есть и недостатки.
одинаковой
группового
как линейная или одномерная совокупность
ЭЛТ
малого или среднего размера.
влечет за
КОДИРОВАНИЕ
информации
групповом кодировании позволит хранить его на одном диске ма-
0
1
[2-13] и Хартке, Стерлинг и Шимер в [2-14] обсуждают
эффективную реализацию схем группового кодирования.
Лоос
память составляет
E12х512х8х30х 30)/(8 бит/байт)
на
В
кодировании
повторенных 15 раз. Таким образом, при построчном
1800 значений вместо 900 при попиксельном храдолжно храниться
составляет 1/2.
хранении. Сжатие данных здесь
клеточного
иллюстрируется
пиксел.
один
телеграфу для фотографий и факсимиле, в которых широко
используется
участков
в
последовательность состоит из элементов
1
группами,
шириной
отрезков
вертикальных
15
только
групповое кодирование просто экономит память,
что
белых
и
этом случае кодирующая
приближаться к 10:1. Это существенно
может
ных
в постоянном
запоминающем
устройстве
(ПЗУ).
Метод клеточного кодирования можно применить и для вычер30
о
10
20
U
вычерчивания линий, надо только хранить в ПЗУ еще и шаблоны сегмен-
30
сегментов
Рис. 2.21. Ограничения группового кодирования лля коротких участков.
82
Гл. 2. Растровая график.»
отрезков.
Тогда для
построения
необходимых линий могут
быть использованы комбинации таких сегментов, расположенных в
83
2.10. Клеточное кодирование
1
1
ш
ft
млн
И U1
н
.
1
1
6
4
Рис. 2.24. Комбинации логического ИЛИ
для сегментов отрезков.
Базовая
линия
2
Как показано на рис. 2.23, с, маскирование части отрезка позволяет
дорисовать короткие сегменты в конце отрезка. Для вывода пересепересекающихся внутри клетки отрезков
0
О
О
2468
ИЛИ»
комбинирования шаблонов с помощью операции «Логическое
(OR). Последовательное применение этой операции позволяет бе-
02468
Рис. 2.22. Маска литеры при клеточном
кодировании.
соседних
клетках.
Для произвольиой
бесконечно варьировать шаблоны
продемонстрировано на рис. 2.24.
клетки
размером
п
х
п
существует 2"" возможных шаблонов, составленных из пикселов.
любом разумном значении п хранить пришлось бы слишком
шаблонов; например, при /7
не все шаблоны
=
8 значение 2"
=
1.8
х
су-
При
много
1019. Однако
представляют реально возможные сегменты. Пока-
Показано, например,
что
для
алгоритма Брезенхема,
для
выше,
отрезков с тангенсом угла наклона
В работе Баррета и Жор дана
шаблонов, представляющих сегменты отрезков.
Наконец, Жордан и Баррет [2-15] показали, что для клетки 8x8
при использовании переноса, отражения и маскирования
требуется
только 108 шаблонов сегментов
отрезков.
На рис. 2.23
изображен сегмент отрезка, выходящий из
нижнего угла клетки 8x8. Этот
отрезок был разложен в
с
пересечениями,
как
это
проде-
[2-16] обсуждается интерактивная
кодированием. Она особенно эф-
работа на дисплее с клеточным
эффективна, когда для поддержки упорядоченного сверху вниз и слева
дисплейного файла используется связный
уровень достижимой интерактивности невысок.
направо
обсуждавшегося
между 0 и 1 сущест-
существует не более 2"—1
обеспечена возможность комби-
список.
Однако
Метод клеточного кодирования был распространен на цветные
и
дисплеи
на
представление
сплошных
изображений [2-17]. При
коэффициенты сжатия данных не настолько велики,
как в случае черно-белых (двухуровневых) изображений.
этом, однако,
2.11. БУФЕРЫ КАДРА
левого
растр с
В гл. 1 при знакомстве с растровыми графическими устройствами с
алгоритма Брезенхема, причем тангенс угла наклона поположителен.
В
результате
отражения
относительно
оси
х
(рис. 2.23, а) получится отрезок, выходящий из левого верхнего
угла
с отрицательным тангенсом
угла наклона. В результате вертикальвертикального переноса вдоль оси у получится
отрезок, начинающийся выше
регенерацией предполагалось, что растровый дисплей реализуется в
помощью
основания
клетки
координатам
—
(рис. 2.23, Ь),
а
при
буфера кадра,
полупроводниковой памяти с
произвольным доступом. Хотя это и наиболее часто встречающийвиде
встречающийся метод
реализации,
состоящего
из
буфера кадра может быть использовадиск или барабан [2-18 и 2-19].
но для
использована и вторичная память
—
г
Буферы кадров можно также реализовать с помощью сдвиговых
регистров [2-20]. Схематично сдвиговый регистр можно считать
стеком типа FIFO (первым пришел
первым обслужен). Если стек
заполнен, то при добавлении в вершину стека новых битов данных
-|-U_
со
jiUn 1
стека данные
переносе
по
обеим
отрезок с началом, расположенным
внутри клетки.
—
Г
1
+•
[_^Ж^1 .111!
в? ± т-
¦
дна
Гл. 2. Растровая графики
биты
данных.
интерпретировать
как
Выталкиваемые
из
интенсивность пиксела
реализовать, используя по одному регистру на пиксел в сканиру-
сканирующей
84
можно
первые
сканирующей строки. Буферы кадров на сдвиговых регистрах можможно
Рис. 2.23. Клеточное кодирование: (а) отражение, (Ь)
перенос, (с) маскирование.
выталкиваются
строке при
Другой вариант
—
длине
каждого
регистра,
равной
числу строк.
использование единственного регистра с
2.11. Буферы кадра
длиной,
Сдвиговые [кгнегры
Вход данных
1
1
2
о"
_Г
1
1
i
1
J_
_[_
1
l"
I
Видео
монитор
1
1
I
_г
1
0
1
1
6
5
0_
0
0
0
0
0
0
7
"o
5 0
?
0
1
0
0
77
0
3
4 0
0
0
1
1
0
0
0
2
j_
1
1
_i_
0
0
j
I
I
I
I
I
6
3 0
—
?
j
I
1
4
3
4
5
6
7
8
Изобра женис
Память
Буфер кадра на сдвиговых регистрах.
строк.
На рис. 2.25 показан простой
пикселов
на
строке.
Графическое
ЦПУ
На рисунке
Видео
кот роллер
монитор
системы
шестистрочный дисплей по восемь
ЦПУ
ЭВМ
изображен также буфер кадра на
каждый. В
буфере находится набор битов изображения. Биты для
3 показаны в момент выталкивания со
дна сдвиговых ре-
Для согласованности со скоростью видеогенерации
следует тщательно управлять
Дисплейный
Шина графической
регистрах, в который входят восемь регистров по 6 бит
регистров.
буфера
кадра
умноженному на чис-
сдвиговых
строки
Дисплейный
контроллер
Обшая шина
12
равной числу пикселов в сканирующей строке,
число
ЭВМ
память
I
Выход данных
Рис. 2.25.
Основная
Графическое
ЦПУ
ЦПУ
следупоследовательностью вывода сдвиговых
Основная
Высокоскоростной
интерфейс
память
Шина
главной ЭВМ
Рис. 2.27. Архитектура графических систем с буфером калра.
регистров.
Для буферов кадра на вторичной памяти и на сдвиговых
регистрах уровень интерактивности невысок.
причина заключается в
регистров снижение
тем,
что
тя
регист-
Для вторичной памяти при-
большом времени доступа, а для сдвиговых
ре-
эффективности интерактивной работы связано с
изменения
могут
быть сделаны только при добавлении
битов в регистр.
Как показано
на
рис. 2.26, схема
графической системы с буфе-
буфером кадра похожа на схему для векторного дисплея с
регенерацией.
При необходимости прикладная программа на главном
компьютере
модифицирует буфер кадра. Дисплейный контроллер периодически
обрабатывает его в порядке сканирования строк и передает видеовидеомонитору
изображения.
информацию, необходимую для регенерации изображе-
Буфер кадра можно реализовать либо как часть памяти глав-
главного компьютера, либо как
отдельную память. На рис. 2.27 показапоказаны две эти схемы, реализованные со
структурой обшей шины. ХоЦПУ
ЭВМ
Процесс
изменения
Буфер
кадра
Процесс
регенерации
Дистейныи
контроллер
ВидеоВидеомонитор
первая
86
Гл. 2. Растровая
графика
позволяет процессору
ЭВМ самому манипулиро-
манипулировать
буфером кадра (рис. 2.27, а), обычно более эффективно доба-
добавить
к
системе
специализированный графический процессор. При
получении команд
от
главного
процессора
графический процессор
управляет детальной обработкой буфера кадра. При двух процессопроцессорах на общей шине и одной памяти на шине может произойти кон-
конфликтная
ситуация,
что
сокращает среднюю производительность
системы. Таким образом, для высокопроизводительных систем боболее предпочтительна архитектура,
показанная на рис. 2.27, Ь. В
буфера кадра отделена от основной, что исисключает конфликт на шине. Более того, графическую подсистему
можно оптимизировать для улучшения характеристик модификации
буфера кадров и, следовательно, для увечичения производительно-
этом
случае память
производительности системы.
2.12. АДРЕСАЦИЯ РАСТРА
Для простоты
изложения
будем считать, что пиксел в растре или
буфере кадра имеет двумерные координаты л- и у, как это показано
на. рис.
Рис. 2.26. Графическая система с
буфером кадра.
схема
2.28. Цифровая память, однако, организована в один лиией-
нЬ1й список адресатов, и необходимо, таким образом, преобразова2.12. Адресация растра
базовый адрес
=
У
К
J'max 5
=
лгпа\
2
4
A'
min
х
A
только
пиксела, следовательно, требует
Вычисление адреса
Пиксел (З, 2)
х
—
—
K2ymitt
—
двух
При последовательной адресации
связанной с опредепикселов для дальнейшего уменьшения работы,
и
сложений
3
2
-Пиксел D, 2)
использовать
можно
адреса,
определением
1
умножения.
одного
пошаговые
вычисления.
В
частности,
О
АдресОс ± 1, у)
Адрес(л', у ± 1)
=
-2
Адрес (л: ± 1, у ± 1)
=
J
Jmin
-2-10
12
5
34
Кх + К2у + х ± 1
К1 + К2(у ± 1) + х
К, + К2{у ± 1) + х ± 1
=
=
=
=
Адрес(л', у) ± 1
Адрес(х, у) ± К2
Адрсс(х, у) ± К2 ± 1
Рис. 2.28. Система координат
6
Здесь для горизонтального или вертикального приращения в растре
растра.
требуется только одно сложение или вычитание, а для диагональтолько два сложения или вычитания. Операция
диагонального приращения
—
ние
координатного представления
в
линейное.
Предположим,
что
начальный адрес в памяти не равен нулю, тогда преобразование зазадается
умножения полиостью исключена из вычислений.
формулой
Пример 2.7. Пошаговая адресация растра
Адрес
=
(Хпш
-
xmin)(y
-
ymin) + (х- xmin) + базовый адрес
В вычислении первого члена участвует число строк.
добавляет адрес в строке, а последний
—
Рассмотрим пиксел
Второй член
Л,
начальный адрес. Пиксел
к]
идентифицируется координатами своего левого нижнего угла.
Адрес
=
=
[6
=
40 + 6
-
(-2)] х [2
=
(-3)] + [3
-
(-2)] +
I
=
(-2)
=
1
(-8И-3)
(8) X E) + 5 +
1
=
рис. 2.28. Здесь
(-2)
-
=
27
пиксела
C. 2) в предыдущем примере и использовав по-
почучим
Адрес(л* +
1.
г)
ЛдресD, 2)
=
46 +
=
Адрес(.\-, v) +
I
=
1
47
2.13. ИЗОБРАЖЕНИЕ ОТРЕЗКОВ
46
Данный результат можно проверить непосредственным подсчетом квадратов на ририсунке.
Подобная адресация буфера кадра позволяет обращаться с ним как
с графическим дисплеем на запоминающей трубке. Сначала буфер
кадра
или цвет.
направлена вправо, а положительная ось у
дисплея,
вниз, при условии адре-
устанавливается в фоновую интенсивность
Вместо того чтобы записывать векторы прямо на экран
очищается
Эта же схема работает и в случае, когда положительная ось х на—
-
пошаговые вычисления,
=
-
6-
=
на
8
=
Вспомнив результат для
Рассмотрим пиксел с координатами C,2) в небольшом растре на рис. 2.28. Здесь
^i *т-ш
~2' Лпах
5» Лшп
~3> ПРИЧСМ первый пиксел из левого нижнеvmax
нижнего угла хранится в первой ячейке памяти; база или начальный
адрес равен 1. СледоСледовательно, адрес пиксела вычисляется по формуле
=
координатами D. 2) растра
Адрес = 27 + (8)B) + 4 = 47
Пример 2.6. Адресация растра.
=
с
для
или
разложения
в
растр
отрезка применяется либо
алго-
Утт и базовый адрес постоянны. Уравнение можно переписать в ви-
Брезенхема, либо ЦДЛ и соответствующие пикселы записызаписываются в буфер кадра. Когда изображение или кадр построены,
дисплейный контроллер читает буфер кадра в порядке сканирова-
виде
сканирования строк
адресации пиксела относительно левого верхнего угла.
Как правило, для заданного буфера кадра величины х
Адрес
К1 + К2у + х
,
*¦
.
и
выводит
результат на видеомонитор.
Выборочное стирание отрезков можно реализовать с помощью
повторного использования алгоритма разложения в растр и записи
где
88
=
алгоритм
Гл.
2.
Растровая графика
2.13. Изображение отрезков
ab. Тесты для каждого отрезка выглядят следующим об-
у отрезка
8
образом:
7
Минимаксный или оболочечный тест
6
1
5
0
(Хотртах < Хоболтт)
if
4
or
(XoTpmin > Хоболтах) or
3
(Уотртах < Уоболтт) or
(YoTpmin > Уоболтах)
then
2
1
12
3
5
4
6
7
2
8
3
4
a
5
6
7
8
нет
пересечения
b
else
Рис. 2.29.
Выборочное стирание отрезков в буфере кадра.
вычислить
пересечение
finish
соответствующих пикселов с
Проблема,
возникающая
иллюстрируется на рис.
фоновой интенсивностью или цветом.
при
использовании
данного
метода,
ил-
2.29. Если удаляемый отрезок пересекает дру-
2.14. ИЗОБРАЖЕНИЕ ЛИТЕР
другой отрезок, то в последнем появится разрыв. На рис. 2.29, а покапоказаны
у
=
два
пересекающихся отрезка.
5 стирается с
Если горизонтальный отрезок
записи пикселов с
помощью
фоновой интенсив-
буфер кадра, то в результате в другом отрезотрезке появится разрыв в пикселе E,
5). Обнаружить и заполнить раз-
интенсивностью или цветом в
разрывы
не
составляет
удаляемого отрезка
труда,
со
надо только определить пересечение
всеми
другими
отрезками
в
изображении.
Алфавитно-цифровые
с помощью маски.
кадра
или
математические
двоичные величины,
рис. 2.30.
это
пикселов,
буфер
маленький растр,
используемых
для
конкретной прикладной области, например резисторы, конденсато-
времени.
на
—
в
(см. рис. 2.22). С помощью литерной маски
также можно представить и специальные символы, специфичные в
конденсаторы
минимаксный текст. Этот метод проиллюстрирован
адреса
записываются
представления литеры
Данная операция для сложного изображения может занять много
Для уменьшения затрат можно использовать оболочечный или
Литерная маска
относительные
содержащий
(литеры)
символы
символы.
Сама
маска
просто
содержит
обозначающие, используется или нет конкрет-
формы буквы или символа.
Для простых черно-белых изображений 1 обычно означает, что
не используется. Для
пиксел используется в представлении, а 0
конкретный пиксел
в маске для
представления
—
Отрезок ab могут пересекать только те отрезки, которые проходят
через нарисованную пунктиром
прямоугольную оболочку,
сформи-
сформированную из минимальных и максимальных значений координат х,
цветных
качестве
изображений применяются дополнительные биты
индексов
в
в
ка-
таблице цветов.
Литеру можно вставить в буфер кадра, указав адрес (х0, у0) наначала маски в буфере. Каждый пиксел в маске смещается на величинивеличины
x0, у0. Простой алгоритм для бинарной маски приводится
ниже.
Вставка маски в буфер кадра
Xmin, Xmax, Ymin, Ymax
пределы маски
адрес в буфере кадра
*о» Уо
—
—
for j
Рис. 2.30. Оболочечный или минимаксный тест.
!Ю
Гл.
2. Растровая
=
Ymin to Ymax
for i
=
-
1
Xmin to Xmax
графика
2.14. Изображение литер
-
1
\_
г
6
4
¦
¦¦
¦
-
1
_
¦ ¦¦
2
¦
0 щ
1
1
1
i
-
г
1
-2
13
5
7
5
Л
I
7
13
b
a
5
7
5
13
Рис. 2.32. Штриховка или закраска контура.
7
d
с
сканирования строк, лежит ли точка внутри многоугольника или
контура. Эти алгоритмы обычно идут от «верха» многоугольника
Рис. 2.31. Трансформированные маски литер.
или контура
if МаскаA, j) <
>
0 then
else
end if
или закраски контуров,
известна некоторая точка
также
применимы
к
и
как показано на рис.
2.32.
(затравка) внутри замкнутого контура. В алго-
и расположенные внуталгоритмах ищут точки, соседние с затравочной
next j
внутри контура. Если
finish
обнаружена граница контура. Если же точка оказалась внутри конконтура, то она становится новой затравочной точкой и поиск продолпродолжается рекурсивно. Подобные алгоритмы применимы только к
Стереть литеру в буфере кадра можно, перезаписав ее с фоновой
интенсивностью или цветом.
растровым
Для создания литер различных шрифтов или ориентации перед
записью в буфер маску можно модифицировать.
Некоторые из татаких простых модификаций показаны на рис. 2.31. На
рис. 2.31, а
изображена исходная литерная маска. Записывая ее в две последопоследовательные
ячейки
х0
и
+
1,
результате последней операции получим курсив
жирную
аппроксимировать
представления сплошных
простых
описаний
является
ребер или вершин будем
подходящим
называть
из
развертка
и
многоугольниками.
Растр
Прямоугольная
оболочка
7
ТЛИ
/
Многоугольник
I
I
I
растровой раз-
Многоугольник
Прямоугольная
Для этого можно использовать несколько ме-
оболочка
'1111
1ULL
затравочное заполнение.
В методах растровой развертки пытаются определить в порядке
Гл. 2. Растровая графика
или
про-
методов, которые обычно делятся на две широкие категории: растрорастровая
многоугольником
Растр
I I
разверткой сплошных областей, заполнением многоугольников или зазаполнением контуров.
контуры являются простыми многоугольника-
возможность представ-
областей. Генерацию сплошных областей
значит,
Простейший метод заполнения многоугольника состоит в проверке
Для сих пор речь шла о представлении на растровом графическом
устройстве отрезков прямых линий. Однако одной из уникальных
устройства
не внутри,
Если контур состоит из кривых линий, то его можно аппрокси-
2.15. РАСТРОВАЯ РАЗВЕРТКА СПЛОШНЫХ ОБЛАСТЕЙ
характеристик такого
расположена
устройствам.
Многие замкнутые
литеру
(рис. 2.3l,d).
соседняя точка
2.16. ЗАПОЛНЕНИЕ МНОГОУГОЛЬНИКОВ
многоугольниками.
получим
*0
(рис. 2.31,Ь). Литеру можно повернуть (рис. 2.31, с) или наклонить,
92
Методы развертки
В методах затравочного заполнения предполагается, что извест-
next i
в
«низу».
векторным дисплеям, в которых они используются для штриховки
МаскаA, j) в буфер кадра в (Ху + i, у0 + j)
записать
к
Рис. 2.33. Прямоугольная оболочка многоугольника.
93
2.16. Заполнение многоугольников
_д
на
в
принадлежность внутренности многоугольника каждого пиксела
)
растре. Так как обычно большинство пикселов лежит вне многоу-
многоугольника, то данный метод слишком расточителен.
можно уменьшить
прямоугольной
внутри
оболочки
себя
только
—
наименьшего прямоугольника, содержащего внут-
Как
многоугольник.
точки
внутренние
оболочки
прямоугольной
рис. 2.33, а,
намного
ч
Затраты мож-
вычисления для многоугольника прямоуголь-
путем
показано
этой
для
на
оболочки.
рис.
2.33,
F
Скаинп1
4
проверяются
Использование прямо-
многоугольника,
изображенного
2
на
сокращает число проверяемых пикселов. В то
1
i
же время для многоугольника, представленного на рис. 2.33, Ь, со-
1
,
r
О
сокращение существенно меньше.
а список
X
Рис. 2.34. Растровая развертка
10
8
0
2.17. РАСТРОВАЯ РАЗВЕРТКА МНОГОУГОЛЬНИКОВ
1 .2
сплошной области.
ребер— последовательными парами вершин
Р]Р2, ^2^3'
Р3Р4, Р4Л> Р5Р\> то для СТР°КИ 4 будут найдены следующие
точки
ребрами многоугольника: 8, 6, 4, 1. Эти точки надо
отсортировать в возрастающем порядке по х> т. е. получить 1, 4,
разработать более эффективный метод, чем тест на припринадлежность внутренней части, если воспользоваться тем фактом,
пересечения
что соседние пикселы, вероятно,
6, 8.
При определении интенсивности, цвета и оттенка пикселов на
сканирующей строке рассматриваются пары отсортированных тоточек пересечений. Для каждого интервала, задаваемого парой пересе-
Можно
характеристики
(кроме
пикселов
пространственной
устройств
граничных
ребер). Это свойство
когерентностью.
пикселы
соседние
имеют одинаковые
имеют одинаковые характеристи-
на
Для
растровых
называется
графических
сканирующей строке,
вероятно,
характеристики. Это когерентность растровых
строк.
Характеристики пикселов на данной строке изменяются только
гам, где ребро многоугольника пересекает строку. Эти пересечения
делят сканирующую строку на области.
Для простого многоугольника на рис. 2.34 строка 2 пересекает
многоугольник при х
X <
1
1 ^
л-
х >
8
=
1
и
х
=
8. Получаем три области:
пересечений, используется интенсивность или цвет заполняемого многоумногоугольника. Для интервалов между парами пересечений и крайних (от
начала строки до первой точки пересечения и от последней точки
строки) используется фоновая интенсивность
или цвет. На рис. 2.34 для строки 4 в фоновый цвет установлены
пикселы: от 0 до 1, от 4 до 6, от 8 до 10, тогда как пикселы от 1 до
пересечения до конца
4 и от
5 до 8 окрашены
пикселов, которые должны активиро-
требует некоторой осторожности. Рассмотрим простой
прямоугольник, изображенный на рис. 2.35. Прямоугольник имеет
вне
многоугольника
5
5
вне многоугольника
4
4
1 ^ х ^ 4
внутри многоугольника
3
3
4 < х < 6
вне многоугольника
2
2
6 ^ х ^ 8
внутри многоугольника
1
1
v <
х >
1
8
многоугольника.
активироваться,
внутри многоугольника
Строка 4 делится на пять областей:
вне
многоугольника
0
необязательно, чтобы точки пересечения для строки 4
сразу определялись в фиксированном порядке (слева направо). На-
3
Совсем
Например, если многоугольник задается списком вершин
РхР2Р3Р4Р5,
а
строка
1
1
3.5
1
+
2.5
1.5
0
1
2
4
3
b
Рис. 2.35. Системы координат строк сканирования.
95
Гл. 2. Растровая графика
Сканирующая
[1
0
О
94
в цвет
Точное определение тех
вне многоугольника
8
с
2.17. Растровая развертка многоугольников
5
6
координаты
имеют
A,1) E,1), E,4), A,4). Сканирующие строки с 1
пересечения с ребрами многоугольника
1
при х
=
по 4
и
5.
Вспомним, что пиксел адресуется координатами своего левого нижнижнего угла,
значит, для каждой из этих сканирующих строк
будут
активированы пикселы с х-координатами
1, 2, 3, 4 и 5. На
рис. 2.35, а показан результат. Заметим, что
площадь, покрываемая
активированными пикселами, равна 20,
площадь прямоугольника равна 12.
в
то
время
как
настоящая
Модификация системы координат сканирующей строки и теста
активации устраняет
Считается,
эту проблему,
как это показано на
рис. 2.35, Ь.
что
сканирующие строки проходят через центр
строкпикселов,
через середину интервала, как это показано на
рис. 2.35, Ь. Тест активации
модифицируется следующим образом:
проверяется, лежит ли внутри интервала центр
пиксела, располорасположенного справа от пересечения. Однако пикселы
все еще
т. е.
адресуются координатами левого
нижнего угла.
результат данного метода корректен.
их нет на
сканирующую стро-
с гро-
модификации системы
координат
сканирующих
строк.
Дополнительная трудность возникает при пересечении
показано на рис.
и
многоугольника точно по вершине,
2.36. При использовании соглашения о
G, 3) будут фоновыми,
а
пикселы
B, 3), (8, 3), (9, 3) окрасятся в
Здесь возникает идея учитывать только одну
3.5 получим
с вершиной. Тогда для строки у
точку пересечения
правильный результат. Однако результат применения метода к
цвет многоугольника.
=
=
1.5, имеющей два пересечения в E, 1), показывает, что
строке у
метод неверен. Для этой строки именно разбиение на пары даст
верный результат, т. е. окрашен будет только пиксел E, 1). Если
же
учитывать
в
вершине только одно пересечение, то пикселы от
@, 1) до D, 1) будут фоновыми, а пикселы от E, 1) до (9, 1) будут
окрашены
в
цвет
многоугольника.
максимума и
ее один
учитывая
раз
в
противном слу-
Определить локальный максимум или минимум многоугольнимногоугольника в рассматриваемой вершине можно с помощью проверки концеконцевых точек двух ребер, соединенных в вершине. Если у обоих концов
координаты у больше, чем у вершины, значит, вершина является
случае.
точкой локального минимума. Если меньше, значит, вершина
точка локального максимума. Если одна больше, а другая меньше,
—
следовательно, вершина не является ни точкой локального миниму-
сканиру-
как это показа-
середине интерва-
Сканируюшая
строка
Рз
3.5
2, 2 и 8, т. е. получится нечетное коликоличество пересечений. Следовательно, разбиение пикселов на пары
т. е. пикселы @, 3), A, 3) и от C, 3) до
даст неверный результат,
минимума, ни
точкой локального максимума. На рис. 2.36 точка Р,
локальный минимум, Р з
ни
—
локальный максимум, а Р2, Р4
другое. Следовательно,
пересечения со
8
=
в
пересечет многоугольник
минимума или
рисунке. Эти ребра формируются верхней и нижней
сканирующей строки
строка у
пересечения в вершине два раза, если она является точкой локального ми-
образом, игнорируются. Это совсем не означает, что
результате
что
Правильный результат можно получить, учитывая точку пересе-
пикселов, как показано на рис. 2.35. Рис. 2.35
иллюстрирует
корректность верхнего и нижнего ребер
многоугольника, полученв
строками получаем,
сканирующими
адресуют-
ками
полученных
между
Как показано на рис. 2.35, Ь,
Горизонтальные ребра не могут пересекать
строку и, таким
ла
в точках
—
—
ло-
ни то и
Р1 и Р3 учитываются два пере-
сканирующими строками,
авР, иР
одно.
2.18. ПРОСТОЙ АЛГОРИТМ С УПОРЯДОЧЕННЫМ
—«ч—
i
СПИСКОМ РЕБЕР
\
6
Используя описанные выше методы, можно разработать эффектив-
\
Р2
\
\
л
р4
2
У
ч
ч
nJ
—4.5
алгоритмы растровой развертки сплошных областей, называеназываемые алгоритмами с упорядоченным списком ребер. Они зависят от
--3.5
сортировки в порядке сканирования точек пересечений ребер много-
эффективные
чу
многоугольника со
ч
алгоритмов
—
i р.
0
0
96
7.5
зависит
от
простой алгоритм.
Рис. 2.36. Особенности
пересече-
8
Гл. 2. Растровая
1.5
Эффективность этих алгоэффективности сортировки. Приведем очень
сканирующими строками.
графика
10
пересечения со
строками сканирования.
2.18. Простои алгоритм с упорядоченным списком ребер
и
Простой алгоритм с упорядоченным списком ребер
8
Подготовить данные:
\
Определить для каждого ребра многоугольника точки перепересечений
\
со
сканирующими строками, проведенными через
середины интервалов, для чего можно использовать алгоалгоритм
/
Брезенхема или ЦДА. Горизонтальные ребра игнори-
игнорируются. Занести каждое пересечение
(л", у +
^)
в
список.
Отсортировать список по строкам и по возрастанию х в
строке; т. е.
(х,, у{) предшествует (л^, у2), если у1 > у2 или
из
0е и У i)
(*2>
У
и
=
отсортированного
У т)-
и
Структура
У1 =У2
Х[<х2,
строке у пикселы для
-v, ^ х +
-
списка
списка
Активировать
целых
Результат растровой
сплошной
области,
изображенной на рис. 2.34.
10
A, 2), B, 2), C, 2) D, 2), E, 2), F, 2),
Преобразовать эти данные в растровую форму:
2.37.
развертки
х
о
о
У\ =Уг ИХ1 ^Х2-
Выделить
Рис.
G, 2) A, 1). B. 1), C, 1), D. I). E, 1),
F, I), G, 1)
пары
элементов
гарантирует,
на
что
Результат представлен на рис. 2.37, Заметим, что оба вертикальных
ребра изображены верно.
и нижнее ре-
сканирующей
значений х,
таких,
что
х
2.
2.19. БОЛЕЕ ЭФФЕКТИВНЫЕ АЛГОРИТМЫ
С УПОРЯДОЧЕННЫМ СПИСКОМ РЕБЕР
В алгоритме, описанном в предыдущем разделе, генерируется больбольшой список,
Пример 2.8. Простой упорядоченный список ребер
Рассмотрим многоугольник, изображенный на рис. 2.34. Его вершины:
Р^ A,1),
Я,(8,1), Р3(8,6), Р4E,3) иР5A,7). Пересечения с серединами
слесканирующих строк
следующие:
скан.
строка
3.5:
скан. строка
4.5:
скаи.
строка
5.5:
скан. строка
6.5:
скан.
7.5:
строка
1.5), A, 1.5)
(8, 2.5), A, 2.5)
(8, 3.5), E.5, 3.5), D.5, 3.5),
(8, 4.5), F.5, 4.5), C.5, 4.5),
алгоритм теперь
A, 3.5)
A, 4.5)
строке
представить в следующем виде:
Определить для каждого ребра многоугольника точки пере-
нет
сканирования сначала сверху вниз и затем
(I. 6.5). A.5. 6.5). A. 5.5), B.5. 5.5), G.5, 5.5), (8,
F.5, 4.5), (8, 4.5), (I, 3.5). D.5, 3.5), E.5. 3.5), (8,
пересечений
—
сле-
Выделяя из списка пары пересечений и применяя
5.5), (I, 4.5), C.5. 4.5).
3.5). A,2.5). (8, 2.5),
алгоритм, описанный выше, полуполучим список пикселов,
которые должны быть активированы:
A.6)
A,5), B, 5), G, 5)
A,4), B. 4). C,4), F. 4). G. 4)
A, 3), B. 3), C. 3), D. 3), E. 3). F. 3). G. 3)
со
сканирующими строками, проведенными через
середины интервалов,
A,1.5). (8, 1.5)
использовать
т. е.
алгоритм
через у +
Брезенхема
Горизонтальные ребра не учитывать.
точки
—
.
или
Для этого можно
ЦДА. Горизон-
Поместить координату л-
пересечения в группу, соответствующую у
точ-
.
Для каждой У -группы отсортировать список координат х
точек пересечений в порядке возрастания; т. е. х j предшестпредшествует х 2, если х j <^х2
Преобразовать эти данные в растровую форму:
Для каждой сканирующей строки выделить из списка коор2.19. Более эффективные алгоритмы
Гл. 2. Растровая графика
в
Подготовить данные:
слева направо
98
можно
направлении х с помощью
описанной в разд. 2.8. В частности, ал,
в
Более эффективный алгоритм с упорядоченным списком ребер
(8, 5.5), G.5, 5.5), B.5, 5.5), A, 5.5)
A.5, 6.5), A, 6.5)
Весь список сортируется в порядке
и
сортировки
групповой сортировки по .У
1.5: (8,
скан. строка 2.5:
скан.
Алгоритм можно улучшить, если повысить эффективность сортировки.
Последнее достигается разделением сортировки по строкам в нанаправлении У
строка
который необходимо полностью отсортировать. Алго-
В результате выделения пар пересечений
динат х
точек
пересечений пары точек пересечений. Акти-
Активировать на сканирующей строке у пикселы для целых зназначений х,
таких, что*, ^ х
В алгоритме сначала с помощью
+—
^х2.
сортировка
в
строке. Таким
строк, а затем сортиров-
образом, развертка начинается до завершения
всего
процесса сортировки. В таком алгоритме отчасти легче додобавлять или удалять информацию из
дисплейного списка. Необхо-
Необходимо только
добавить или удалить информацию из
соответствуюследовательно, пересортировать придется только зазатронутые изменением строки. Ниже данный алгоритм
иллюстрирусоответствующих у -групп;
иллюстрируется с помощью
примера.
Рассмотрим снова многоугольник на рис. 2.34, обсуждавшийся в
примере 2.8. Снача-
Многоугольник обрабатывается против часовой стрелки, начиная с
иллюстрации
2.38.
вершины Р ^, и
пересечения, неотсортированные по х, заносятся в
соответствующие
группы, как это показано на рис. 2.38,а. Пересечения были
2.38, b
на рис.
вычислены в соответст-
интервала между сканирующими строками. В качестве
рис.
2.38,с. Такой бу-
буфер позволяет более эффективно добавлять или удалять пересечения в
список, их
просто можно добавлять к концу списка каждой у
-группы, так как сортировка ототкладывается до момента помещения
строки в буфер.
держать полностью отсортированный список
у -групп.
х-псрсссчения
можно
Следовательно, не нужно дер-
Предварительное вычисление пересечения каждой сканирующей строки с
вычислительных
каждым ребром многоугольника требует больших
затрат и значительных объемов памяти. Введя список активных реребер (САР), как это предполагалось для растровой развертки в ре-
режиме. Алгоритм, получившийся в результате всех улучшеулучшений, выглядит следующим образом:
Алгоритм с упорядоченным списком ребер, использующий списписок активных ребер
Подготовить данные:
Используя сканирующие строки, проведенные через середисередины
отрезков,
ребра
(отсортированные)
через у
многоугольника
пересекаемую
+
определить для каждого
—
,
наивысшую
сканирующую
строку,
ребром.
Сохранить в связном списке значения: начальное значение
\^
координат х
^^ ^^
^у^ ^^
^" ^у^
^у^ ^"
у^ ^у
\
1
1
1
1
1
1.5
2.5
3.5
4.5
8
8
^У^ /^
^У^ ^У^ ^У^
7.5 8 ^уУ^ ^У^
6.5 8 ^ ^у
5.5 % у^ У^
приращения
—
число
по
х
при
переходе
от
одной сканирующей
Преобразовать эти данные в растровую форму:
Для каждой сканирующей строки проверить соответствуюсоответствующую у -группу на наличие новых ребер. Новые ребра добаСАР.
Отсортировать координаты х точек пересечения из САР в
порядке
изображенного
на
X
j
возрастания;
т.е.
^ X 2.
2.19. Более
графика
пересечения,
строки к другой.
^У^
2.38. .У-1руппы сканирующих строк для
многоугольника,
рис. 2.34.
точек
—
добавить в
Рис.
Ду
сканирующих
шаг
строк, пересекаемых ребром многоугольника, и Ах
^у^
Гл. 2. Растровая
т. е.
Занести ребро многоугольника в у -группу, соответствуюсоответствующую этой сканирующей строке.
Буфер сканирующей строки
1 14.5 15.5 1 8
100
преодолеть
х-перссечения
(неотсорти рован н ыс;
\
1
I
благодаря использованию связного
списка, т. е. путем введения добавочной структуры данных. Преднедостаток
показаны
отсортированные пересечения. На практике
можно использовать небольшой
буфер сканирующей строки, содержащий отсортиотсортированные кординатыл' точек пересечения, как это показано на
8 ^^
7 ^^ ^У
6 1.5
1 ^
5
8
7.5 2.5
4
8
6.5 3.5
8
3
5.5 4.5
2
8
1
1
8
1
0
ней либо ограничено число пересечений с данной сканирующей
строкой, либо требуется резервирование большого количества пачасть которой не будет использоваться. Этот
памяти, значительная
пошаговом
Сначала создаются у -группы для всех
сканирующих строк, как это показано на
рис.
соответствии с соглашением о середине
список активируемых
каждой
реальном времени (см. разд. 2.8), можно сократить потребность в папамяти и вычислять пересечения со сканирующими строками в поша-
Пример 2.9. Более эффективный упорядоченный список ребер
получающиеся
сканирующей строки получим
применения алгоритма для
показан
на
рис. 2.37 и совпадает с результатом примера 2.8.
пикселов. Результат
Хотя в этой версии алгоритма задача сортировки упрощается, в
групповой сортировки по .У проис-
происходит сортировка в порядке сканирования
из отсортированного по* списка и при-
эффективные алгоритмы
хх
предшествует
х2,
если
Выделить пары точек пересечений из отсортированного по
х
списка.
Активировать на сканирующей строке >> пикселы
целых
для
каждого
значений х,
хх ^.х +
ребра из САР уменьшить Ау
то исключить данное
значение
что
таких,
координат х
ребро
точек
на
1. Если Ау <
пересечения л:нов =
Связный список данных для ребер много голышка
строки
^.v2. Для
О,
САР. Вычислить новое зна-
из
у-группа
сканирующей
8
хстар + Ах.
Перейти к следующей сканирующей строке.*
В алгоритме предполагается,
что
все
данные
Ребро
Ребро Р4Р5
Дх
X
Дх
Ду
Дх
Ду
Дх
Ребро Р2Р3
Ребро
X
предварительно
преобразованы
представление, принятое для многоугольников.
в
Уиттед
[2-21] приводит более общий алгоритм, в котором данное
Ду
в
ограничение устранено.
Р3Р4
Пример 2.10. Упорядоченный список ребер вместе с САР
Опять рассмотрим простой многоугольник на
многоугольника
Р/*Лу
а
показывает,
для ребер
строка 6
рнс. 2.34. Проверка списка ребер мно-
что сканирующая
строка 5
—
Р^5
и
—
наивысшая для ребер
Pfv На рис. 2.39, а схематично показана
структура связанного списка, содержащая данные для девяти
девяти
(с 0
по
8) сканирующим
строкам рис. 2.34.
у -групп пусто. На рис. 2.39, b показан
подход,
у -групп,
Заметим,
Р?> 3 и
3
струксоответствующих
что
большинство
2
^
применяемый на практике. Здесь спи-
список >* -групп—
это одномерный массив, по
одному элементу на каждую сканируюсканирующую строку. В этом элементе содержится только
указатечь на массив данных, исиспользуемый для связанного списка. Массив показан на том
же рисунке.
Связный список реапизован как массив
размерности п х 4. Для каждого индекса
массива п четыре элемнта
содержат: значение координаты л' точки пересечения
ребребра многоугольника с наивысшей
строкой, пересекаемой этим ребром; шаг
приращеприращения по л* при переходе от
одной сканирующей строки к
число
другой;
сканирующих
сгрок, пересекаемых ребром многоугольника;
указатель на расположение данных
для следующего
ребра, начинающегося на этой же сканирующей строке. Это
продепродемонстрировано на рис. 2.39,Ь. Заметим, что
.у-группа для строки 5 содержит указа-
тепь
1, соответствующий первому адресу в связном списке
колонки
данных
колонке
—
в
списке
содержат информацию
это указатель на
о
данных.
ребре Р<?*у Число в четвертой
Список активных ребер реализован в виде
стекового массива размерности п
Содержимое САР для всех девяти сканирующих
Сканирующие строки (у-группы) последовательно
строки 8. Так как .у-группы для
добавляет в САР два элемента и
—
проверяются сверху вниз, начиная со
Ду для ре-
Р/'А и Р/*5 становится меньше нуля. Следовательно, эти ребра удаляются из
образом ребра Р^3 и
'Vi УД3-1™10™ на строке 0. Наконец, зазаметим, что для
0
групп нет.
ребер пуст и больше .у-
Значит, работа алгоритма завершена.
Для каждой сканирующей
строки выделяются координаты х
активных ребер для этой
интервальный
пересечения
точек
пересечения
буфер, реализованный в виде массива 1 х п
.
Из этого буфера пересе-
и
затем, используя описанный алгоритм, определяется
список активных пикселов. Объединенный
для всех сканирующих
список акактивных пикселов совпадает со
списком из предыдущего
примера.
102
Адрес
списка
х
1
1.5
Ду
Указатель
0
2
3
4
5
1
6
3
3
8
0
4
7.5
-1
7
8
Рис. 2.39. Схема связного списка для многоугольника, изображенного на рис. 2.34.
строк
Результат снова
2.37.
Гл. 2. Растровая
Дх
строки, сортируются по возрастанию* и записываются в
выделяются в пары,
представлен на рис.
Указатель
Строка 6 до-
ешс два. На строке 2 значение
список активных
Связный список
0
2
ребер
.у-группа пуста,
строки
строк показано на рис. 2.39,с. Ска-
САР. Аналогичным
строки
у-группа
сканирующей
1
строк 8 и 7 пусты, то САР также пуст
строка 5
0
3.
х
у-группа
1
Первые три ко-
следующий этемент данных.
Завершение связи
или пустая
графика
2.19. Более 'эффективные алгоритмы
Сканирующая Список активных ребер
строка
¦
Дх
х
Отсортированные
Ду
по х пересечения
Список пикселоь
2.20. АЛГОРИТМ ЗАПОЛНЕНИЯ ПО РЕБРАМ
Алгоритм с упорядоченным списком ребер очень мощный. Каждый
изображения активируется только один раз, следовательно,
минимизированы операции ввода/вывода. До вывода вычисляются
пиксел
концевые точки каждой группы или интервалы активных пикселов.
Это позволяет использовать алгоритмы закраски вдоль этих участ-
изображений. Так как
этот алгоритм не зависит от деталей ввода/вывода, то можно его
участков для получения полностью раскрашенных
1.5
1
3
1
0
5
1
1.5
A.6)
сделать не зависящим от устройства. Главный недостаток алгориталгоритма состоит в больших накладных расходах, связанных с поддерж-
2.5
1
2
1
0
4
8
0
4
7.5
-1
2
поддержкой и сортировкой различных списков.
В другом методе растровой
развертки сплошных областей большинство из этих списков устра1
2.5
7.5
8
A.5), B,5), G,5)
устранено. Этот метод
называется
алгоритмом
заполнения
по
ребрам
[2-22].
Описываемый ниже алгоритм очень прост.
3.5
1
1
1
0
3
8
0
3
6.5
-1
1
Алгоритм заполнения по ребрам
1
3.5
6.5
8
A.4). B,4). C,4),
F,4), G.4)
Для каждой сканирующей строки, пересекающей ребро
многоугольника в (х 15 у,), дополнить все пикселы, у котокоторых
х
4.5
1
0
1
0
2
8
0
2
5.5
-1
0
I
4.5
5.5
8
A.3). B,3), C.3), D,3),
E,3). F.3), G,3)
+
центры
-
лежат
справа
от
(х,, у {), т.е.
для
(х, у{),
>хг
Вычисление пересечений сканирующих строк с ребрами произвопроизводится
в
соответствии
с
соглашением
о
середине интервала между
сканирующими строками. К каждому ребру алгоритм применяется
I
8
0
1
0
1
8
A.2), B,2), C.2), D.2),
E,2), F,2), G,2)
индивидуально, причем порядок обработки ребер многоугольника
не важен. На рис. 2.40 продемонстрированы различные стадии рас-
растровой развертки сплошной области
рис.
1
0
0
8
0
0
О
1
8
(l.D. B.1), C.1), D,1),
E.1), F,1), G,1)
тестового
многоугольника
с
2.34. Заметим, что в этом случае результат не совпадает с ре-
результатом для упорядоченного списка ребер. В частности, в данном
алгоритме не активируются пикселы E, 3), F, 4), G, 5); т. е. ребро
Р/*л обработано иначе. Отличие возникает для тех пикселов, котострого пополам: половина находится внутри, а повне многоугольника. В алгоритме с упорядоченным спи-
которые разделены
половина
списком
Рис. 2.39.
Продолжение.
—
ребер эти пикселы всегда активируются, а в данном алгорит-
алгоритме они активируются только
в том случае,
если
внутренняя часть
многоугольника лежит слева от центра пиксела.
Наиболее удобно использовать описываемый алгоритм вместе с
буфером кадра, что позволяет обрабатывать ребра многоугольника
в
совершенно произвольном порядке. При обработке каждого реб104
Гл. 2. Растровая
графика
2.20. Алгоритм заполнения по ребрам
8
8
—1г
р
ч
Ч
6
\
/
/
\
4
4
Ч/
ч Перегородка р,
/
\
ч
ч
/
ч
1
1
I 1 1
Перегородка [
р,
\
\
/
\
1
i
\^
6
/
ч
4
•
/
-
/
Перегородка
\
\
/
\
/
ч/
>
F
2
2
2
г
1
2
0
О
10
02468
1
0
2
0
4
6
10
8
6
I
I
I
I
|
1I
\
I
\
\
I
I
р,
02468
10
О
2
8
I
|
1
4
6
Г"
ч|к
г
I
1
4
2
6
024
810
Ребро РЦР5
Рис. 2.40. Алгоритм
6
8
/
по
много
раз.
буфере кадра, соответствующие пе-
изображения каждый пиксел может обра-
Следовательно, эффективность алгоритма
ввода/вывода.
Число обрабатываемых в данном алгоритме
ограничена скоростью
если ввести так
Основная идея
пикселов
можно
[2-23].
Основ-
называемую перегородку
заполнения с перегородкой
алгоритма
2.41
рис.
для тестового многоугольника
можно описать следующим
с
проиллюстрирована
рис. 2.34.
от
пересечении сканирующей строки с ребром
и
справа
перегородки.
Обычно перегородка проходит через одну из вералвершин многоугольника, и снова удобнее всего применять данный
сканирующими строками.
заполнения по
алгоритм с буфером кадра. Недостаток как алгоритма
в
ребрам, так и алгоритма заполнения с перегородкой заключается
его познеоднократном активировании части пикселов. Преодолеть
модификация алгоритма, известная как алгоритм со списписком ребер и флагом [2-24]. Применение всех этих трех алгоритмов
позволяет
ограничивается только простыми многоугольниками.
2.21. АЛГОРИТМ СО СПИСКОМ РЕБЕР И ФЛАГОМ
многоугольника:
Если пересечение находится
дополнить все пикселы,
ребер и флаг [2-24], является
двухшаговым. Первый шаг состоит в обрисовке контура, в резуль-
Алгоритм, использующий
список
результате чего на каждой сканирующей строке образуются пары огранислева
от
перегородки,
то
до-
центры которых лежат справа от пе-
сканирующей строки с ребром и слева от перего-
перегородки.
Если пересечение находится справа
от
перегородки,
то до-
пикселы, центры которых расположены слева
Гл. 2. Растровая графики
10
образом:
Для каждой сканирующей строки, пересекающей ребро много-
дополнить все
2468
Ребро Р,Р,
Используется соглашение о середине интервала между сканиру-
не
Алгоритм
Алгоритм заполнения с перегородкой
пересечения
0
Ю
Рис. 2.41. Алгоритм заполнения с переюролкой.
дисплей. На рис. 2.40 проиллюстрированы главные недостатки алдля сложного
68
Ребро Р4Р5
ребрам.
пикселы в
0
024
обработки всех ребер буфер кадра выводится в порядке сканирования на
106
S
>/
|
О
10
пересечению ребра со сканирующей строкой. После завершения обра-
на
/
ч
2
Ребро PjP,
заполнения
ра обрабатываются
сократить,
\
4
ч
или на
обрабатываться
1
ч Персюрочка,
\
6
2
0
024
—
—
i
0
алгоритма
10
8
I
/
\
8
6
4
Ребро Р,РД
/
I/,
/
I
1
1
Ilepet ородка
6
А
'
1
2
0
10
02468
Ребро Р,Р?
10
8
8
i
Ч
ч
1
Ребро Р,Р4
Ребро Р,Р3
»|
1
1
ограничивающих
пикселов.
Второй шаг состоит в заполнении пикселов,
расположенных между ограничивающими.
можно
сформулировать в следующем виде:
Алгоритм со списком ребер и флагом
Обрисовка контура:
2.21. Алгоритм со списком ребер
и
флагом
Более точно алгоритм
Используя соглашение о середине интервала между сканисканирующими строками для каждого ребра, пересекающего скасканирующую
строку,
которого
лежит
х
+
1/2 >
отметить
самый
левый
от
справа
пиксел,
результаты:
центр
пересечения;
Сначала
Внутри
т. е.
Для*
х||сресечения
FALSE
=
-
Пиксел
0
—
не
граничный
и
Внутри
следовательно, предпринимать никаких
=
FALSE,
действий
следова-
не надо
Заполнение:
Для*
Для каждой сканирующей строки, пересекающей многоу-
=
Пиксел
1
многоугольник
FALSE
Внутри
=
for
0 (левая граница) to х
=
х
—
граничный, поэтому переменная Внутри инвер-
инвертируется
и
Внутри
TRUE,
=
получает
значение
поэтому
TRUE.
пикселу
Переменная
присваивается
цвет
или интенсивность многоугольника.
=
хтах (правая граница)
Для *
=
2, 3, 4
Пиксел
if пиксел в точке х имеет граничное значение
Для*
=
5
значение
цвета
многоугольДля*
=
6
Пиксел
else
цвета
TRUE, поэтому пик-
—
—
инвертируется
значение
=
=
многоугольника
присвоить пикселу в х
граничный и Внутри
граничный, поэтому переменная Внутри инверFALSE, поэтому пикселу присваиваинвертируется. Внутри
присваивается фоновый цвет.
Пиксел
=
в х
не
пикселу присваивается цвет многоугольника.
then инвертировать значение переменной Внутри
if Внутри
TRUE then
присвоить пикселу
—
Внутри
фона
=
граничный, поэтому переменная Внутри инвери
получает
TRUE,
TRUE.
значение
поэтому
пикселу
Переменная
присваивается
иве г
многоугольника.
end if
Пиксел
Для х
next x
—
не граничный и
Внутри
=
TRUE, поэтому пик-
пикселу присваивается цвет многоугольника.
Для*
Пример 2.11. Алгоритм, использующий список ребер и флаг
Рассотрнм применение данного алгоритма к тестовому многоугольнику на рис. 2.34.
Сначала обрисовывается контур, результат этого шага показан на рис. 2.42,а. АктиАктивированы пикселы в точках A, 1), A, 2), A, 3), (I, 4), A, 5), A, 6), B, 6). C. 5). D. 4),
E, 3), F, 3), G, 4), (8, 4), (8, 3), (8, 2), (8, 1).
Затем многоугольник заполняется. Для иллюстрации этого процесса выделена и
показана строка 3 на рис. 2.42, Ь. Для обрисовки контура на этой
строке активироваактивированы пикселы при*
1, 5, 6 и 8. Применение алгоритма заполнения дает следующие
=
8
граничный, поэтому переменная Внутри инверПеременная ВнутFALSE, поэтому пикселу присваивается цвет фона.
Пиксел
—
инвертируется и получает значение FALSE.
Внутри =
2.42,с, а конечный результат для всего многомногоугольника совпадает с результатом работы алгоритма со списком ребер, показанРезультат представлен
показанным на рис,
на
рис.
2.40.
=
В
данном
алгоритме
один раз, так что
р5
7
ч
6
Рз
/
\
5
()
12
3
4
5
9
10
0123456789
10
/
\
4
1
\/
1
с
О
р,
р2
012345678
678
b
9 10
1
пиксел
108
по
только
затраты на ввод/вывод значительно меньше, чем
алгоритме
со
списком
результате чего он выполняется на один-два порядка быстбыстрее, чем алгоритм с упорядоченным списком ребер [2-24]. Для про-
реализации,
в
простых
изображений даже возможна анимация в реальном времени.
109
2.21. Алгоритм
а
Рис. 2.42. Алгоритм заполнения
обрабатывается
ребер или алгоритме с перегородкой. Ни
один из этих алгоритмов, если они работают с буфером кадра, не
требует построения, поддержки и сортировки каких-либо списков.
При программной реализации алгоритм с упорядоченным списком
ребер и алгоритм со списком ребер и флагом работают примерно с
одинаковой скоростью [2-21]. Однако алгоритм со списком ребер и
флагом годится для аппаратной или микропрограммной реализав
8
каждый
ребрам и флагу.
Гл. 2. Растровая графика
со
списком
ребер и флагом
2.22. АЛГОРИТМЫ ЗАПОЛНЕНИЯ С ЗАТРАВКОЙ
В
обсуждавшихся выше алгоритмах заполнение происходит в поИной подход используется
порядке сканирования.
в
за-
алгоритмах
затравкой. В них предполагается, что известен хотя бы
один пиксел из внутренней области многоугольника. Алгоритм пызаполнения с
пытается
8-связная
b
4-связная
а
найти и закрасить все другие пикселы, принадлежащие внут-
внутренней области. Области могут быть либо внутренне-, либо грагранично-определенными. Если область относится к внутренне-опреде-
внутренне-определенным,
то все
пикселы, принадлежащие внутренней части,
один и тот же цвет или
отношению к
продемонстрировано на
интенсивность,
а все
пикселы,
имеют
внешние по
области, имеют другой цвет. Это продемонстрирова-
рис. 2.43. Если область относится к гранично-определенным,
то все пикселы на границе
области имеют выделенное значение или
рис. 2.44. Ни один из пикселов из внутвнутренней части такой области не может иметь это выделенное значе-
цвет,
как это показано на
значение.
Тем не менее пикселы,
также
могут
иметь
граничное
ющими,
для
алгоритмы
гранично-заполняющими.
гранично-заполняющие
значение.
области,
внутренне-определенные
а
внешние по отношению к
Алгоритмы,
называются
границе, такзаполняющие
внутренне-заполня-
гранично-определенных
областей
—
Далее будут обсуждаться гранично-за-
Внутренне-
или
можно
получить аналогичным
образом.
или
8-связными. Если область 4-связная, то любого пиксела в обла-
области
можно
помощью
комбинации движений только в 4
направлениях: налево, направо, вверх,
пиксела
можно
достичь
с
Для 8-связной области
комбинации движений
помощью
горизонтальных, двух вертикальных
вниз.
и
и
8-связные
внутренне-
Рис.
4-
2.46.
8-связные
и
гранично-
определенные области.
Алгоритм заполнения 8-связной области заполнит и 4-связную
область, однако обратное неверно. На рис. 2.45 показаны простые
ях.
8-связных внутренне-определенных областей. Хотя
каждая из подобластей 8-связной области на рис. 2.45,b является 4примеры 4-
и
связной, для перехода из одной подобласти в другую требуется 8связный алгоритм. Однако в ситуации, когда надо заполнить раз-
4-связные подобласти, использование
8-связного алгоритма вызовет неправильное заполнение обеих обобластей одним и тем же цветом.
разными цветами две отдельные
На рис. 2.46 показана 8-связная область с рис. 2.45, переопреде-
гранично-определенной области. На рис.2.46 иллюстиллюстрируется тот факт, что для 8-связной области, у которой две под-
переопределенная в виде
гранично-определенные области могут быть 4-
достичь с
4-
определенные области.
алгоритмы, однако соответствующие внутренне-запол-
няюшие алгоритмы
2.45.
Рис.
в
двух
4 диагональных направлени-
подобласти
4-связна, а граница
4-связной области 8-связна. Далее речь в основном пойдет об алгосоприкасаются
углами,
граница
4-связных областей, однако их можно легко переделать
для 8-связных областей, если заполнение проводить не в 4, а в 8 наалгоритмах для
направлениях.
о
2.23.
ПРОСТОЙ АЛГОРИТМ ЗАПОЛНЕНИЯ С ЗАТРАВКОЙ
6
6
Используя стек, можно разработать простой алгоритм заполнения
)
гранично-определенной области. Стек
4
4
—
это
просто
массив
или
другая структура данных, в которую можно последовательно поме-
1
которой их можно последовательно извлекать.
значения добавляются или помещаются в стек, все
помещать значения и из
Когда новые
2
остальные значения
п
значения
о
Рис.
8
2.43.
Внутренне-определенная об-
область,
110
10
0
Рис.
ласть
8
2.44.
Гранично-определенная
10
удаляются
опускаются вниз на один уровень. Когда значе-
или
из
извлекаются
стека,
остальные
значения
всплывают или поднимаются вверх на один уровень. Такой стек на-
об-
называется
стеком
прямого действия
обслуживания «первым пришел,
или
стеком
последним
2.23. Простой алгоритм
заполнения
с
дисциплиной об-
обслужен» (FILO). Про-
Гл. 2. Растровая графика
111
с
затравкой
стой алгоритм заполнения с затравкой можно
представить в
Push Пиксел (х
следу-
следующем виде:
if (Пиксел(х, у
Простой алгоритм заполнения с затравкой и стеком
Пиксел(х, у
Пока стек не пуст
из стека
Присвоить пикселу требуемое значение
Для каждого из соседних к текущему 4-связных пикселов
проверить: является ли он граничным пикселом или не
присвоено ли
Проигнорировать
уже пикселу
пиксел
любом
в
этих двух
случаев.
-
значение
and
значение) then
1)
В алгоритме проверяются и помещаются в стек 4-связные пиксепикселы,
начиная
пикселов
с
от
правого
текущего пиксела.
Направление обхода
против часовой стрелки.
—
при-
требуемое значение. Проигнориро-
из
—
1, у)
1) < > Нов
1) < > Гран
Push Пиксел (х, у
end if
end while
Поместить затравочный пиксел в стек
Извлечь пиксел
—
—
В противном
случае поместить пиксел в стек.
Пример 2.12. Простой алгоритм заполнения с затравкой
по-
В качестве примера применения алгоритма рассмотрим гранично-определенную
4), F, 6), A, 6),
полигональную область, заданную вершинами A, 0), G, 0), (8, 1), (8,
пиксел
2.47.
на
D, 3). ОбЗатравочный
рис.
@, 5) и @, 1). Область изображена
—
Алгоритм
можно
модифицировать для 8-связных областей, если
просматривать 8-связные пикселы, а не только 4-связные.
ПривеПриведем более формальное изложение
в
алгоритма,
котором предполапредполагается существование затравочного пиксела и
гранично-определен ой области
гранично-определен-
в порядке, указанном на рис. 2.47 линией со
Область заполняется пиксел за пикселом
Числа, изображенные на пикселе, обозначают занимаемую при работе
пикселов таких чисел несколько.
алгоритма позицию пиксела в стеке. Для некоторых
Это означает, что пиксел помещали в стек более одного раза. Когда алгоритм дохо-
стрелками.
доходит до пиксела
E, 5), стек насчитывает 25 уровней глубины
и
содержит пикселы
G, 2), G, 1), F, 2), F, 3). E, 5), F. 4), E, 5), D, 4), C, 3), C, 4), C, 5),
B, 4), B, 3), B, 2), B, 2), C, 2), E, 1), C, 2), E, 2), C, 3), D, 4), E, 3).
Так как все пикселы, окружающие E, 5), содержат либо граничные, либо новые
G, 4), G, 3),
Простой алгоритм заполнения
Затравка(х, у) выдает затравочный пиксел
Push
процедура, которая помещает пиксел в стек
Pop
процедура, которая извлекает пиксел из стека
Пиксел(х, у)
Затравка(х, у)
—
—
=
инициализируем стек
Push Пиксел(х, у)
Следовательно, из стека изизвлекается пиксел G, 4) и алгоритм продолжает заполнять колонку G, 4), G, 3),
G, 2), G, 1). При достижении пиксела G, 1) проверка снова показывает, что окружа-
значения овета, то ни один из них в стек не помещается.
окружающие пикселы
либо уже заполнены, либо являются граничными пикселами. Так как
в этот момент многоугольник полностью заполнен, то извлечение пикселов из стека
кодо полного его опустошения не вызывает появления дополнительных пикселов,
которые следует заполнить.
Когда стек становится пустым, алгоритм завершает рабо-
работу.
while (стек не пуст)
извлекаем пиксел из стека
Pop Пиксел(х, у)
if Пиксел(х, у) < > Нов значение then
Нов значение
Пиксел(х, у)
end if
=
\г
it
проверим, надо ли помещать соседние пикселы в стек
if (Пиксел(х + 1, у) < > Нов значение and
Пиксел(х + 1, у) <
>
Гран
Push Пиксел (х + 1, у)
if (Пиксел(х, у 4- 1) < > Нов
Пиксел(х, у +• 1) < > Гран
Push Пиксел (х, у + 1)
if (Пиксел(х
1, у) < > Нов
значение) then
and
17.
11
и
13
15
10
JO
ч
! 1
К
J
14
я
значение
12
К
—1
Ц
15
7|<
\
пиксел
Гт
24
К
1Л
м
1
•4
Л?
Внутренний
\ч
•41
м
пиксеп
17
L
Затравочный
>-
Л
Ь>
22
221
Граничный
6
1\
20"
пиксел
значение) then
0
123456789
—
Пиксел(х
112
-
1, у) <
Гл. 2. Растровая
графика
>
and
Гран_значение) then
значение
Рис. 2.47. Затравочное запопнение с помощью простого стекового алгоритма.
2.23. Простои алгоритм
заполнения
с
затравкой
Многоугольник из примера 2.12 является односвязной областью,
но алгоритм будет правильно заполнять и
области, содержащие
дыры. Это
показно в следующем примере.
качестве примера применения
алюритма рассмотрим гранично-определенную обобласть, содержащую дыру. Она изображена на рис. 2.48. Как и в
предыдущем примепримере, вершины многоугольника заданы пикселами A,0),
G,0), (8, 1), (8,4).
F,6),
A, 6), @, 5) и @, 1).. Внутренняя дыра определяется пикселами C, 2), E,
E,
2),
3),
C, 3). Затравочный пиксел
D, 4). Из-за дыры многоугольник заполняется не в
—
том порядке, как в примере 2.12.
Новый порядок заполнения указан на рис. 2.48 лилинией со стрелками. Как и в
прс1ыдушем примере, числа в квадратике пиксела покапоказывают позицию в стеке,
занимаемую ииксепом. Когда обработка доходит до пиксепиксела C, 1), все окружающие ею 4-связныс пикселы
являются
либо уже заполнены, либо являютграничными. Поэтому ни один из пикселов не помещается в стек.
стека в
Глубина
этот момент равна 15. В стеке находятся
пикселы G, 1), G, 2), G,
3), F, 5), G, 4),
F. 5). C, 1), A, 2), A, 3). A, 4). B, 5), C, 5). D, 5), E, 4).
После удаления из стека пиксела G, 1) заполняется колонка
G, 1), G, 2), G, 3),
G, 4), при этом ни один новыП пиксел в стек не добавляется. Дчя пиксела
4-связные окружающие пикселы либо уже заполнены, либо являются
граничными.
Обращаясь к стеку, алгоритм извлекает пиксел F, 5), ею заполнение заверша-
Данный
зачастую содержит
пиксе-
алгоритм
можно разбить на четыре этапа.
Построчный алгоритм заполнения с затравкой
Затравочный пиксел на интервале извлекается
гранич-
и впра-
вправо от затравки вдоль сканирующей строки до тех пор,
пока не
будет найдена граница.
В переменных
может
стать
довольно
—
Xлев и Xправ запоминаются крайний
В диапазоне Хлев ^.х
стек зача-
В
расположенные
по-
4
i
4
J2
Внутренний пиксел
3
1ыра
?4
15 I 15
0
Граничный пиксел
J23456789
Рис. 2.48. Затравочное заполнение области с
стекового
114
^Хправ проверяются строки, располо-
непосредственно над и под текущей строкой. Опредеесть ли на них еще не заполненные пикселы. Если та-
помещается в стек.
При инициализации алгоритма в стек помещается единственный
затравочный пиксел, работа завершается при опустошении стека.
Как показано на рис. 2.49 и в примере ниже, алгоритм справляется
дырами и зубцами на границе. Ниже приводится более подробное
описание алгоритма на псевдокоде.
с
¦)
91Я
алгоритма.
Гл. 2. Растровая графика
и
(т. е. не все пикселы граничные, или уже зазаполненные), то в указанном диапазоне крайний правый пиксел
и помещаетв каждом интервале отмечается как затравочный
Затравочный пиксел
JO
левый
боль-
7
5
9
стека, содер-
Интервал с затравочным пикселом заполняется влево
такие пикселы есть
5
из
содержащего затравочные пикселы.
работу.
дублирующую или ненужную информацию.
3
9 I 9
область
или
минимизируется за счет хранения только одного затравочного пиксела для
4
I 9
гранично-определенным обла-
с
Определяется,
9
к
цветом, которым
гранично-определенной области, не должно быть пикселов
многоугольник заполняется. Схематично работу алгоритма
построчном алгоритме заполнения с затравкой размер стека миними-
6
применим
теоретический подход, основан-
и
крайний правый пикселы интервала.
стек
Еще один недостаток предыдущего алгоритма
большим.
другу
может быть как
Гранично-определенная 4-связная область
может содержать дыры.
выпуклой, так и не выпуклой, а также
к нашей гранично-определенВ области, внешней и примыкающей
ПОСТРОЧНЫЙ АЛГОРИТМ ЗАПОЛНЕНИЯ
С ЗАТРАВКОЙ
обоих примеров,
к
примыкающих друг
областям.
2.24.
видно из
группа
возможен
подход, однако также
основанный на теории графов [2-26].
Дальнейшая обработка происходит без какого-
пибо заполнения, и когда стек становится
пустым, алгоритм завершает
Как
это
(ограниченная уже заполненными или граничными
Мь1 для разработки алгоритма используем эвристический
пикселами).
G, 4) сно-
снова все
завершает заполнение всего
многоугольника.
—
Непрерывный интервал
Не-
пикселов
Пример 2.13. Алгоритм заполнения с затравкой для многоугольника с дыркоЯ
В
любого непрерывного интервала на сканирующей строке [2-25].
Построчный алгоритм заполнения с з атравкой
отверстием с помощью простого стеко-
Затравка (х, у) выдает затравочный пиксел
рор
*
—
процедура, которая извлекает пиксел из стека
2.24.
Построчным а.ггоригм
заполнения
с
загравко
10
Push
процедура, которая помещает пиксел в стек
—
инициализируем стек
8
S
Push Затравка (х, у)
while (стек не пуст)
\
\
2
6
\
извлекаем пиксел из стека и присваиваем ему новое значе-
\
Граничный пиксел
значение
Pop Пиксел (х, у)
4
SI Исхолный затравочныЛ пиксел
2
Заполненный пиксел
Нов значение
(х, у)
сохраняем х-координату затравочного пиксела
х
Врем—х
Пиксел
=
=
заполняем
0
0
2
4
8
6
10
12
х
=
х
интервал справа от затравки
1
+
while Пиксел (х, у) <
Пиксел
10
х
10
8
..
8
i
\
\
2
6
х
+
=
\
\
2
6
3
Хправ
\
1
\
4
х
=
—
1
восстанавливаем х-координату затравки
х
1
=
Врем
х
заполняем
4
х
=
х
интервал слева
(х, у) <
Пиксел (х, у)
1
х
х
=
О
4
6
8
!0
12
0
2
-4
6
is
|(|
12
b
К
2
1\
\
S
=
Врем
значение
слева пиксел
х-координату затравки
что
проверим,
многоугольника,
ни
строка выше не является
уже полностью
ни
границей мно-
заполненной; если это не
2
так,
\
\
¦
т
4
0
найти затравку,
подынтервала
сканирующей строки
х
Хлев
=
начиная с левого
края
подынтер-
while х < Хправ
ищем затравку на строке выше
Флаг
0
о
«2
то
У = у + 1
¦
10
Нов
значение
х
S
\
\
Гран
>
end while
х
ч
затравки
—
восстанавливаем
8
=
0
2
4
6
8
Ю
е
Рис. 2.49.
=
сохраняем крайний
Хлев = х + 1
10
от
1
—
while Пиксел
2
значение
крайний справа пиксел
сохраняем
\
S
\
0
Нов
значение
end while
К
1
=
(х, у)
Гран
>
Построчный алгоритм заполнения с затравкой
аля
12
while
(Пиксел (х, у) <
>
Гран
Пиксел (х, у) <
>
Нов
and
значение and x < Хправ
значение
многоугольника.
2.24. Построчный
а норитм
гано.шения
с
затравкой
if Флаг
х
=
х
+
=
0 then Флаг
1
=
образом обрабатывается строка
1
два
помещаем
в стек
if Флаг
1 then
=
крайний справа
что пиксел (9,6)
=
I
=
Нов
х
х
=
=
=
=
х +
По сравнению
строка ниже не является ни границей многомногоугольника, ни уже полностью заполненной
эта
что
часть
алгоритма совершенно аналогична проверке
для строки выше,
у
=
что вместо
за исключением того,
у + 1 надо подставить у
=
у
—
1
а
координаты х, у
Пример 2.14. Построчный алгоритм заполнения с затравкой
для
гранично-опрелеленнои области
на
рис.
2.49.
1ри инициализации в стек помещается затравочный пиксел, помеченный как Затрав-
E,7) на рнс. 2.49,а. Первоначально в качестве затравки интервала из стека извлеизвлекается это г пиксел. Интервал заполняется справа и слева от загравки. Найденные
а
при этом концы интервала Хправ
расположенная выше текущей
и
=
9 пХ лев
оказывается
чго
=
1. Затем проверяется строка, распо-
она
не
граничная
и
не
заполненная.
Крайним правым пикселом в диапазоне I ^ х ^ 9 оказывается пиксел (8,8), иомеен
цифрой 1 на рис. 2.49,а. Этот пиксел помещается в стек. Затем аналогичным
°.
(выше и ниже) уже заполнены. Таким
помешается.
с
алгоритмом
разд. 2.23 максимальная
из
глубина
Другие методы заполнения с зазатравкой для многоугольника или области обсуждаются в [2-27].
примере равна
пяти.
2.25. ОСНОВЫ МЕТОДОВ УСТРАНЕНИЯ СТУПЕНЧАТОСТИ
причины,
ее
вызывающие.
Основная
причина
появления
лестничного эффекта заключается в том, что отрезки, ребра многопиксела из стека,
функция Push помещает их в стек.
Гл.
стека в этом
понимать
ассмотрим работу алгоритма
не
эффективно бороться со ступенчатостью (лестничным эфэффектом), приводящей к искажениям в изображении, необходимо по-
finish
извлекает
в
Чтобы
end while
Здесь функция Pop
пиксел
1
end while
проверим,
новые
Пз стека извлекается пиксел 1 и
стек
один
образом,
строка обрабатывается, при этом вновь побавочных пикселов не появляется. Теперь
стек пуст, многоугольник заполнен и pa6oia алгоритма завершена.
координата пиксела увеличена
Хвход then х
В
пиксел
пикселы на этой строке и на соседних строках
end while
if х
диапазоне
C,4), который помещается в стек. ПраПравый подынтервал к этому времени уже заполнен. Обработка строки ниже дает зазатравку C,2) для левого и A0,2) для правого по интервалов. Эти пикселы также попомещаются в стек. Именно сейчас достигается максимальная глубина стека для обраобрабатываемого многоугольника.
Теперь остается только один интересный момент. После заполнения 4-связных
полигональных подобластей с затравочными пикселами 5, 4 и 3 на рис. 2.49,е из
стека извлекается пиксел, помеченный иифрой 2. Здесь мы обнаруживаем, что все
ни
что
в
=
левого подынтервала затравочный
1
удостоверимся,
т. с.
и слева от
х
+
^л* ^ Хправ,
^х < 9. На этом завершается первый проход алгоритма.
=
продолжим проверку, если интервал был прерван
Гран_значение or Пиксел (х, у)
значение) and x < Хправ)
диапазоне А'лее
в
предезатравки получаем
результате заполнения интервала справа
I и Yправ
10. Обрабатывая строку выше, получаем для
пределы диапазона: Хлев
end if
=
пиксел
строках (рис. 2.49,Ь, с, d). Для строки 3 затравкой служит пиксел A0, 3) (рис. 2.49,d).
Флаг = О
while ((Пиксел (х, у)
пиксел
—
Далее из стека извлекается верхний пиксел. Здесь заполняются интервалы, распорасположенные в правой части многоугольника на последовательных сканирующих стро-
-
Хвход =
это не самый
—
самый крайний правый
Хправ and Пиксел (х, у) < > Гран_значение
(x
and Пиксел (х, у) < > Нов_значение) then
Push Пиксел (х, у)
else
Push Пиксел (х
1, у)
end if
if
(9,6), он помешается в стек. Заметим,
крайний правый пиксел на интервале, однако это
Затравка для правого подынтервала
пиксел
текущей. В диапазоне А'лее ^х ^ Хправ еегь
строке. Для левого интервала в качестве затравки выступиксел C,6), помеченный цифрой 2 на рис. 2.49,ff, он тоже помещается в стек.
подынтервала
выступает
end while
ниже
на этой
многоугольника, цветовые границы и т. д. имеют непрерывную природу,
тогда как растровое устройство дискретно. Для
представления ототрезка, ребра многоугольника и т. д. на растровом устройстве необнеобходимо начертить их в дискретных координатах, что может привепривести
^к удивительным результатам. Рассмотрим, например, сигнал,
изображенный на рис. 2.50,а. Второй сигнал более низкой частоты
изображен на рис. 2.50,с. Если сделать выборки с одинаковой чачастотой
из
обоих
(точки отмечены маленькими крестикаМи), то восстановленные сигналы, показанные на рис. 2.50,b и d,
идентичны. Рис. 2.50, d называется искажением выборки, показанпоказаний на
рис. 2.50,b и, следовательно, сигнала на рис. 2.50,а. Для
119
2-25. Основы
сигналов
методов
устранения
ступенчатости
¦—¦
1
и
•
zrrz:
a
Рис. 2.51. Эффекты
Рис. 2.52. Эффекты искажения в ани-
искажения для мелких
анимационной
объек гов.
ки-
последовательности
кинокадров.
искажений
В основном существует два метода устранения
изображения такого рода. Первый
Рис. 2.50.
связан с
увеличением частоты вы-
выборки, что достигается с помощью увеличения
Выборка и искажение при восстановлении.
Таким образом, учитываются более мелкие
высокочастотного сигнала
недостаточной частотой.
(рис. 2.50, а) выборка проведена с недо-
Для предотвращения искажения следует про-
проводить выборку сигнала с частотой,
превышающей
наибольшую
приводит
к
тому,
визуализируются неверно.
что
частоту
по
крайней мере вдвое превы-
сигнала.
Недостаточная
выборка
высокопериодичные изображения визуализи-
Например, ограда забора или подъемные жалюзи
могут выглядеть как несколько широких полос,
отдельных, более узких
а не как много от-
изображать с более низким, используя усреднение
пиксела с более низким
некоторого типа для получения атрибутов
разрешением,
а
разрешением [2-28].
На рис. 2.53 показано усреднение двух
полосок.
раза демонстрируется
такого
в
делится на подпикселы
изображениях:
струпенча-
тость
ребер и некорректная визуализация тонких деталей или факфактуры- Третье проявление связано с очень мелкими объектами. Если
объект меньше размера пиксела или не покрывает внутреннюю точ-
атрибутов пиксела, то он не будет учирезультирующем изображении. С другой стороны, если
служащую для оценки
точку,
учитываться
в
малый объем покрывает эту точку,
повлиять
на
атрибуты
пиксела.
иметь
атрибуты
На
маленького
на
рис. 2.53,а.
левом
пикселе
рис.
2.51.
де-
объекта.
На
правых пикселах
2.51
рис.
иллюстрируются объекты, которые будут проигнорировапотеряны. Заметим, что могут быть проигнорированы тактакже и длинные, тонкие объекты. Особенно заметны такие
эффекты
анимационных
последовательностях
кинокадров.
На
рис. 2.52
представлен маленький треугольник на трех кадрах анимационной
последовательности. Если атрибуты пиксела определяются в его
центре, то на первом кадре объект невидим,
на
третьем
—
снова невидим.
как мерцание объекта.
120
Гл. 2. Растровая графика
более вы-
дисплейного
разрешения. Для получения атрибутов
пиксела
каждого подпиксела, которые за-
определяются атрибуты в центре
можно получить лучшие резатем усредняются. В некоторой степени
больше подпикселов и учитывать их
результаты, если рассматривать
На
весов
определении атрибутов.
влияние
с
помощью
•
11ентр дисплейного пиксела
+¦
Центр вычисленного пиксела
-f-t-
+
+
+
+
+
+
+
при
+
+
+
+
+
на
втором
—
видим,
-t-
Центр
дисплейного пиксела
4
3
2
1
2
4
6
8
6
4
2
9
6
3
® 12 8
4
6
9 12
2
© 2
4
8
12
1
2
1
3
6
9 12 9
6
3
Уменьшение
в 4
3
3
+
разрешения
2
1
+
Уменьшение
1
1
-f-
Уменьшение
разрешении
в 2 раза
О
+
проигнорированы или
в
2 и 4
пиксел
Каждый дисплейный
процессе формирования растра
в
то он может слишком сильно
демонстрируется такая ситуация. Если для определения атрибутов исиспользуется середина пиксела, то в данной ситуации весь пиксел бубудет
высокого
Равномерное ус-
типов.
пикселов для уменьшения разрешения
разделов иллюстрируют два из трех общих проявлений искажений та-
машинно-сгенерированных
Однако сущест-
детали.
ограничение предполагает,
усреднение окружающих
в
разрешения растра.
на способность растровых графичесуществует определенное ограничение
очень мелкие растры. В настоящее
графических устройств с ЭЛТ выводить
Такое ограоколо 2000 пикселов в строке.
время предел составляет
более высоким
что растр надо вычислять с
Рассуждения, приведенные выше, и материал предыдущих разрода
изо-
2 4
6
8
6
4
2
1
3
4
3
2
1
2
разрешения
в
2 раза
Уменьшение разрешения
раза
в 4
раза
а
В совокупности это будет выглядеть
Рис. 2.53. Усреднение характеристик пиксела: (а) равномерное, (Ь)
обозначают относитетьные веса).
121
2.25.
Основы методов устранения ступенчатости
взвешенное (числа
при 1024 х 1024. Для того чтобы
разрешением 256 х 256 пикселов, было ис-
512, а для рис. 2.54,b
нии 512 X
I
I
I
I
—
получить изображение с
использовано равномерное усреднение. На рис. 2.55,а и b приведена ододна
и
та
же
сцена,
вычисленная
при
разрешении
512 х 512
и
изображенная с разрешением
256 х 256 с использованием взвешенных средних (рис. 2.53,Ь).
Второй метод устранения искажений изображения состоит в
1024 х 1024
соответственно,
и
чтобы трактовать пиксел не как точку, а как конечную обобласть. В следующем разделе приводится эвристический метод, а в
том,
разд. 2.27
—
математическое
Трактование пиксела
a
Рис. 2.54.
полученные с иомошью равномерного
1024 х 1024. (С разрешения Ф.
растре 256
усреднения из (а) растра 512
Кроу.)
х
х
области
эквивалентно
префильтрации
256 и
2.26. ПРОСТОЙ МЕТОД УСТРАНЕНИЯ ЛЕСТНИЧНОГО
ЭФФЕКТА
512, (Ь) растра
В алгоритмах разложения отрезка
многоугольника,
рис. 2.53, b представлены взвешенные
конечной
изображения.
b
Изображения с высоким разрешением, вывошимые в
как
обоснование такого подхода. Тракто-
в
растр
и
заполнения
много-
обсуждавшихся выше, интенсивность или цвет пиксела
[2-28], для уменьшения разрешения в 2 и 4 раза. Для этих взвешен-
определялись интенсивностью или цветом единственной точки
внутри области пиксела. В этих методах предполагалось, что пик-
взвешенных средних при уменьшении
пиксел
средние, предложенные
Кроу
разрешения в 2 раза рассматриваются
при уменьшении в 4 раза
49.
9 подпикселов, а
На рис. 2.54 изображена сложная сцена с
разрешением 256 х 256
пикселов, при этом для рис. 2.54, а она была вычислена
—
при разреше-
скорее математической точкой, нежели конечной обНапример, вспомнив рис. 2.4 и алгоритм Брезенхема, мы
является
областью.
определялась местоположениместоположением одной точки пересечения отрезка и границы пиксела. В методах
увидим, что интенсивность пикселов
обсуждавшихся вывыше, определение местоположения пиксела (внутри или вне многомногоугольника) основывалось на положении центра пиксела. Если центр
растровой развертки сплошной области,
тоже
находился внутри, то активировался весь пиксел. Если центр нахонаходился вне, то игнорировалась вся область пиксела. Этот метод не-
необходим
изображений, т. е. черных
или белых, цвета многоугольника или цвета фона. В результате пополучается характерное ступенчатое или зазубренное ребро многомногоугольника или отрезок. Как обсуждалось в предыдущем разделе,
основной причиной лестничного эффекта является то, что дискретдискретность отрезка или ребра недостаточна для того, чтобы соответстсоответствовать
для
простых
дискретным
двухуровневых
пикселам экрана дисплея.
При наличии нескольких интенсивностей, т. е. полутонов серого
или оттенков цвета, внешний вид ребра или
отрезка может быть
Рис. 2.55.
Изображения
высоким разрешением, выводимые
полученные с помощью взвешенного усреднения из
с
1024 х 1024. (С разрешения Ф.
Кроу.)
122
Гл. 2. Растровая
Улучшен размыванием краев. Простой эвристический метод состосостоит в
том, чтобы устанавливать интенсивность пиксела на ребре
i
рафика
в
растре 256 х 256
и
(а) растра 512 х 512, (Ь) растра
пропорционально
площади
части
пиксела,
находящейся
внутри
многоугольника. Эта простая форма устранения ступенчатости ил-
2.26.
Простой
метод
устранения
лестничного
эффекта
Вне многоугольника
/
Ребро
многоугольника
\.
I
ir
i
^k.
W
4
Вне многоугольника
г
1
Ребро
q
г ^г
4> ¦
t.
^L
JL
12
3
0
>L
г
i
4
Jk.
4
многоугольника
Г
2
"V
4>
0
1
2
3
^
1
V
0
5
*
-
А
ж
4
5
j
г
л
4
чг
¦ ф ^
4
j
ж
^L
12
3
4
b
a
fы
ж
0
0
1
1
Ребро
многоугольника
4
J
Вне многоугольника
i
_
Плошадь2= (у j
А—Площадь
внутри многоугольника, (с)
Плошадь,= 1-(
1-у;J/2т-|
ребро, полученное с помощью модифицированного
Брезенхема.
люстрируется рис. 2.56, на котором изображено одно ребро много-
5Л. Внутренняя
многоугольника
с
многоугольника
расположена справа. На рис. 2.56, а представлено ребро,
тангенсом
угла
наклона
часть
Рис.
2.57. Алгоритм Брезенхема, учитывающий тошаль часги никсепа для устране-
устранения
ступенчатости.
много-
разложенное в растр с помощью стандартного алгоритма Брезенхе-
более реалистично представить ребро многоугольника. Суммарная
площадь для двух пикселов равна .У, + т /2.
Если
Брезенхема с использованием только двух
уровней интенсивности. ИзобраИзображение имеет характерный зазубренный или ступенчатый вид. На
величину
рис. 2.56, b для выбора одного из восьми (от 0 до 7) уровней интен-
0 ^ е
интенсивности используется
площадь части пиксела, находящейся внутри
многоугольника. Заметим,
что так как эта площадь для
пикселов меньше одной восьмой,
полностью черные на
то
рис. 2.56,а, окрашены
некоторых
некоторые пикселы,
в
полнос-
белый цвег на рис. 2.56,Ь.
В результате простой модификации алгоритма Брезенхема можможно получить
аппроксимацию площади
части
пиксела, находящейся
[2-29]. Эту аппроксимацию можно испольиспользовать для модуляции интенсивности. Как показано на
рис. 2.57,
внутри многоугольника
при
yi +m/2
с
Рис. 2.56. Устранение спупенчагости ребра многоугольника: (а) без
устранения стуступенчатости, (в) интенсивность пропорциональна площади части пиксела, находящейалгоритма
1 + т) /2 т
5
+'
находящейся
=
-
пересечении
пиксела
и
отрезка
с
тангенсом
утла
наклона
к
ошибке в исходном алгоритме Брезенхема добавить ве-
= е
то
+ w,
т, т.е. _ввести преобразование е
это мера площади той части пиксе^ 1. Теперь ошибка е
w
=
1
—
—
yt + т /2.
В связи с этими модификациями начальное значение ошибки равно
пиксела,
которая
находится
¦Л,
поэтому
для
внутри
первого
многоугольника,
пиксела
алгоритм,
т. е.
приводившийся
на
рис.2.6, всегда будет выдавать значение интенсивности, равное пополовине
пиксела
максимальной.
дает
Более
перемещение
реалистичное
оператора
значение
активирования
для
первого
пиксела
на
другое место. Более того, можно получить непосредственно значезначение интенсивности, а не десятичную
помощью
умножения
дробь от ее максимума с по-
на максимальное число
доступных
уровней ин-
@ ^ rn ^ 1) может быть задействован либо один, либо два пикпиксела.
Если пересекается только один пиксел (рис. 2.57, а), то
интенсивности/ следующих величин :_тангенса угла наклона (т), весовесового коэффициента (w) и ошибки е. Модифицированный алгоритм
площадь1* правее и ниже отрезка равна У, + т /2. Если же надо
выглядит следующим образом:
т
2.57, Ь), то площадь нижнего пиксела
1 + тJ/2т. Для
(у.
у^/2т, а верхнего
рассмотреть два пиксела (рис.
составляет
1
отрезка
первом
в
—
A
—
октанте
—
с
тангенсом
—
угла
наклона
0 < т ^ 1
площадь верхнего пиксела может быть достаточно мала для того,
чтобы ее можно было проигнорировать в вышеописанном эвристи-
эвристическом методе, например, для пиксела A, 1) на рис. 2.56, Ь. Однако
объединение этой площади с площадью нижнего пиксела позволит
Модифицированный алгоритм Брезенхема с устранением
ступенчатости для первого квадранта
отрезок проводится из (х,, у^ в (х2, у2)
1
число доступных уровней интенсивности
—
все переменные целого типа
инициализация переменных
0
х
Далее везде, где говорится о пощади пиксела, имеется
его части, которая находится внутри
многоугольника.
—
в
виду площадь той
Прим. перев.
=
х,
У= У,
=
124
Гл. 2.
Растровая графика
х2
-
х,
2.26. Простой
метод
устранения лестничного эффекта
Начало;
ДУ
m
~
=
=
У|
У2
Ду)/Дх
*
(I
i
w
I
=
X*-
"xi
дх •*-
-x,-x,
Plot (х, у,
т/2)
while (x
х2)
ду--у,-у,
1
-—
уровней интенс
(ду/д х)
X
=
X
+
1
е
=
е
+
т
else
-1 -т
ё
<
if e < w then
Макс. кол.
m--1
1/2
е=
уч-
m
-
-1/2
х
=
х
+
1
у
=
у +
1
¦*-
е
Plot (\, у.
т/2)
=
-
е
w
end if
Plot (x, у, е)
end while
finish
Интенсивность для первого
начинается
с адреса пиксела.
пиксела предполагает, что отрезок
На рис.
2.58 приводится блок-схема
алгоритма. Результаты для отрезка с тангенсом угла наклона
т = 5/8 и восемью уровнями интенсивности представлены на
2.56,с. Распространить работу алгоритма на другие октанты
можно тем же способом, что и для основного алгоритма Брезенхема (см. разд. 2.5).
рис.
х«— х + 1
У^ У+1
ё
=
2.27. СВЕРТКА И УСТРАНЕНИЕ СТУПЕНЧАТОСТИ
e-w
Распространение обсуждавшихся в
предыдущем разделе простых
методов устранения ступенчатости
(сглаживания) требует исполь-
использования математического метода, называемого
берется свертка сигнала, т. е. изображения, с ядром свертсвертки, а результат используется для определения атрибутов пиксела.
сглаживания
Plot (x, у,
е)
Свертка задается интегралом
Рис. 2.58. Алгоритм Брезеихема с устранением ступенчатости.
-
x)yix) etc
•/ —У
где
^ (?
у(х)
—
Функция свертки,
свертываемая функция,
х) иу(х)
свертка h (?
х)
—
—
ЯЛР°
или
-
—
126
Гл. 2.
*.*
ювзя графика
сверткой. Для сгла-
127
2.27. Свертка
и
устранение
ступенчатости
Представить себе физический смысл свертки из ее математического
определения весьма
трудно. Однако
нам в этом поможет
Математически ядро свертки равно
простой
h(x)
графический анализ [2-30].
Рассмотрим
функции у(х) =х, 0 ^.х ^ 1 с простой
прямоугольной функцией свертки /?(?)= 1, 0 ^.х <?. 1. В
графиграфическом виде функция свертки показана на
рис. 2.59,а. Для того чточтобы получить h (—х), функцию надо
отразить относительно ординаординаты (рис. 2.59,Ь). Отраженное
ядро для получения Л(?
х) перепереносится вправо на величину
? (рис. 2.59, с). Затем, как показано
на
рис. 2.59,е,
ядро свертки и свертываемую функцию
у(х)
(рис. 2.59, d) перемножают для разных значений величины
?. Плосвертку
—
Площадь
под
свертки
что
в
объединенными
с(?),
которая
кривыми
тоже
(функциями) равна значению
изображена на рис. 2.59,с. Заметим,
данном
случае свертка не равна нулю только в диапазоне
0 ^.х ^.2. Таким образом,
определение свертки эквивалентно
1
=
Отражение приводит к
h(-x) =1
Перенос на ? дает
равны нуПоскольку как ядро, так и свертываемая функция у(х)
в
нулю лишь на конечных интервалах, то пределы интегрирования
их определить? Из рис. 2.59 ясно, что
свертке тоже конечны. Как
нижний предел равен максимуму начал интервалов, на которых
не
функции не равны нулю, а верхний предел равен минимуму
этих интервалов. Таким образом,
концов
от-
отражению ядра свертки, его сдвигу, перемножению
двух
функций и
h(?-x)y(x)dx
I h?-x)y(x)dx
^0
=
определению площади, заключенной под объединенными
кривыми.
лй-лЖх)Лг
h(x)
-I
h(-x)
У(х)
Подстановка функций h (?
0
1-10
b
a
сЙ)=
0
у(х)
hd-х) у(х)
/ (№)dx
Jo
.?" 1
h(I-x) y(x)
y(x)hC_x)
°*&
=
2_ 0
7
1
/ A)(х) Л
=
=
2
?-
;B -1)
y(x) hB-x)
где обе функции
параболические (рис. 2.59,е). Если тангенс угла на-
наклона равен т, а не
й
-1
__
(х) дает
X) И
d
г-2
h(-x)
С1
—
1, то результат можно обобщить в виде т ?2/2
(w?/2)B- ?).
Чтобы понять, какая связь существует между сверткой и устра-
устранением ступенчатости (сглаживанием)
метод
модуляции интенсивности,
в
вспомним
эвристический ме-
котором для определения
интен-
Проверка функции свертки
^ 1 значение свертки на правой сторо-
интенсивности используется площадь пиксела.
с(?) показывает, что для а??
стороне пиксела, т. е. при х
%
=
что
находится
128
Гл. 2. Растровая
1, равно площади той части пиксела,
/2 (рис. 2.57, b с
1 значение свертки дает сумму площадей частей
внутри
многоугольника,
т. е.
т
У;
0). Для т >
двух пересекаемых пикселов, расположенных внутри многоугольнимногоугольника (рис.
2.57, b с .у,0). Этот результат легко обобщить на случай
=
Рис. 2.59. Свертка.
=
=
129
2.27. Свертка
и
устранение ступенчатости
Рис.
2.60.
Профильтрованное,
сглаженное
изображение с разре-
шением
256 X
256
'¦-¦
разрешения Ф.
пикселов.
Отсеченные
Нсогссченные
помощью отсечения.
Рис. 2.61. Устранение ступенчатости с
(С
Кроу.)
Стороны области пиксела образуют отсекающее
У; Ф
Таким образом, два предыдущих
0.
модулирования
по
площади и
эквивалентны
модифицированный Брезенхема) эк+
b
и яд-
Операция свертки часто называется фильтрацией, а
ядро свертсвертки
функцией фильтра. В обсуждавшемся выше простом методе
с площадями
изображение предварительно фильтруется. Префильтрация выравнивает атрибуты пикселов
вычисленного разрешения
до вывода изображения на
экране. Метод вычисления изображения
с разрешением,
большим, чем разрешение дисплея, и дальнейшее
усреднение атрибутов нескольких пикселов для
получения пикселов
—
с меньшим разрешением можно
рассматривать как
(рис. 2.54 и 2.55).
Каждый инэтого окна.
алгоритма (эвристический
свертке функций ребер, т. е. прямой у = тх
ядра свертки, вычисленных на правой
стороне пиксела.
щую операцию
окно.
постфильтрую-
Хотя при помощи простого
прямоугольного фильтра или ядра
индивидуальный многоугольник отсекается по сторонам
отношеДля модулирования интенсивности пиксела используется
к
полученного в результате отсечения многоугольника
находится несколько многоплощади пиксела. Если внутри пиксела
либо взвемногоугольников, то используется среднее (либо равномерное,
отношение площади
взвешенное) их атрибутов для модулирования атрибутов
Пример такого отсечения приведен
пиксела.
При-
рис. 2.61.
на
2.28. АППРОКСИМАЦИЯ ПОЛУТОНАМИ
Сглаживание
улучшения
или
визуального разрешения
интенсивности.
это метод
улучше-
с использованием нескольких
уровней
устранение ступенчатости
—
Аппроксимация полутонами, с другой стороны,
—
это метод, в котором
используется минимальное число уровней
интенсивности, обычно
черный и белый, для улучшения визуального
ин-
свертки получают вполне приемлемые
результаты, треугольный и
гауссовский фильтры приводят к еще более
качественным результа-
или уровразрешения, т. е. получения нескольких полутонов серого
[2-30]. Используются также двумерные фильтры. В настоящее
Первоначально он использовался при изготовлении шелковых карХагеном
картин и других текстильных изделий. В 1880 г. Стефаном
результатам
время
исследованы
конечное и
простое
прямоугольное, пирамидальное,
двумерное гауссовское ядра свертки или функции
ко-
фильтра
[2-30
2-34]. На рис. 2.60 показана та же сцена, что и на рис. 2.54
и 2.55, вычисленная с
разрешением 256 х 256
уровней
интенсивности.
была
известен
Метод полутонов
давно.
довольно
изобретена современная полутоновая печать. В этом
методе
—
пикселов, префильт-
рованная
с
простым прямоугольным
разрешением 256 х 256.
фильтром и изображенная с
Простые фильтры в виде свертки не всегда эффективны
для мамаленьких многоугольников с
меньшей
площадью,
площади пиксела
или для длинных, тонких
многоугольников. Тем не менее сглаживасглаживание можно реализовать с
помощью отсечения (см. гл. 3 и
[2-28]).
130
Гл.
2.
можно
получить большое количество
серого, используя
чисто
фотографических полутонов
двухуровневую среду: черную краску на беэто решеточный или клеточный
печать
белой бумаге. Полутоновая
процесс [2-35]. Размер клетки варьируется в зависимости от мелко—
мелкозернистости решетки и длительности экспозиции. Для газетных фоот 50
из-за низкого качества бумаги применяются решетки
фотографий
До
90
точек
на
дюйм.
Бумага
более
высокого
качества,
пред-
предназначенная для книг и журналов, позволяет использовать решетки с
Растровая графика
2.28. Аппроксимация полутонами
о
3
4
>
0
к.
Jk.
л
к.
Jk.
^
¦
^k.
w
J
¦¦ ¦
г
Ь
Рис. 2.62.
к
A J
к
A
С
100 до 300 на дюйм. Успех метода
свойства зрительной
системы человека
интегратором, т. е. объединять или сглаживать
дискретную
полутонов
быть интеграто-
информацию.
Визуальное разрешение машинно-сгенерированных
изображений
можно улучшить с
помощью метода, называемого
конфигурироваконфигурированием.
В противоположность
полутоновой печати, в которой исиспользуются переменные размеры клеток, в данном
методе обычно
размеры клеток фиксированы. Для изображения с
разрешением
несколько пикселов
объединяются
в
Здесь ухудшение пространственного
фиксированным
конфигурации.
разрешения обменивается на
улучшение визуального. На рис. 2.62,а показана
одна из возмож-
возможных групп
конфигураций для двухуровневого черно-белого дисплея.
Для каждой клетки используется четыре пиксела.
организации
получается
пять возможных уровней
При такой орга-
или
тонов
серого
Если
точки
дополнительное
следует проявлять осторожность, так как
иначе могут
возникнуть нежелательные мелкомасштабные
структуструктуры. Например, не следует применять ни
одну из конфигураций,
изображенных на рис. 2.62, b или с, иначе это приведет к
для
большой области с постоянной интенсивностью
изображении появятся
линии.
нежелательные горизонтальные или
Число доступных уровней интенсивности
помощью
увеличения
размера клетки.
на
количество
уровней
на
пиксел
или
A
-V
к.
Jk.
то
можно
интенсивности.
получить
На рис. 2.65
больший размер
клетки
дадут
уровней интенсивности [2-36].
разрешения, что приемлемо в случае, когда разрешение
разрешения дисплея.
изображе-
Разработаны также методы улуч-
визуального разрешения при сохранении пространственного
[2-37]. Простейший из них состоит в применении порогового значе0
тому, что
изображе-
вертикальные ли-
можно увеличить с
Конфигурации для клетки
конфигураций не обязательно долдолжны быть
квадратными; на рис. 2.64 изображена клетка 3x2 пикпикселов, дающая семь @—6) уровней интенсивности.
Гл. 2. Растровая
к.
Г
Использование конфигураций ведет к потере пространственного
3x3 пикселов приведены на рис. 2.63. Они
дают десять уровней (с
0 по 9) интенсивности. Клетки
132
^
быть разного размера,
соответствующее увеличение числа
улучшения
выборе конфигураций
л
конфигурации 3x3.
могут
Большее количество бит
интенсивностей на единицу
При
-уг
A
Подобная клетка размера 3 х 3 с точками двух размеров позволяет
иметь 27 уровней интенсивности. Если на пиксел приходится больбольше одного бита, то также можно получить дополнительные уровни
интенсивности. Для конфигурации 2 х 2 с 2 битами на пиксел пополучится 13 уровней интенсивности, показанные на рис. 2.66. Боль-
изображения меньше
числа пикселов в клетке.
к.
г
J
A
Jk.
представлены конфигурации для клетки 2x2 пиксела с двумя разразмерами точек. В результате получается 9 уровней интенсивности.
@—4). В общем случае для двухуровнего дисплея число возможных
больше
Jl
Ik
рис. 2.63. Двухуровневые
зависит от
Jk.
J
A
Двухуровневые конфигурации 2x2.
количеством точек от
к.
к
JL
Ik.
Рис. 2.64. Двухуровневые конфигурации 3x2.
графика
**•*
2.28. .Аппроксимация полутонами
ik.
Jk.
J
J
Г
ik.
ЧГ
^k
1Г
j
^
к
Jk.
JL
J
>.
2
о
4
••
••
••
Рис. 2.65.
Л
ния
Конфигурации 2 x
2 с точками несколь-
нескольких размеров.
для каждого пиксела.
Если интенсивность изображения превы-
превышает некоторую пороговую величину, то пиксел считается
в
противном случае
он
^1ь л*"'
белым,
черный:
if I(x, у) > Т then Белый else Черный,
где/& у) означает интенсивность пиксела (*, у) изображения. БеБелый соответствует максимальной интенсивности для дисплея, а
минимальной. Пороговую величину обычно устанавливачерный
—
приблизительно равной половине максимальной интенсивности.
На рис. 2.67, b представлен результат для фотографии, изображенизображенной на рис. 2.67, а, со значением Т
150. В точках исходной фотофотографии, соответствующих каждому пикселу, интенсивность была
разбита на дискретные значения в диапазоне от 0 до 255, т. е. исиспользовалось 8 бит. Как показано нп рис. 2.67,Ь, при простом поустанавливают
=
пороговом методе наблюдается потеря большого количества
мелких
деталей. Особенно это заметно для волос и черт лица. Мелкие де-
1
4
1
!
^
1
1
с
i
t
2
1
2
2
т
2
2
1
1
2
1
2
1
2
2
1
!
1
1 1
2
1 2
1
3
3
3
3
3
2
з
I-O
3
3
Рис.
2
134
1-
\si
*
v
1 0
3
1
'
)
1
2
"•*¦'
Гл. 2. Рчсгроная
2.66. Конфигурации
при двух битах на пиксел.
2x2
Рис. 2.67. Методы двухуровневого вывода изображений: (а) исходная фотография,
(Ь) простой пороговый метод, (с) упорядоченное возбуждение с матрицей 8x8.
(С разрешения Дж. Ф. Джарвис, Bell Ladoratories.)
•<¦
1, у
Интенсив
1(\,у)
пость
-
1)
=
I(x + 1, у
1) + Ошибка/4
-
next х
~
текущего
next у
8
пиксела
1
finish
\
1
\
3
8
дета-
Распределение ошибки на соседние пикселы улучшает вид
заключенная в изображедеталей изображения, так как информация,
1
4
Рис.
2.68.
Флойла
—
Распредечеиие
СтеЙнберга.
ошибки
в
алгоритме
изображении, не теряется.
Существует другой
тали
теряются из-за относительно больших ошибок выводимой ин-
—
В
методе, разработанном Флойдом и
ошибка распределяется на окружающие
Стейнбергом [2-38], эта
пикселы.
Распределение
ошибки происходит всегда вниз и вправо. Следовательно, при генерагенерации изображения в порядке сканирования возвращаться обратно не
нужно. В частности, в алгоритме Флойда—СтеЙнберга У& ошибки расраспределяется вправо, 3/«
—
вниз и
"А
—
по
диагонали,
как это пока-
рис. 2.68.
Для порога, равного среднему между минимальной
максимальной интенсивностями, Т
(Белый + Черный)/2, алгоалгоритм формулируется следующим образом:
показано на
и
=
случайная
—
Стейнберга
разрешения
метод возбуждения. В изображение вводится случайпиксела
величиной. Добавление сосравнения с выбранной пороговой
не приводит к оптимальному ресовершенно произвольной ошибки
до ее
результату. Тем не менее существует
оптимальная аддитивная матрина изо-
ошибки, минимизирующая эффекты появления фактуры
к изображению таизображении [2-39]. Матрица ошибки добавляется
клетки на шахматной доске.
таким же способом, как расположены
матрица
упорядоченным возбуждением. Миниимеет размер 2x2.
Минимальная матрица упорядоченного возбуждения
Данный
метод
называется
2 х 2-матрица,
которую
[2-40], имеет вид
первым
Лим
предложил
п
=
[ОД
Xmin, Xmax, Ymin, Ymax
пределы растра
Т
(Черный + Белый)/2
for у
Ymax to Ymin step -1
для каждого пиксела на строке (слева направо)
for х
Xmin to Xmax
визуального
ошибка, которая добавляется к интенсивности каждого
Оптимальная
Алгоритм распределения ошибки Флойда
улучшения
без уменьшения пространственного
для двухуровневых дисплеев
разрешения
интенсивности для каждого пиксела.
метод
—
Го
2
13
1
=
Матрицы 4x4, 8 х 8
=
мощью
больших размеров получают
и
рекуррентных соотношений
[2-371
=
определяем выводимое значение пиксела для пороговой
величины Т и вычисляем ошибку
Пиксел (х,
Ошибка
=
4D,,,2
где п
if I(x, у) < Т then
>
4D;l/2
—
размер матрицы
4
Uni2
и
1
у)
Черный
1(х, у)
Черный
=
1
—
1
else
Пиксел (х, у)
Ошибка =
Белый
=
1(х, у)
-
Белый
end if
Li
Например, матрица возбуждения размера 4x4 имеет вид
изображаем пиксел
Display Пиксел (х, у)
распределяем ошибку на соседние пикселы
1(х
+
1(х, у
136
1, у)
=
1)
=
-
1(х 4- 1, у) + 3* Ошибка/8
1(х, у
1) + 3* Ошибка/8
Гл. 2. Растровая графика
8
2
10
12
4
14
6
3
11
1
9
15
7
13
5.
-
137
2.28.
Аппроксимация полутонами
с
по-
Как показывают два этих
можно
не
породить п
2
примера, из матрицы возбуждения/),,
интенсивностей. С увеличением п
теряет пространственного разрешения.
2.29. ЛИТЕРАТУРА
изображение
Приведем алгоритм упо-
упорядоченного возбуждения.
Control of a
2-1 Bresenham, J.E., "Algorithm for Computer
System Journal, Vol. 4, pp. 25-30, 1965.
2-2 Pitteway, M.L.V., "Algorithm for Drawing Ellipses
Алгоритм упорядоченного возбуждения
—
—
for у
второй
Ymax to Ymin step -1
для каждого пиксела на строке (слева
направо)
=
for х
=
Xmin to Xmax
j
(у Mod n) + 1
определяем выводимое значение пиксела
=
if I(x, у) < D(i, j) then
=
Черный
Пиксел (x, у)
=
Белый
else
end if
1052-1060, 1973.
for the Generation of Nonpara2-4 Belser, K., Comment on "An Improved Algorithm
Nonparametric Curves/1 IEEE Trans. Comput., Vol. C-25. p. 103, 1976.
Trans. Comput.. Vol. C-25, pp. 1032-5 Ramot, J., "Nonparametric Curves," IEEE
104, 1976.
and
2-6 Horn, B.K.P., "Circle Generators for Display Devices," Computer Graphics
2-11 Standish, Thomas A., Data Structures
Company, Reading, Mass., 1980.
изображаем пиксел
Techniques, Addison-Wesley Publishing
of Computer Programming, Vol. 3, Sorting and
Searching, Addison-Wesley Publishing Company, Reading, Mass. 1973.
2-13 Laws. B.A.. "A Gray-Scale Graphic Processor Using Run-Length Encoding," Proc.
IEEE Conf. Comput. Graphics, Pattern Recognition. Data Struct., pp. 7-10. May
2-12 Knuth, Donald, E., The Art
Display Пиксел (х, у)
next
B.D., "An Improved Algorithm for
2-3 Jordon, B.W., Jr., Lcnnon, W.J., and Holm,
Vol. C-22, pp.
the Generation of Nonparametric Curves," IEEE Trans. Comput.,
1976.
Image Processing, Vol. 5, pp. 280-288,
2-7 Badler, N.I., "Disk Generator for a Raster Display Device." Computer Graphics
and Image Processing, Vol. 6., pp. 589-593. 1977.
and Disks."
2-8 Doros, M., "Algorithms for Generation of Discrete Circles, Rings,
Computer Graphics and Image Processing, Vol. 10, pp. 366-371, 1979.
for the
2-9 Suenaga, Y., Kamae, Т., and Kobayashi, Т., "A High-speed Algorithm
CGeneration of Straight I incs and Circular Arcs," IEEE Trans. Comput., Vol.
28, pp. 728-736, 1979.
2-10 Bresenham, J., "A Linear Algorithm for Incremental Digital Display of Circular
Arcs," CACM, Vol. 20, pp. 100-106, 1977.
определяем позицию в матрице возбуждения
i = (x Mod n) + 1
Пиксел (х, у)
Hyperbolas with a Digital
Plotter," Computer Journal, Vol. 10, pp. 282-289, 1967.
Xmin, Xmax, Ymin, Ymax
пределы растра
Mod
функция, возвращающая остаток от целого деления перпервого аргумента на
or
Digital Plotter." IBM
х
next у
finish
1975.
2-14 Hartke. David H., Sterling, Warren M., and Shemcr. Jack E.. "Design of a Raster
На рис. 2.67, с показано изображение,
полученное из фотографии
на
рис. 2.67, а в результате обработки ее с матрицей
упорядоченного
возбуждения размера 8x8. При использовании матрицы тако-
такого
размера
эффективно
Рис. 2.67, с свидетельствует
мелких деталей.
вводится
о
том,
64
что
уровня
упорядоченноинтенсивности.
восстанавливается
много
Алгоритм Флойда—Стейнберга и упорядоченное воз-
возбуждение можно применять к цветным изображениям [2-41]. КонфиКонфигурационные методы тоже можно использовать с цветом
[2-42].
Display Processor for Office Applications." IEEE Trans. Comput., Vol. C-27. pp.
337-348, 1978.
2-15 Jordan. B.W., and Barrett. R.C.,"A Cell Organized Raster Display for Line Draw-
Drawings." CACM. Vol.
17, pp. 70-77, 1974.
2-16 Barrett, R.C., and Jordan. B.W., "Scan Conversion Algorithms for a Cell OrganOrganized Raster Display," CACM, Vol. 17, pp. 157-163, 1974.
2-17 Willctt. Ken. "The 4027—Adding a Color Dimension to Graphics," Tekscope, Vol.
10, pp. 3-6.
2-18 Negroponte. N., "Raster Scan Approaches to Computer Graphics." Computers &
Graphics. Vol. 2. pp. 179-193. 1977.
2-19 Baecker, Ronald, "Digital Video Display Systems and Dynamic Graphics." ComComputer Graphics, Vol. 13. pp. 48-56. 1979 {Proc. SIGGRAPH 79).
2-20 McCracken. Т.Е.. Sherman. B.W., and Dwycr, S.J.. III. "An Economical Tonal
Display for Interactive Graphics and Image Analysis Data." Computers & Graphics,
Vol. I. pp. 79-94, 1975.
.38
.1
гоафикп
2.29. Литература
2-21 Whittcd, Turner. "A Software Test-Bed for the Development of 3-D Raster Graph-
Graphics Systems." Computer Graphics, Vol. 15. pp. 271-277, 1981
ЛИТЕРАТУРА НА РУССКОМ ЯЗЫКЕ
(Proc. SIGGRAPH
81).'
2-12
2-22 Ackland. Bryan, and Weste. Neil. "Real Time Animation on a Frame Store Display
Svstcm," Computer Graphics, Vol. 14. pp. 182-188. 1980 {Proc. SIGGRAPH 80).
2-23 Dunlavcy. Michael R., "Efficient Polygon-Filling Algorithms for Raster Displays,"
ACM Trans, on Graphics, Vol. 2, pp. 264-273, 1983.
2-24 Ackland, Bryan, and Wcste. Neil, "The Edge Flag Algorithm—A Fill Method for
Raster Scan Displays." IEEE Trans. Comput., Vol. C-30, pp. 41^*8, 1981.
2-25 Smith, Alvy Ray. "Tint Fill," Computer Graphics, Vol. 13, pp. 276-283, 1979
(Proc. SIGGRAPH 79).
2-26 Shani, Uri, "Filling Regions in Binary Raster Images: A Graph-Theoretic ApApproach," Computer Graphics, Vol. 14, pp. 321-327, 1980 (Proc. SIGGRAPH
80).
2-27 Pavlidis. Theo, "Algorithms for Graphics and Image Processing/9 Computer Science
Press. Rockvillc, Md. 1982.
2-28 Crow. Franklin C, "A Comparison of Antialiasing Techniques," IEEE CG <& A,
l,pp. 40-47, 1981.
2-29 Pitteway,
M.L.V., and Watkinson. D.J., "Bresenham's Algorithm with
Gray Scale." CACM, Vol. 23, pp. 625-626. 1980.
2-30 Brighdm, F. Oran. The Fast Fourier Transform, Prentice-Hall, Englewood Cliffs,
Vol.
1974.
2-31 Crow, Franklin C, "The Aliasing Problem in Computer-Generated Shaded Ima-
Images," CACM, Vol. 20, pp. 799-805. 1977.
2-32 Feibush, Eliot A., Lcvoy, Marc, and Cook, Robert L., "Synthetic Texturing Using
Digital Filters," Computer Graphics. Vol. 14. pp. 294-301, 1980 (Proc. SIGSIGGRAPH 80).
2-33 Warnock, John. "The Display of Characters Using Gray Level Sample Arrays,"
Computer Graphics, Vol. 14, pp. 302-307, 1980 (Proc. SIGGRAPH 80).
2-34 Gupta, Satish, and Sproull, Robert F.. "Filtering Edges for Gray-Scale Displays,"
Computer Graphics, Vol. 15, pp. 1-6, 1981 (Proc. SIGGRAPH 81).
2-35 Halftone Methods for the Graphic Arts (Q3), 3d ed.. Eastman Kodak, Rochester.
N.Y. 1982.
2-36 Pirsch, P. and Netravali, A.N., "Transmission of Gray I.cvcl Images by Multilevel
Dither Techniques," Computers & Graphics, Vol. 7, pp. 31-44, 1983.
2-37 Jarvis. J.F., Judice, C.N., and Ninke, W.H., "A Survey of Techniques for the
Display of Continuous Tone Pictures on Bilevel Displays," Computer Graphics and
Image Processing, Vol. 5, pp. 13-40. 1976.
2-38 Floyd, R.. and Steinberg, L., "An Adaptive Algorithm for Spatial Gray Scale, SID
1975," Int. Symp. Dig. Tech., Pap., pp. 36-37, 1975.
2-39 Bayer, B.E., "An Optimum Method For Two-I evel Rendition of Continuous-Tone
Pictures," Int. Conf. Commun., Conf. Rec, pp. B6-11)-B6-15), 1973.
2-40 Limb, J.O., "Design of Dither Waveforms for Quantized Visual Signals," Bell
System Technical Journal, VoL 48, pp. 2555-2582. 1969.
2-41 Heckbcrt, Paul, "Color Image Quantization For Frame Buffer Display," Computer
Graphics, Vol. 16, pp. 297-307, 1982, (Proc. SIGGRAPH 82).
2-42 Kubo, Sachio. "Continuous Color Presentation Using a Low-Cost Ink Jet Printer."
Proc. Comput. Graphics Tokyo 84, 24-27 April, 1984, Tokyo, Japan.
140
Гл. 2. Растровая графика
Т.З. Сортировка
Кнут Д. Искусство программирования лля ЭВМ.
М.: Мир, 1978
иск,
и
по-
_
2-27
Павлидис Т. Алгоритмы машинной
М.: Радио и связь, 1986.
графики и обработки изображений.
оказываются недостаточно быстродействующими для приложений,
в реальном времени.
ориентированных на процессы, протекающие
Поэтому как трех-, так и двумерные алгоритмы отсечения реализуили микропрограммными средствами. В пореализуются аппаратными
Отсечение
подобных реализациях обычно ограничиваются дву- или трехмернытрехмерными отсекателями типовых форм. Однако с появлением сверхбольших
интегральных схем (СБИС) открываются возможности для более
общих реализаций, позволяющих работать в реальном времени [3-1]
как с
регулярными,
На рис. 3.1
что
показано,
ступенчатости,
отсечение
помимо своего
информации,
используется
и
для
устранения ступенчато-
более привычного применения для отбора той
которая
необходима
для
конкретной
сцены или вида, как части более обширной обстановки. В следую-
будет показано, что отсечение применяется в алгорит-
следующих главах
алгоритмах удаления невидимых линий и
теней,
а
также
поверхностей, при построении те-
формировании фактуры. Алгоритмы и понятия,
при
рассматриваемые здесь,
совершенных
визуализации
можно
применить для создания более
со-
алгоритмов, которые отсекают многогранники другими
многогранниками, хотя эта задача и выходит за рамки данной кникниги.
Такие алгоритмы можно использовать для реализации булевых
операций, которые нужны в простых системах геометрического момоделирования, например при вычислении пересечений и объединений
простых тел, ограниченных плоскостями или поверхностями второвторого
порядка.
годятся во
Получающиеся
многих
при этом
приближенные решения
и
с
нерегуаярными областями
и
телами.
ДВУМЕРНОЕ ОТСЕЧЕНИЕ
3.1.
Отсечение, т. е. процесс выделения некоторой части базы данных,
играет важную роль в задачах машинной графики. В гл. 2 было по-
так
регулярной
формы. Окно задается левым (Л), правым (П), верхним (В) и нижнижним (Н) двумерными ребрами. Регулярным отсекающим окном явпоказана плоская сцена и отсекающее окно
является прямоугольник,
координат
стороны которого параллельны осям коор-
объектного пространства или осям координат экрана. Целью
алгоритма
или их
отсечения
является
определение
тех
точек,
отрезков
частей, которые лежат внутри отсекающего окна. Эти точ-
отрезки или их части остаются для визуализации. А все осталь-
точки,
отбрасывается.
Поскольку в обычных сценах или картинках необходимо отсеотсекать большое число отрезков или точек, то эффективность алго-
остальное
представляет особый интерес. Во многих случаях
большинство точек или отрезков лежит целиком
алгоритмов отсечения
подавляющее
Поэтому важно уметь быстро
отбирать отрезки, подобные ab, или точки, подобные р> и отбравне отсекающего
внутри
или
отбрасывать
отрезки, подобные /у,
окна.
или точки,
подобные q на рис. 3.1.
Точки, лежащие внутри отсекающего окна, удовлетворяют услоусловию:
хп ^ х ^ хп и уи ^ у ^ ув. Знак равенства здесь показывает,
го-
приложениях.
Алгоритмы отсечения бывают дву- или трехмерными и примеприменяются как к
регулярным1*, так и к нерегулярным областям и объе-
объемам.
Эти алгоритмы
программно.
Алгоритмы отсечения, реализованные программно,
'' Имеются в
ним
осям
можно реализовать
виду канонические
аппаратно
или
програм-
(стандартные) области и объемы. В частности, к
относятся
прямоугольники и параллелепипеды со сторонами, параллельными
координат. В литературе такие объекты называют также изотетичнымн.—
Правая
Прим. ред.
'-*•?
Гл. 3. Отсечение
3.1. Двумерное
отсечение
*
Рис. 3.1. Двумерное
J
окно.
отсекаюшее
что
точки,
внутри
на
лежащие
границе
Отрезок лежи г внутри
если
видимым,
отрезок ab
обе
его
окна
концевые
отрезок
например отрезок gh
на
не
и,
считаются
следовательно,
точки
рис. 3.1. Однако
на
то этот
окна,
окна,
находящимися
лежат
если
оба
является
внутри окна, например
конца
отрезка
лежат вне
обязательно лежит целиком вне окна, на-
рис. 3.1. Если
же
оба
рис.
устранит
отрезка ghy который видим частично, ни отрезка к/, который це-
целиком невидим.
Пусть
алгоритм,
а и
Ь
концы отрезка, тогда можно предложить алго-
отрезков:
—
переход к следующему отрезку
х и у левого,
Здесь через дгл, хп, ув, ун обозначены координаты
верхнего и нижнего краев окна соответственно. Порядок
правого,
проведения сравнений при определении видимости
или невидимости
несуществен. Для некоторых отрезков может понадобиться провепроведение
всех
четырех сравнений, прежде
чем
определится
их
полная
видимость или невидимость. Для других отрезков может потребопотребоваться только одно сравнение.
выявляется раньше
—
Несущественно также, что выявля-
полностью видимые или полностью невидимые от-
отрезки. Однако, поскольку определение пересечения отрезка
требует большого объема вычислений, его следует проводить в попоследнюю
очередь.
Приведенные выше тесты полной видимости или невидимости
Коэна и
отрезков можно формализовать, используя метод Д.
простой алгоритм
a, b
3
с окном
—
определяющий все полностью видимые и большинство неви-
невидимых
отрезок невидим
види-
конца отрезка лежат
выше
или
ниже
справа, слева,
окна, то этот отрезок целиком лележит вне окна, а значит, невидим.
Проверка последнего условия уствсе
помеченные
устранит
отрезки,
3.1. Но она не
// на
ни
2
него.
определения видимости
концевые точки отрезка
в
А. Сазерленда. В этом методе для определения той из девяти обла-
координатном пространстве
(х, у)
для каждого отрезка проверить полную видимость
отрезка
если одна из координат
какого-нибудь конца отрезка нахо-
областей, которой принадлежит
(битовый) код. Коды этих областей показаны на рис. 3.2.
Крайний правый бит кода считается первым. В соответствующий
четырехразрядный
бит заносится 1 при выполнении следующих условий:
находится вне окна, то отрезок не является полностью видивидимым
для первого
бита
для второго
бита
if
для третьего бита
для четвертого бита
—
—
—
ха < хл or ха > хп then 1
if xb < хп or
xb > xn then 1
if ya < yH or ya >
yB then 1
if
yb < yH or yb > yB then 1
если точка левее окна
если точка
правее окна
если точка ниже окна
—
В противном случае в бит
если точка выше окна
заносится нуль.
следует, что если коды обоих концов
отрезок полностью видимый
ребра, вводится четырехразряд-
конец
точки лежат внутри окна, и
Отсюда, очевидно, сле-
ребра равны нулю, то обе эти
отрезок видимый. Коды концевых то-
визуализировать отрезок
go to 3
проверить полную невидимость отрезка
если
оба конца отрезка лежат слева, справа,
от окна,
1
if
то
1001
сверху или снизу
1010
1000
В
Окно
факт невидимости отрезка тривиален
xa < хл and xb < хл then 2
0001
0000
00 10
0 10 1
0 1 00
01 10
if
xa > хп and xb < хп then 2
if yd > yB and
yb > yB then 2
if Уа < Ун and
Уь < Ун then 2
отрезок частично видим
или
н
пересекает продолжение диаго-
диагонали, оставаясь невидимым
определить пересечения отрезка с окном
144
Гл. 3. Отсечение
Рис.
п
л
.
|
..
е
.
3.2.
Колы
принадлежат
областей,
концевые точки.
которым
чек
можно
использовать также и
полностью невидимых отрезков.
для тривиального
отбрасывания
Рассмотрим таблицу истинности,
эквивалентную логическому оператору «и»:
только отрезки, которые, возможно, частично
резков, передаются
которых результат логического умножения
кодов их концевых точек равен нулю. Конечно же, эта подпрограм-
видимы,
т. е.
те,
для
подпрограмма должна правильно определять переданные ей такие целиком
Истина и Ложь
Ложь
Ложь и Истина
Ложь
Ложь и Ложь
Ложь
Истина и Истина
Ложь
Истина
О
О
невидимые отрезки.
Ои 1
О
ОиО
О
Пересечение двух отрезков можно искать как параметрическим,
так и непараметрическим способами. Очевидно, что уравнение бес-
1
1
1
=
и
О
Истина = 1
и
1
бесконечной прямой, проходящей через точки /*,(*,, Ух) п Р2(х21 у2),
вид у
т{х
т{х
имеет
х,) 4- у{ или у
х2) + у2> где
=
Если побитовое логическое
произведение кодов концевых точек
т
от-
отрезка не равно нулю, то отрезок полностью
невидим и его можно
отбросить
тривиально.
табл. 3.1,
помогут
табл. 3.1 видно,
равен нулю, то
Несколько
прояснить
что если
примеров,
высказанные
приведенных
произведение равно
нулю,
то
отрезок может
оказаться целиком или частично
видимым или даже целиком
невидимым.
для
хх)
—
данной прямой. Точки пе-
это наклон
—
координаты:
с левой:
правой:
с верхней:
с
ра-
невиди-
нижней:
с
ока-
Поэтому
определения полной видимости необходимо
проверять значения кодов обоих концов отрезка по отдельности.
Проверку значений кодов концов отрезка можно легко
Л"л, у
хи, у
ув, х
=
х
=
уИ,
В примере 3.1
отбросить
т( хл
х{) 4 ух
т(хп
лг,) 4- у}
у{)
х, 4 A/т)(уъ
у{)
х, 4 (\/т)(ун
—
—
—
—
=
—
показано,
как этот
т
Ф
оо
т
Ф
оо
т
Ф 0
т
Ф 0
простой метод позволяет отбро-
некорректные пересечения путем простого сравнения коорди-
координат точек
пересечения
с
окна.
координатами сторон
реализо-
реализовать, если воспользоваться
битами.
У\)/(х0
—
—
пересечения этой прямой со сторонами окна имеют следующие коор-
Из
не
(у2
=
-
в
утверждения.
результат логического умножения
=
фактически отрезок будет целиком невидим. Однако
если логическое
подпрограммами, оперирующими с биОднако в алгоритмах, которые
рассматриваются ниже, такие
подпрограммы не используются.
Если прежде всего найдены
целиком видимые и тривиально неневидимые отрезки, то
подпрограмме, вычисляющей пересечение от-
Пример 3.1. Простое двумерное отсечение
Рассмотрим отсекающее окно и отрезки, изображенные на рис. 3.J.
Наклон
m
=
0'2
-„v
Р л
от
отрезка
l)/(x2 -л-,)
=
C/2
—
-
3/2,
1/6)
1/6) / [1/2
-
3/2)
Рг A/2.
до
(- 3/2)]
=
2/3.
=
1/2
1-го
со сторонами окна таковы:
Таблица 3.1. Коды концов отрезков
с левой: v
с
Отрезок
(рис. 3.1)
Коды концов Результаты
(рис. 3.2)
логического
146
0000 0000
0000
U
U
U
U
ccl
Целиком видим
0010 ОНО
0010
Целиком невидим
1001 1000
0101 0001
1000
0001
0100 0100
0100
0000 0010
0000
0001 0000
0001 1000
0000
0000
1000 0010
0000
Гл. 3. Отсо
,
правой: .V
-1
=1
у
=
у
=
B/3){- 1
B/3) [1
-
-
(- 3/2)] 4-
1/6
(- 3/2)] +1/6=116
Примечания
ab
gfi
kl
=
(последнее число больше, чем \ в, и поэтому отвергается)
умножения
е/
не-
с
верхней: у
=
с
нижней:у
=
1
-
1
v
=
-
д:
=
-
3/2+ C/2)[1
-
3/2 + C/2)(- 1
1/6]
-
=
-
A/6)]
1/4
=
(последнее число меньше, чем л- п, и поэтом} отвергается)
Аналогично, отрезок от/э3(- 3/2,
-
1) доР^З/2, 2) имеет
Частично видим
т
=
=
Х2-Х]
Целиком невидим
3.1.
"Хвумерное
отсечение
3/2-(-3/2)
1
-
13/4
пересечения
точек
Вычисление колов концевых
Установка флага видимости
О
Флаг
—
Инициализация наклона
Большое число
m
—
О?
Коды обоих концов
видим
Отрезок цеаиком
=
Рис. 3.3. Двумерное параметпараметрическое отсечение
Логическое произведение
кодов концов =? О?
Отрезок тривиально невидим
к пересечения:
с левой: х
с
=
правой: *
=
-\
у
=
1
у
=
A)[- 1
A)[1
с верхней:>
с
=
нижней:у
(последнее
=-
число
Чтобы
отсечения,
1
1
х
=
-
х
=
-
больше,
и
1/2
—
I
поэтому отвергается)
3/2 +
(J)[l
-
3/2 + A)[- 1
чем
-
—
(- 3/2)] + (-])= 3/2
-
(последнее число больше, чем>'в,
(- 3/2)] +(-])=
-
] Флаг
л*л,
и
(-1)]
-
поэтому
=
= О?
Код первого конца
1/2
Этот конец внутри окна
(- I))
=
-
3/2
отвергается).
= О?
Код второго конца
окна
конец
внутри
Этот
разработать схему эффективного алгоритма отсече-
необходимо сначала рассмотреть несколько частных случаев.
Напомним, что, как уже указывалось, если наклон бесконечен, то
отрезок параллелен левой
правой сторонам окна и надо искать
его пересечения только с верхней и нижней сторонами. Аналогично,
если наклон равен
нулю,
и
то отрезок
параллелен
верхней и нижней
сторонам окна, а искать его пересечения надо только с левой и праправой сторонами.
Наконец, если код одного из концов отрезка равен
то этот конец лежит
нулю,
внутри окна,
пересечь только одну сторону
окна.
и
поэтому отрезок может
На рис. 3.4 приводится блок-
Ниже следует запись этого алгоритма на
псевдокоде.
Простой алгоритм двумерного отсечения
Р,, Р2
Рр Р^
148
Вычерчивание отрезка Р,Р:
алгоритма, использующего приведенные выше соображения.
схема
—
—
Гл.
Рис. 3.4. Блок-схема ачгоритма простою двумерного отсечения.
концевые точки отрезка
концевые точки видимой части отрезка
3.
Отсечение
.1.
1вумерное
отсечение
координаты левой, правой, верхней и нижней сто-
—
х
.
л'п> -^в» -Ун
сторон
да
¦*
(Е
Флаг
окна
равный: О, видимость;
признак видимости,
—
—
1, невиди-
невидимость
кодов концевых точек
вычисление
да
занесение этих кодов
размерностью 1 х 4 каждый
нет
для первого конца:
в
-*—о»
ла
"(О)
Т2код, размерно-
и
Р,
хл then Т1кодD)
\\хх
if v, > xu then Т1кодC)
\\vl < уИ then Т1кодB)
if v, > ^в then Т1кодA)
<
ла
два массива Т1код
=
=
1 else
Т1кодD)
1 else Т1кодC)
1 else Т1кодB)
1 else Т1кодA)
=
=
О
0
=
О
=
О
=
О
=
=
О
=
=
О
=
О
=
=
.
для второго конца: Р2
if х2 < хл then Т2кодD) = 1 else Т2кодD)
1 else Т2кодC)
if х2 > хП then Т2кодC)
1 else Т2кодB)
if у2 < ун then Т2кодB)
нет
Рч-.х
\1у2 > ув then Т2кодA)
=
1 else Т2кодA)
инициализация признака видимости и видимых концевых точек
инициализация т очень большим числом, имитирующим бескобесконечный наклон
Флаг
=
О
2
m
=
Большое
число
проверка полной видимости отрезка
О
Сумма 1
=
Сумма2
for i
=
О
=
1 to 4
Сумма!
=
Сумма2
=
Сумма1 + Т1код@
Сумма2 + Т2код@
next i
if
Сумма!
=
0 and
Сумма2
=
0 then 7
отрезок не является полностью видимым
проверка случая тривиальной невидимости
вычисление логического произведения (Произвед) кодов концеконцевых точек
Произвед
Рис. 3.4. Продвижение
for i
=
отрезка
=
О
I to 4
Произвед
Произвед + Целая часть ((Т1код@ + Т2кодA))/2)
=
if Произвед
Флаг
=
Го
3. Отсечение
151
-"•1- flDVMep
<
—
> 0
then
1
отсечение
go to 7
end if
next i
if у < ун then 4
обнаружено корректное пересечение
отрезок может быть частично видимым
р;
=
р
р,
р2
=
до to 1
с верхним краем
проверка пересечения
1
=
проверка горизонтальности
if m = 0 then I
4
#
end if
=
р;
р
=
=
2
р2
р,
О
if Номер
<
Номер
Номер -f
if Номер
Р
>
> 0
then
Р/1омср
=
Р
=
у
х
=
с нижним
краем
then ошибка
A/m) * (ун
-
Ру) + Рх
if х < хл then 6
обнаружено корректное пересечение
у
до to 1
с левым
краем
-
х,)
(у2
-
у,)/(х2
-
х,)
if хл
<
л
=
=
2 then 7
проверка вертикальности отрезка
=
if
0 then 4
m
Ру
х
1
Номер
проверка пересечения
(х2
=
if х > хп then 6
Р
=
Рх
if ун < Р
5
инициализация номера конца отрезка
=
Pv) + Рх
проверка пересечения
внутри окна нет концов отрезка
Номер
-
Ув
до to 1
до to 2
end if
=
A/m) * (ув
if x < хл then 5
if x > хи then 5
обнаружено корректное пересечение
проверка попадания второй точки внутрь окна
if
0 then
Сумма2
=
=
х
отрезка
Ру then 5
if Ув >
go to 2
Номер
У
Рх= ХП
проверка попадания первой точки внутрь окна
if
Сумма! = 0 then
Номер
=
Ру
Рх then 3
m *
(хл
Рх) + Ру
-
if у > ув then 3
отрезок невидим
1
Флаг =
-
завершение работы и
1 then 8
if Флаг =
вызов
процедуры черчения
-
Draw
P;P^
перейти к обработке следующего отрезка
8 finish
if у < ун then 3
обнаружено корректное пересечение
Рх
3
=
—
г,
до to 1
Алгоритм, описанный в предыдущем разделе,
проверка пересечения с правым краем
if хп
> Рч then 4
п
который предложили Коэн
у
=
И У
152
*
КОЭНА,
3.2. АЛГОРИТМ ОТСЕЧЕНИЯ САЗЕРЛЕНДА
ОСНОВАННЫЙ НА РАЗБИЕНИИ ОТРЕЗКА
Ув
Гл. 3. Отсечение
и
аналогичен тому, ко-
Сазерленд. В предыдущем алгоритме
из сторон окна,
отрезок отсекался поочередно каждой
а для
полу-
внутренполученных точек пересечения проверялась их принадлежность
Эта процедура
внутренней области окна, т. е. корректность пересечения.
..
>рлендя—Коэна
применялась сначала к
затем к
отрезку РХР2 и получался
отрезок Р{Р2, а заотрезку Р[Р2 и получался
результирующий отрезок
Р[Р{-
В алгоритме
Сазерленда
—
Коэна отрезок тоже
разбивается
сторонами окна. Отличие состоит в
том, что здесь не
производится
проверки попадания точки
пересечения внутрь
окна, вместо этого
каждая из пары
получающихся частей
отрезка сохраняется или ототбрасывается в
результате анализа кодов
ее
концевых точек. Рас3.3
рис.
Р1Р2
сразу же демонстрирует
трудпростой идеи. Если
Рх Р2 разбивается левой
стороной окна, то получаются
два новых
отрезка, РХР[ и
КоКоды
Рассмотрение отрезка
трудность реализации этой
"а
концевых точек каждого
из этих
могут быть частично видимы.
нельзя
к
отрезков таковы, что оба они
Следовательно, ни один из них нель-
отвергнуть как невидимый или
алгоритму Сазерленда
Р[Р2.
оставить
как
видимый.
Ключом
Коэна является
—
информация о том, что
одна из концевых точек
отрезка лежит вне окна.
отрезок, который заключен
Поэтому тот от-
между этой точкой и точкой
понятиях алгоритм
следующим
образом:
Для каждого отрезка
полностью
Коэна формулируется
Рх вне окна, то продолжить
Л, и Ру местами.
Этот алгоритм
видимым,
полностью
тривиально отвергнут как не-
с
Отрезок пересекается
и
^1000) соот-
тривиально
ни
нижней стороной окна. Перейти к верхней стороне.
с
верхней стороной окна. Я(
—
не снаружи
окна. Поменяв Pj и
по пучим новый отрезок от
—
Теперь коды кониевых точек Я, и Я, равны @000)
и
@000) е< ответственно. Отрезок
полностью видим.
Процедура завершена.
Начертить отрезок.
на
алгоритма
этого
псевдокоде
приводится
алгоритме неоднократно используются одни
в
то введены
операции,
Окно
—
1
массив
—
Коэна
(хп, хп, ун, ув)
концевые
—
точки
отрезка
с
координатами (Р,х, Р,у)
—
массивы 1
х
инициализация Флаг
1
Флаг
=
Рассмотрим вновь отсечение отрезка
концевых точек
Сазерленда
—
проверка вертикальности
Коэна
Р, Р2 окном, показанным на рис. 3.3. Колы
P,(-J2, 'в) и P2(Vi, Уг) равны @001) и A000)
отрезок не является ни полностью
соответственно
Отрезок пересекает левую
видимым, ни тривиально невидимым.
сторону окна.
Пересечение с левой стороной (л
Замена
Р, на Р1 дает новый отрезок от
Колы кониевых точек
не явчяется
154
-
-
Р,
—
I) окна происходит в точке
Р,(- I, 'г) до Я,('г, Уг).
видимым, ни тривиально
невидимым.
if Р2х
-
р,х
Флаг =
-
=
и
горизонтальности отрезка
0 then
1
else
вне окна.
вычисление наклона
-
Наклон = (Р2у
Р,у)/(Р2х
=
0 then Флаг = 0
if Наклон
-
Р,'(- 1.
Р, и Я, теперь стали @000) и A000) соответственно.
ни полностью
Этот
'
г). Заме-
Отрезок
и
4, содержащие коды точек Р, и Р2
индикатор координатной ориентации отрезка, равный'.
1, при вертикальности, 0, при горизонтальности
—
—
Пример 3.2. Алгоритм отсечения
же
(Р2х, Р2у) соответственно
Флаг
пример.
те
подпрограммы.
4, содержащий координаты
х
и
ниже.
сторон окна
выполнение, иначе поменять
иллюстрирует следующий
невиди-
Р|(]2, Зг) до P-S— 1, 1Л).
окна (у
1) равна Р,(—'/*, 1). ЗамеТочка пересечения отрезка с верхней стороной
новый отрезок от Я,(-!/*, 1) до Я2(-1, 'г).
Заменив Я, на Я,, получаем
Я, местами, мы
Рр Р2
Я, Р2 со стороной окна.
стороне.
точек Я, п Р., остаются равными @000) и A000) соответственно.
Коиы конисвых
явпястся ни полностью видимым, ни тривиально невидимым.
Отрезок не
"Пкод, Т2код
пересечения
ни
Алгоритм двумерного отсечения Сазерленда
Р[ Р2 определить, не является ли он пол-
видимым или может быть
Заменить Я, на точку
следую-
выполнить:
невидимый.
Если
Оiрезок не пересекается
Поскольку
—
Я, остаются по-прежнему равными @000)
является
не
к ннжпеП
невидимым-
точку пересечения. В
содержательных
Сазерленда
Для каждой стороны окна
соответственно. Отрезок
Запись
замену
и
точек
Я,
Коды концевых
пересечения,
Фактически это означает
можно отвергнуть как
невидимый.
исходной концевой точки на
пересекается с правой стороной окна. Псрепти
не
Отрезок
Р,х)
end if
для каждой стороны
окна
Гл. 3. Отсечение
3.2. Алгоритм отсечения
Сазсрленад—Коэна
for i
1 to 4
=
call Коэн
(Р,, P2, Окно; Видимость)
if Видимость
then 2
if Видимость
нет then 3
проверка пересечения отрезка и стороны окна
if Т1кодE
i)
Т2кодE
i) thenl
=
«частично»,
«да»,
полностью
невидим,
отрезок соответственно:
видим частично или полно-
если
да
видим
полностью
=
-
=
-
проверка нахождения
поменять
вычисление кодов концевых точек отрезка
Р{ вне окна; если Р} внутри окна, то
Р{ и Р2 местами
Р;
Р2
Видимость
Раб
=
поиск
да
end if
контроль вертикальности отрезка
if Флаг < >
1 и i ^ 2 then
отрезок может
-
Р,у
Р,х
=
=
Наклон
PjX
=
end if
P,y
*
(OkhOj
—
=
Р,х) + Р,у
then
<
-1
>
subroutine Конец (Р,
then
Рх, Ру
A/Наклон) * (OkhOj
-
Окно
P,y) + P,x
Окно{
Ткод
end if
end if
next i
Сумма
—
начертить видимый отрезок
Draw P,P2
3
finish
4, содержащий коды концевой точки
сумма всех элементов массива Ткод
Ру
(Р2х, Р2у) соответственно.
с
видимости
отрезка
=
0
=
1 else Ткод(З)
=
0
=
1 else ТкодB)
=
0
=
1 else ТкодA)-= 0
равный:
«нет»,
0
Сумма
=
for i
I to 4
=
Сумма
координатами (Р,х, Р,у) и
Окно—массив 1 х 4, содержащий
координаты (хл, хп, ун,
ув)
сторон окна
признак
1 else ТкодD)
=
вычисление суммы
Р2, Окно; Видимость)
отрезка
кодов концевой точки
if Рх < хл then ТкодD)
if Рх > хп then Ткод(З)
if
Ру < ун then ТкодB)
if
> ув then ТкодA)
подпрограмма определения видимости отрезка
точки
окна
1 х
массив
вычисление
2
—
—
—
Окно; Ткод, Сумма)
координаты точки Р
массив 1x4, содержащий координаты (хл, хп, ун, ув)
—
сторон
концевые
видимым
подпрограмма вычисления кодов концевой точки отрезка
> о
subroutine Коэн (Р,,
оказаться частично
return
OkhOj
else
if Флаг <
if Флаг
Видимость
=
=
пересечения
—
частично
проверка тривиальной невидимости отрезка
call Логическое ("Пкод, Т2код, Произвел)
нет
if Произвел < > 0 then Видимость
пересечений отрезка со сторонами окна
выбор соответствующей подпрограммы вычисления пересе-
Рр Р2
видим
else
end if
1
=
что отрезок частично
проверка полной видимости отрезка
if Сумма 1 = 0 и Сумма 2=0 then
Раб =
=
предположим,
Видимость
if Т1кодE -i) = 0 then
Р]
Р2
call Конец (Р,, Окно; Т1код, Сумма1)
call Конец (Р2, Окно; Т2код, Сумма2)
=
Сумма -f ТкодО)
next i
return
подпрограмма вычисления логического произведения
subroutine Логическое (Т1код, Т2код; Произвел)
'57
3.2.
Алгоритм отсечения Слзерлета—Коэн?
Т1код, Т2код
—
массивы
1
х
4, содержащие коды первой и вто-
второй концевых точек соответственно
Произвел
сумма побитовых логических произведений
О
Произвел
—
=
for i
=
1 to 4
Произвел
а на
рис. 3.5,
тривиальную невидимость отрезков, например b на
и
Те отрезки, которые
рис. 3.5.
только
Произвел
+
next i
Целая часть ((Т1код@ + Т2кодО))/2)
таких
помощью
от-
из
будет обнаружено пересечение со стороной окна или длина
не
пока
каждой из половин до тех пор,
разделяемого отрезка не станет пренебрежимо малой,
return
простых
двух категорий, например
проверок нельзя отнести к одной
на рис. 3.5, разбиваются на две равные части. Заотрезки от с до g
Затем те же проверки применяются к
=
с
т. е.
пока он
выродится в точку. Эта идея проиллюстрирована на примере от3.5. После вырождения определяется видимость поотрезка /с рис.
не
3.3. АЛГОРИТМ РАЗБИЕНИЯ
В алгоритме из предыдущего
пересечение отрезка со
непосредственного
вычисления,
СРЕДНЕЙ ТОЧКОЙ
стороной окна. Можно избежать непосредственесли
реализовать двоичный
поиск такого пересе-
пересечения путем деления
отрезка его средней точкой. Алгоритм, оснооснованный на этой идее и
являющийся частным случаем
алгоритма
Сазерленда
Коэна, был предложен Спруллом и Сазерлендом
[3-2] для аппаратной реализации. Программная реализация этого
—
алгоритма медленнее, чем реализация
предыдущего алгоритма. АпАппаратная же реализация быстрее и
эффективнее,
поскольку можно
использовать
параллельную архитектуру,
аппаратные сложения и деления на 2 очень
но эквивалентно
и, кроме того, аппарат-
быстры. Деление на 2 аппаратсдвигу каждого бита вправо. Например,
четырех-
четырехбитовый код десятичного
числа
6 равен ОНО. Побитовый
сдвиг
вправо на одну позицию дает ООП, что является
кодом десятичного
числа
3
=
к
сводится
раздела требовалось вычислить пере-
двоичному поиску.
/с рис. 3.5. Хотя отрезок /невидим, он пересекает прямую, несунесущую диагональ окна, и не может быть тривиально отвергнут. Раз-
Разбиение
и
окна,
ее
нельзя
разбиение точкой Рт^
отрезок
продолжается до
Рт
тривиально отвергнуть
позволяет
Рт Р2. Однако половина Рт Р, тоже пересекает диаго-
половину
диагональ
средней точкой
его
отвергнуть тривиально. Да нее
которое
тех
пока
пор,
не
проводится
отвергнуть невидимый
позволяет
Рт^Р\. Разбиение оставшегося куска Рт Рт
продолжает-
будет найдено пересечение этого отрезка с
прямой, несушей правую сторону окна, с наперед заданной точноЗатем исследуется обнаруженная точка и она оказывается не-
точностью.
невидимой. Следовательно,
Если судить
рис. 3.5 также
концевых точек отрезка и
пропроверки, выявляющие полную видимость
отрезков, например отрезка
обнаружения пересечения
Максимальное число разбиений пропроцесс
результате
точек отрезка.
пропорционально точности задания координат концевых
Для иллюстрации изложенного метода рассмотрим отрезки с и
6/2.
В алгоритме используются коды
В
точки.
полученной
только
и весь
то
отрезок
ни полностью видимым,
ни
тривиально
кодам
концевых
невидимым. Разбиение его средней точкой
одинаковым
Рт
приводит к одинако-
результатам для обеих половин. Отложив отрезок
потом,
разобьем
на
точек,
по
не является
отрезок невидим.
отрезок
Рт Р7
точкой
Рт
.
Рт Р/м на
Теперь
отрезок
Р,„ Рпн полностью видим, а отрезок Рт Р9 видим частично. Отре-
гп,
Отрезок
Рт" Рт
тому,
как
что
было бы начертить. Однако это привело бы к
видимая часть отрезка изображалась бы неэффективно,
можно
серия коротких кусков.
Поэтому точка
Рт
запоминается
как
текущая видимая точка, которая наиболее удалена от Рг А разбиеразбиение
отрезка
обнаруживается
Рпи Р2 продолжается. Каждый раз, когда обнаружива-
видимая
Удаленной от
с
о
158
Гл. 3. Or.
точка,
она
объявляется текущей наиболее
Рг, до тех пор пока не будет обнаружено пересечение
нижней стороной окна с заранее заданной точностью. Это пересе-
будет объявлено самой удаленной от Рх видимой точкой.
Затем точно так же обрабатывается отрезок Рт Рх. Для отрезка с
пересечение
Рис. 3.5. Разбиение средней точкой.
средняя
и
рис. 3.5 наиболее
159
3.3.
удаленной от
Р2 видимой точкой будет точка
Алгоритм разбиения средней точкой
его
пересечения
часть
видимую
найденными
левой
с
отрезка
стороной
можно
начертить
Р{ Р2, заключенную между двумя найден-
Значит, отрезок
чск равно @000).
d на рис. 3.5,
с и
в
поиском
точек, которые наиболее удалены от концов отрезка. Та-
точками
являются
точки
окна.
Каждое разбиение средней точкой дает грубую оценку иско-
пересечения отрезка
со
е и
программной
g, один из двух поисков становится ненужным. При
реализации алгоритма указанные процедуры поиска
А
проводятся последовательно.
проводятся параллельно.
на
три
этапа
аппаратной
при
=
2
2
У2+У\
-136 + 631
256.5
=
=
=
247.5
256
=
247
сторонами
пересечений. Для отрезков, у которых виден один из концов,
подобных
307
-
=
таких
Такими
820
XI + х\
Ут
разбить
как невидимый. Зай-
пересечений.
с
округления равны:
Координаты средней точки учетом
».*-мся
алгоритме разбие-
средней точкой реализуется два двоичных поиска двух
видимых
искомых
нельзя тривиально отвергнуть
пересечениями.
Для отрезков, подобных
разбиения
Теперь
окна.
они
реализиции
тп
полно-
Рт не являются ни
отрезка Р1 Р„
Р2
соедней точки равен @000).
и
Отложим на время отрезок Р2 Р,п
невидимыми.
ни тривиально
3.2.
отрезков показан в табл.
отрезком Р, Ря. Процесс разбиения
и
Оба
полного"ымн,
займемся
Таблица 3.2
Данный алгоритм можно формально раз-
[3-3].
Для каждой концевой точки отрезка:
Примечания
Рт
Pi
Pi
-307,631
820.
Запомнить Рт Р2.
256, 247
-136
-
Продолжить с Р, Рт
Если концевая точка видима,
то она
будет наиболее удаленной
видимой точкой. Процесс завершен. Иначе
Если отрезок тривиально характеризуется
информация
выходная
Иначе
—
не
формируется.
—
продолжить.
как
невидимый,
Процесс
то
Грубо оценить наиболее удаленную видимую точку путем деледеления отрезка Р{
Р2 средней точкой Рт. Применить вышеизложентривиально
Р, Рт
и
Рт Р2. Если Рт Р2 тривиаль-
отвергается как невидимый,
то
средняя
оценку для
наиболее
процедуру с отрезком
оценку снизу для
процедуру
с
удаленной
видимой
Р{ Рт. Иначе
—
точка дает
точки.
256.
247
-26, 439
Продолжить с Рт Р2
-26, 439
256,
247
115, 343
Продолжить с Р, Рт
-26, 439
115.
343
44, 391
Продолжить с
-26, 439
44,
391
9, 415
Продолжить с Р, Рт
-26, 439
9,
415
-9, 427
Продолжить с Рт Р2
-9, 427
9,
415
0. 421
Найдено пересечение
55
Восстановить Рт Р2,
завершен.
продолжить.
вышеизложенные тесты к двум кускам
-307,631
верхнюю
Продолжить
средняя точка дает оцен-
820, -136
256, 247
538,
Р, Рт
Продолжить с Рт Р2
наиболее удаленной видимой точки. Продолжить
куском Р2 Рт. Если отрезок становится настолько
679, -41
Продолжить с
Р, Рт
7
Продолжить с
Рт Р2
j7
Продолжить с
Р, Р,„
Продолжить с
Р, Рт
538,
55
820, -136
55
679.
-41
608,
мал, что его средняя точка совпадает с его концами с машинной
или наперед
заданной точностью, то надо оценить ее видимость
538,
и закончить
процесс.
608,
7
679.
-41
643.
608,
7
643,
-17
625,
-5
608,
7
625.
с
Пример 3-3. Разбиение срелней точкой
616,
I
Рассмотрим окно, показанное на рис. 3.5 и имеющее жранние коорчинаты швом,
правой, нижней и верхней сторон: 0, 1023, 0, 1023 соответственно. Экранные коорди-
616,
1
625,
-5
620,
-2
Продолжить с
Р, Рт
616,
1
620,
-2
618.
-1
Продолжить с
Р, Рт
616,
1
618.
617,
0
Конкретный пример лучше проиллюстрирует этот алгоритм.
/^(-307, 631) и Р2(820, 136). Коим концевых тот к
@001), а для Р2
@100). Оба кода не равны hvho, поэтому
координаты концов отрезка с равны:
равны: для
Р,
—
-
Гл. 3. Отсечение
Продолжить с Рт Р2
—
зок не является полностью видимым.
160
_
Логическое произведение юдов «¦.....*«»
..
161
3.3. Алгоритм разбиения средней точкой
Найдено пересечение
Использование точного уравнения отрезка
Я, Р2 дает пересечения в точках @,422) и
F20,0). Отличие этих значений от значений из табл. 3,2 объясняется погрешностью
целочисленных округлений.
Пересечение обнаружено?
Блок-схема изложенного алгоритма дана на
рис. 3.6. Запись его
I Р,
на псевдокоде приведена ниже.
-
да
Запоминание Р,
Т-Р,
Р-, I < Погрешность?
нет
Поиск наиболее удаленной
Вычисление средней точки
от
Р, видимой точки.
Перемена мест Р, и Р2
Р.-Р=
Р,-Т
Запоминание Р,
П-Р,
Увеличить счегчык
Инициализация
Вычиспение нового кода Р,
Вычисление кодов
точек
Р, и Р?
ла
Продолжить процесс
с отрезком РтР2
Отрезок полностью видим?
Логическое произведение
кодов концов = 0?
нет
да
Вычерчивание
Продолжить процесс
отрезка
Коды обоих концов = 0?
с отрезком
1*! Рп1
Р.-П
ист
Проверка вырожденной
да
невидимой точки.
Логическое произведение
кодов концов Ф ?
Отрезок тривиально
невидим?
да
Логическое произведение
кодов его концов * О?
Вычерчивание отрезка
Поиск наиболее удаленной
от Р, видимой точки
Рис. 3.6. Продолжение.
Двумерный алгоритм отсечения методом разбиения отрезка
средней точкой
Окно
—
4, в котором содержатся координаты (хл,
хп, ун, ув) левой, правой, нижней и верхней сторон пря-
массив
1 х
прямоугольного отсекающего
Точка Р, видима?
Код Р,
=
Рр Р2
0
—
окна
концевые точки отрезка
инициализация i
i
=
1
вычисление
кодов концевых точек
занесение кодов каждого конца в массивы
Рис. 3.6.
162
Блок-схема алгоритма
Гл. 3. Отсечение
именуемые Т1код
разбиения средней точкой.
и
Т2код
первая концевая точка: Р,
163
3.3. Алгоритм разбиения средней
точкой
1x4, именуе-
call
Конец(Р,, Окно; Т1код, Сумма!)
вторая концевая точка:
call
увеличить счетчик
i = i + 1
Р2
Конец(Р2, Окно; Т2код, Сумма2)
начать
проверка полной видимости отрезка
if Сумма! = 0 и Сумма2 = 0
then 5
не
отрезок
является полностью
видимым
до to 1
обнаружены оба пересечения
проверка вырожденной невидимой точки
теперь
проверка тривиальной невидимости
отрезка
call Логическое(Т1код,
Т2код; Произвел)
if Произвел < > 0 then 6
call Логическое(Т1код, Т2код; Произвел)
if Произвел < > 0 then 6
отрезок может оказаться частично
видимым
поиск наиболее
удаленной от Р{ видимой точки
запоминание исходной точки
Раб
=
отрезка
Р}
Р,
Р2
это
отрезка?
if Сумма2
Р,
наиболее удаленная от
Р
=
подпрограмма вычисления кодов концевой точки отрезка
—
—
координаты х и у точки Р
массив 1 х 4, содержащий координаты (хл, хп, ун, ув)
Р, видимая точка от-
левой, правой, нижней и верхней сторон прямоугольно-
0 then 3
Ткод
—
1 х 4,
окна
содержащий коды концевой точки
поэлементная сумма
Ткод
определение кодов концевой точки
1 else ТкодD)
if Рх < хл then ТкодD)
1 else Ткод(З)
if Рх > хп then Ткод(З)
1 else ТкодB)
if
Ру < ун then ТкодB)
1 else ТкодA)
if
Ру > ув then ТкодA)
2
=
отсекающего
массив
—
Сумма
Р21
запоминание текущей точки
замена
finish
прямоугольного
=
Р
Память
6
Окно
Погрешность then 3
вычисление средней точки
Р
Начертить отрезок
Рх, Р,
пересечение уже найдено?
if I
<
-
5
subroutine Конец(Р, Окно; Ткод, Сумма)
проверка окончания процесса решения
if i > 2 then 4
—
процесс с «новым» укороченным отрезком
Р}
Pj
Р, на Рт
Р
вычисление суммы
=
=
О
=
=
О
=
=
О
=
=
О
кодов
О
Сумма
=
1 to 4
for i
=
вычисление нового кода точки
Р1
call Конец
(Р,, Окно; Т1код, Сумма!)
Сумма
проверка тривиальной невидимости
отрезка РтР2
call Логическое(Т!код,
next i
if Произвел = 0 then 2
return
Т2код; Произвел)
Pm Р2 невидим, продолжить процедуру с Р,
Рт
Память
Pj
=
Сумма + ТкодО)
подпрограмма вычисления логического произведения
=
Р
=
Р
subroutine Логическое(Т1код, Т2код; Произвел)
массивы 1 х 4, содержащие коды концевых точек
Т1код, Т2код
Произвел
сумма битов в логическом произведении кодов концов
О
Произвел
—
go to 2
—
обнаружена наиболее удаленная от
Р,
видимая
точка
отрезка
поиск наиболее удаленной
перемена мест
Р
Р2
164
—
=
Р
Р1
и
=
for i
от
Р2 видимой точки отрезка
1 to 4
Произвел
Произвел + Целая часть((Т1кодA) +
+ Т2кодA))/2)
=
Р2
next i
Раб
Гл. 3. Отсечение
=
return
165
3.3. Алгоритм разбиения средней точкой
В ранее описанном
простом алгоритме отсечения коды концевых
точек отрезка и их логическое
произведение определялись прямо в
теле алгоритма. В данном
же алгоритме для этого
используются
подпрограммы, поскольку коды концов и их логическое
произведепроизведение вычисляются
вольного выпуклого многоугольника. Проиллюстрируем
метод сначала на
примере регулярного прямоугольного
ВЫПУКЛЫМ ОКНОМ
Например, предполо-
координат так,
ни один
из
как показано на
рис.
относительно системы ко-
3.7. В
ранее описанных алгоритмов.
этом случае
Кирус
и
окна.
сводится к паре одномерных параметрических уравнений вида:
3.4. ОБОБЩЕНИЕ: ОТСЕЧЕНИЕ
ДВУМЕРНОГО ОТРЕЗКА
предположим, что прямоугольное окно повернуто
ме-
В двумерной декартовой системе координат уравнение C.1) сво-
неоднократно.
В описанных выше
алгоритмах предполагалось, что отсекающее
окно является
координатно ориентированным
прямоугольником.
Однако во многих случаях окно не
таково.
этот
x(t)
=
хх + (jc2
JCi)r
0 < t< 1
C.2а)
y(t)
=
у\ + (yi -yi)t
0<t<l
(З.2в)
-
В случае прямоугольного отсекающего окна одна из координат пе-
пересечения отрезка с каждой стороной известна. Нужно
только
/
=
вторую
( Р( [)
-
Р})/( Р2
соответствующие
Из
координату.
уравнения
вычислить
C.1)
получаем:
Р,). А из C.2) следует, что значения t, со-
—
пересечениям
со
сторонами окна, равны:
неприменим
для левой стороны:
Бек предложили
[3-4] алгоритм отсечения окном произвольной
выпуклой формы.
Прежде чем подробно описывать алгоритм
Бека (это
Кируса
делается в следующем
разделе), рассмотрим отсечение параметри-
/
=
Х2
—
параметрически заданного
отрезка прямоугольным окном.
уравнение отрезка от
Я,
до
Р2
для
правой стороны:
г
=
Х2~Х\
Параметрическое
для нижней стороны:
имеет вид
/ =
У2~У\
-Pi)/
0</<?1
C.1)
для верхней стороны:
/
0<Г<
=
У2~У\
где t
—
получается
Параметрическое
параметр. Если ограничиться значениями 0 ^ /
именно
описание
Это свойство делает
полезным
для
^ 1, то по-
отрезок,
бесконечная прямая. Параметричеотрезка не зависит от выбора системы
а
не
координат.
параметрическое представление особенно по-
определения пересечения отрезка
со
стороной произ-
Здесь через хп, хп, ун, ув обозначены координаты левой, правой,
нижней и верхней сторон окна соответственно. Если решения этих
уравнений дают значения
такие
/ за пределами интервала
0 ^ t ^ 1,
то
решения отвергаются, поскольку они соответствуют точкам,
лежащим вне исходного
отрезка.
Пример 3.4. Простои частично видимый отрезок
Рассмотрим частично видимый отрезок от Pj(-3/2, -3/4) до Р'2C/2, 1/2), отсекаеотсекаемый окном с координатами сторон
Отсекаюшее окно
показано на
хп, хп,Ун,Ув, равными (— 1, 1,
с левой
стороной:
с правой
3.7.
Окно, повернутое отно-
1/2
1
(-3/2)
5/2
5
V2-
(-3/2)
3
6
УН -Ух
-1
(-3/4)
-1/4
-1
У2-у\
1/2
(-3/4)
5/4
5
выпуклым
окном
хп-х\
1
с нижней
стороной:
стороной:
/
Х2 -XI
3/2
ХП -xi
1
/
Х2 -XI
/
Гл. 3. Отсечение
167
3.4. Обобщение
(—3/2)
—
=
=
(-3/2)
-
-
-
--
=
относительно осей.
166
1, 1), как по-
рис. 3.8. Имеем значения / для точек пересечения отрезка
—
Рис.
-
отсечение
-
(это число меньше нуля и поэтому отвергается)
с
верхней стороной:
'
1
_-Ув-У1
-
_
"
(-3/4)
7/4
7
_
~
_
~~
-
У2
1/2
у\
-
~
(-3/4)
5/4
5
(это число больше единицы и также отвергается).
Видимый участок отрезка зак гючен в интервале 1/6
Значения
л* и у координат
уравнений. В частности, при /
*A/6)
точек пересечения получаются из
параметрических
1/6
=
из уравнения
-3/2 + [3/2
=
-
C.2) имеем:
(-3/2IA/6)
что, разумеется, априори известно, поскочьку л'
стороны окна.
^ / ^ 5/6.
=
—
1
=
—
-1
это
Для координаты у имеем:
>'A/6)
Аналогично при
=
-3/4 + [1/2
-
(-3/4IA/6)
=
абсцисса левой сторо-
-13/24
Рис. 3.8. Параметрическое отсечение частично видимых отрезков.
/
=
5/6 имеем:
W5/6) уE/6)]
=
=
Г—3/2 -3/4]+ [3/2-(-3/2)
[1
1/2
-
(-3/4)] E/6)
7/24]
Здесь вычисления значений х к у объединены.
Опять, поскольку отрезок пересекает
правую сторону окна, то координата а* априори известна.
программирования. Один алгоритм решения
следующем разделе.
важно уметь быстро
Как и в любом алгоритме отсечения, здесь
и полностью невидимые
выявлять и отделять полностью видимые
отрезки.
После изложенного примера может
показаться, что предлагаемый
метод прост и естествен. Однако существует
ряд
кото-
этой задачи дан в сле-
два
Следующие
проиллюстрируют
примера
ряд
новых
трудностей.
трудностей,
которые лучше
Пример 3.6. Полностью видимый отрезок
продемонстрировать на следующих примерах.
Рассмотрим полностью видимый отрезок
отсекаемый окном со сторонами (-1, I,
Пример 3.5. Частично видимый отрезок
Рассмотрим
рис.
отрезок от
Я3(-5/2,
-1)
до
/^C/2, 2), который тоже показал на
3.8, а отсекающее окно опять имеет координаты
сторон (— I,
1,
точки пересечения задаются
следующими значениями параметра:
(л
и все эти
=
3/8, (п
=
7/8, /н
=
0, iB
=
—
Р^— 1/2, 1/2) до Я2A/2, —1/2),
от
—
опять
I, 1), показанным на рис. 3.9. Значения
отрезка со сторонами окна, равны:
параметров, соответствующие пересечениям
(п
1, 1). Теперь
=
-
1/2,
Все эти значения находятся
вне
/п
=
3/2,
1Н
=
3/2,
/в
=
-
1/2.
интервала 0 < / ^ 1.
2/3,
четыре значения принадлежат интервату 0 г$ / ^ 1.
Хорошо
известно,
что
если
отрезок прямой пересекает выпувыпуклый многоугольник, то возникает не более
двух точек пересечения.
Следовательно, нужны только два из четырех значений параметра,
вычисленных в примере 3.5. Упорядочение этих
четырех значений
по
возрастанию
t
дает
последовательность
/B, tn. На
являются значения
3/8 и
tn
2/3, соответствующие точкам пересечения (- 1, 1/8) и A/6,
tB
1).
Эти значения совпадают с
и
fmdxmin
/minmax. Формальное вычисление
рис. 3.8
показано,
что
/н,
искомыми
tn,
—
=
этих
168
значений
сводится
к
простой классической
-1
задаче линейного
Рис.
3.9.
Отсечение
полностью
видимых и невидимых отрезков.
Гл. 3. Отсечение
169
3.4. Обобщение: отсечение выиук «ым
окном
Из анализа
примера 3.6 может
определения полностью видимых показаться,
отрезков.
пример показывает, что это неверно.
что
найден метод
Однако следующий
Пример 3.7. Полностью невидимый
отрезок
Рассмотрим полностью невидимый
от
тоже показан на рис. 3.9.
Злесь значения
отрезок
/^C/2,
окна, равны:
И опять все эти
Из
=
1/2) до РлB, 1/2), который
сторонами (— 1, 1,
1, 1).
пересечениям отрезка со
сторонами ок-
параметра, соответствующие
'л
-
Отсекаюшее окно опять задано
—
~
'п
=
Рис.
~
=
'н
н
""
»
=
3/2>
значения находятся вне
интервала 0.
ранее определенным условиям
¦>X
отрезка. Однако в
отрезка Р{ Р2 из
3.6
примера
отрезок Р3 Р4 невидим. Из
последующих двух примеров
следует, что для
параметрически зазаданных отрезков нет
простого и единственного
метода, различаюразличающего полностью
видимые и полностью
невидимые отрезки.
Кроме
того,
3.5.
АЛГОРИТМ КИРУСА
требует более формального
подхода.
БЕКА
Для создания надежного
алгоритма отсечения нужно иметь
хороший метод определения
нормали.
Возьмем выпуклую
быть двумерной, в
предполагается,
местоположения относительно окна
хоро-
—
вектор
отсекающую область R. Хотя R не
примерах, приведенных в данном
что она
двумерна.
b
—
любая другая
этом, вспомним, что
равно:
Vj V2
•
=
точка
разделе, пред-
область R
а) ^ 0,
убедиться в
—
границе R. Чтобы
скалярное произведение двух
векторов Vj
—
это
меньший
V2. Заметим, что если в
отсекающее
(наружная) пн и внутренняя
=
окно.
из
к
V2
=
0 и
векторов равно
ЗЛО показана
выпуклая
Там же показаны
пв нормали
и
двух углов,
7г/2, то cos в
произведение пары
перпендикулярны. На рис.
т. е.
п-(Ь
на
0, т. е. когда скалярное
нулю, то они
170
условию:
VjV2-1V, I I V21 cos 0, где в
образованных Vj и
еще
несколько
Кроме того, на рис. 3.10 пока-
этой границе.
векторов, проведенных
внешняя
из
точки
а
в
другие
точки на границе окна. Угол между пв и любым из таких векторов
—
всегда принадлежит интервалу
значениях
7г/2 < в ^ тг/2.
При таких зна-
угла косинус его всегда положителен. Следовательно,
поло-
скалярное произведение этих векторов, как было устаиз
установлено выше. А вот угол между внешней нормалью и любым
cos в при этом
в) =
0, a cos {-к
подобных векторов равен 7г
положительно и
—
—
(на-
сле-
следующий пример.
Пример 3.8. Внешняя и внутренняя нормали
Возьмем прямоугольную область, приведенную на рис. 3.10. Здесь внутренняя и
=
I соответственно, где I
едиi и пи =
внешняя нормали в точке а равны
пц
—
Таблица 3.3.
пн (Ь
•
а
Ь
пв(Ь- а)
@.2)
@,4)
0
0
D,4)
4
-4
(8,4)
8
-8
(8.2)
8
-8
(8.0)
8
-8
D.0)
4
-4
@,0)
0
0
границе окна, исходящие из
Гл. 3. Отсечение
3.5. Алгоритм
—
табл. 3.3 показаны значения скалярных произведений
обязана
выпуклым многоугольником. Она
не должна быть
вогнутым
многоугольником. Внутренняя
нормаль п в произвольной точке
а,
лежащей на границе
/?, удовлетворяет
где
показаны
на
единичный вектор вдоль оси а'. В
Итак, R может быть любым пло-
плоским
внешняя
отрицателен. Для лучшего понимания этого факта рассмотрим
(внутего) точки, принадлежащей
отрезку. Для
алгоритме Кируса
Бека [3-4]
используется
(внутри, на границе или вне
этой цели в
точки а, лежащей
—
—
внеш-
параметра удовлетворяют
полной видимости
отличие от
что эта задача
Внут-
Внутренняя
(наружная)
нормали.
и
примера 3.7 следует, что значения
ясно,
3.10.
Кируса—Бека
-
а)
внешней и внутренней нормалей на
в,
лежащие
на
векторы, проведенные in точки а в разные точки
области.
i ранние
Особо выделим случай точки в
D,4), тогда
4i + 2j, а
=
а)
lDj + 2j) = 4. Нули в последнем столбце
Пц-(Ь
табл. 3.3 означают, что
соответствующие векторы перпендикулярны
нормалям.
b
—
а
=
Верхняя
—
Возвращаясь
окна,
к
определению пересечения отрезка со
стороной
параметрическое представление отрезка
вновь возьмем
/>(/)
Если f
—
Р, Р2:
=
Рх
+
(Р2
-
f
Р2(9.3)
Правая
Певая
Px)t, 0< t ^ 1.
граничная точка выпуклой области
R, a n
—
внутренняя
нормаль
одной из ограничивающих
эту область плоскостей, то
для любой конкретной величины
t, т. е. для любой точки
отрезка
из
условия n-[P(t)
Р] Р2,
<
0
f]
следует, что вектор P(t)
f нак
P.I-U)
¦>X
-
0
—
области R. Из условия
0 следует,
n-[P(t)
f]
что P(t)
f принадлежит плоскости,
которая проходит через f и
перпендикулярна нормали. Из условия n-[P(t)
f] > 0
вовне
направлен
—
2
4
8
6
=
-
Рис. 3.12. Отсечение Кируса
Бека:
—
частично
видимый отрезок.
—
что
f направлен
вектор P(t)
внутрь R,
рис. 3.11. Из всех этих условий взятых
вместе
следует,
—
бесконечная прямая
пересекает замкнутую выпуклую
как
показано
следует,
что
на
одной
п- [Р( t)
на той
—
f]
=
плоскости
0 имеет только одно
или
Тогда
ребру.
решение.
уравнение
Если точка /лежит
граничной плоскости или на том
ребре, для которых п являточка на отрезке
Р( /), которая
является
внутренней нормалью, то
удовлетворяет последнему уравнению, будет точкой
пересечения
этого отрезка с указанной
граничной плоскостью.
Пример 3.9. Алгоритм Кируса
—
Бека. Частично видимый
отрезок
Рассмотрим отрезок от Я,(-1, 1) до Я,(9, 3), отсекаемый
показанным
на
рис. 3.12.
Уравнение
прямой,
Pit)
здесь
имеет
вид
=
Pi +(Pl-P\)t= f-I
i и j
0</< I
единичные векторы, ориентированные вдоль осей х и у соответствен-
—
Четыре внутренние нормали к сторонам окна равны:
I, нижняя пи
j, верхняя пв
j.
п,|
на
левой
окна,
точку
Д0.0)
Выбрав
стороне
10/
l)i + B/ + 1)J. а уравнение пл-[РA)
A0/
f]
=
—
=
/
=
=
левая
=
РA
для
10)
[- 1
=
=
-
1/10
отрезка
пересечения
1]
[10 2]A/Ю)
+
=
I,
=
пл
правая
—
-
с
[0 1.2]
-
стороной
левой
P(t)
имеем
1
=
0 дает
окна.
-
f
=
значение
Подстановка
дает то же самое значение, которое было
вычислено выше другим методом.
Выбрав точку
A0/
9I + B/
/
=
Я(9/10)
9/10
=
для
[- I
4)
/(8,
-
на
пересечения
1]
правой
стороне
отрезка
[10 2](9/10)
=
P(t)
имеем
окна,
—
f
=
0 дает значе9)
-A0/
выбранной стороной. Подстановка дает
3)j. а уравнение nn-[P(t)
-
+
с
-
f]
=
-
=
[8 2.8], что также совпадает с результатом вы-
вычисления другим методом.
Использование
n-[P(t) f]>0
11+ [10 21/
A0/- i)i
соответственно.
значение
Я, Я2,
/>, Р2 таково:
=
=
прямоугольным окном,
несущей
6), и она пересекает окно в точках @, 1.2) и (8, 2.8). Параметрическое
-
описание отрезка
область, которая в
точки не принадле-
граничной
0.2(л
=
беско-
двумерном случае сводится к замкнутому
выпуклому многоугольмногоугольнику ровно в двух точках. Далее, пусть эти две
принадлежат
у
nH-[P(t)
чежит
f]
—
=
точки
2 / + I
=
/@, 0) на нижней стороне окна приводит
0, решением которого является значение /
интервала 0 ^ / = I
точки /(8,
Использование
вне
пв- |P(t)
-
f]
=
—
B /
3)
—
=
и поэтому
4)
на
к
=
уравнению
—1/2. Оно
отвергается.
верхней
стороне
окна
дает
уравнение
0 с решением /. = 3/2. Последнее значение / тоже ле-
^ I и также отвергается. Видимый участок отрезка Р} Я,,
прямоугольной областью, показанной на рис. 3.12, лежит в интервапе
1/10 < / ^ 9/10 или от точки [0 1.2] до точки [8 2.8].
лежит вне ннтервапа
0 ^
/
отсекаемый
Из последнего примера следует, что точки пересечения можно
отыскать без большого труда. Способы идентификации полностью
Рис. 3.11. Направления
векторов.
видимого
в
172
и
полностью
невидимого
следующих трех примерах.
Гл. 3. Отсечение
3.5. Алгоритм Кирусл—Бека
отрезков продемонстрированы
Пример 3. 11. Алгоритм Кируса— Бека. Тривиально невидимый отрезок
P4(-l,4)
Рассмотрим отреюк от Ръ(-6.
f(8,4)
на
показанным
окном,
—
1) до Я4(- 1, 4), отсекаемый прямоугольным ок-
3.13. Этот отрезок невидим. Его параметрическое пред-
рис.
ставпение имеет вид: Р( t)
=
[-6
-
1] + [5 5] /.
Результаты вычислений, использующих те же внутренние нормали и граничные
которые
точки,
испочьзовапись
Аначиз результатов
|(lt" Нижняя
P6A0,l)
|nH
из
в
в
предыдущем примере, приведены
табл. 3.5 показывает,
что
табл. 3.5.
оба значения параметров для
0 ^ / ^ 1, а
правой сторонами
оба значения для пересечения с нижней и верхней сторонами лежат внутри интерва-
точек
интервала 0
пересечения
i $
^
с
левой
лежат вне интервала
и
I- Поэтому сначала можно было бы предположить, что отрезок видим в
интервале 1/5 ^
^ 1. Однако дальнейший
i
пересечений с левой
анализ
и
правой
сторонами показывает, что оба значения параметра больше единицы. Отсюда следуследует, что окно полностью расположено справа от отрезка.
Значит, отрезок невидим.
P5F.-2)
Рис. 3.13. Отсечение
Кируса
-
Бека: полностью видимый и
Пример 3.10. Алгоритм Кируса
—
невидимый
Таблица 3.5.
отрезки.
Бека. Полностью видимый отрезок
Рассмотрим отрезок от />,(!. 1) до ЛG, 3), отсекаемый
прямоугольным окном, попоказанным
на
рис. 3.13.
Его
параметрическое
описание
Результаты вычислений, использующих те же внутренние
точки, что
и
в
примере 3.9, приведены
в
имеет
^
t
Р{ /)
=
нормали и граничные
табл. 3.4. Все значения
соответствуют точкам пересечения лежат вне
интервала 0
полностью видимый.
вид
/, которые соот-
Ребро
п
f
P(t)~f
Левая
I
@, 0)
( -6 + 5/) i + (-1 + 5/)j
-6 + 5/
Правая
-i
(8,4)
(-14 + 5/)i + (-5 + 5/)j
-(-14 + 5/)
Нижняя
j
@, 0)
( -6 + 5/) i + (-1 + 5/) j
-1+5/
Верхняя
-j
(8,4)
(-14 + 5/)l + (-5 + 5/)J
-(-5 + 5/)
n«[P(t)-f]
/
=
6/5
/=14/5
/
=
1/5
/*1
< 1. Значит, отрезок пол-
Таблица 3.4.
Если
в
примере
последнем
поменять
Р3 и Р4 местами, то окно
будет полностью расположено слева от отрезка. Ориентация отрезРебро
П
Левая
i
@,0)
(
I + 2/)j
1+6/
Правая
-I
(8.4)
(-7 + 6/) i + (-3 + 2/)j
7-6/
Нижняя
Пример 3.12. Алгоритм Кируса— Бека. Нетривиально невидимый отрезок.
j
@. 0)
(
I + 2/) j
1+2/
-j
(8.4)
(-7 + 6/)i + (-3 + 2/)j
3-2,
Здесь рассматривается отрезок от Я5F, -2) до /^A0, 1), который снова отсекается
прямоугольным окном, показанным на рис. 3.13. Параметрическое описание отрезка
Верхняя
P(t)~f
n*[P(t)-fJ
l+6/)i + (
I + 6/) i + (
отрезка
играет важную роль при принятии решения
о его невидимости.
В следующем примере этот вопрос исследуется полнее.
имеет вид Р( /) =
[6 -21 + [4 3] /.
Использование внутренних нормалей и граничных точек, взятых из предыдущих
примеров, приводит к результатам, приведенным
В следующих двух примерах
невидимых
окна,
рассматриваются два типа невидиотрезков. Один их этих отрезков целиком расположен слева от
и его невидимость
концевых точек,
может
пересекает прямую, несущую диагональ окна
за его пределами. Его
нельзя объявить невидимым,
используя только коды концевых то-
174
Гл.
3. Отсечение
табл.
3.6.
Таблица 3.6.
быть установлена анализом кодов
который был описан ранее. Второй отрезок пере-
точек.
в
n-[P(t)-f]
Ребро
п
f
P(t)-f
Левая
i
@, 0)
(
6 + 4/) i + (-2 + 3/) j
6 + 4/
/
=
-3/2
Правая
i
(8,4)
(-2 + At) i + (-6 + 3/) j
-(-2 + 4/)
/
=
1/2
Нижняя
j
@, 0)
6 + 4/)i + (-2 + 3/)J
-2 + 3/
/
=
(
2/3
Верхняя
(8, 4)
(-2 + 4/) i + (-6 + 3/) j
-(-6 + 3/)
/
=
j
2
3.5. Алгоритм Кируса—Бека
Эти результаты свидетельствуют о
с левой и
том, что значения
параметра для пересечений
верхней сторонами окна выходят за допустимые
значения параметра для пересечений с
пределы. Однако значе-
правой и нижней сторонами окна допустимы. Но
Здесь D-n,- может быть равным нулю
означает, что Р2
учет ориентации отрезка от
Р5 к Р(> показывает, что такой отрезок не может перепересечь правую сторону окна
при / = 1/2 прежде, чем пересечет его нижнюю
при
/
=
2/3, и при этом иметь с окном обшие точки.
сторону
помогает
следует, что учет ориентации помогакорректно идентифицировать полностью видимые
Это
отрезки.
соображение
Кируса
—
используется
при
формальной
записи
алгоритма
Бека, которая приводится ниже.
Для формализации этого алгоритма
параметрическое описание
>
что
параметри-
отрезка имеет вид:
=
P\+(Pi-P\)t
Уравнение C.8)
C.3)
а
скалярное произведение внутренней нормали на
вектор, начинаюначинающийся в произвольной точке
отрезка и заканчивающийся в другой
точке, лежащей на той же границе окна, т. е.
[P(t)
f,]
/=1,2,3,...
C.4)
будет положительно, равно нулю или отрицательно
в зависимозависимости от того, будет ли
избранная точка отрезка лежать с внутренней
—
стороны границы, на самой этой границе или с ее внешней
стороны.
ребру номер /, ограничивающим область. Подстановка
ре-
C.3) в C.4)
границей области:
В другой
с
что
отрезок может пересечь
C.8)
большее число
могут дать
решений
в
интервале
Нужно найти наибольшую из
нижних и наименьшую из верхних точек. Если D п;. > 0, то найденближе соответствующая
будет
точка.
•
/
значение
найденное
возможного
рассматривается
¦
в
качестве
возможного
=
C.5)
форме уравнение C.5) имеет вид:
верхнего предела. На рис. 3.14 дана блок-схема алго-
алгоритма, в котором данные условия используются для решения полуполучающейся задачи линейного программирования. Ниже приводится
запись
этого
алгоритма
на
псевдокоде.
Алгоритм двумерного отсечения Кируса
Р,, Р2
—
концевые
—
число
точки
—
П|
fj
—
D
C.6)
—
Бека
отрезка
сторон отсекающего окна
вектор нормали
к
/-й стороне окна
точка, лежащая на i-it стороне окна
директриса отрезка, равная Р2
Pj
весовая функция, равная Pj
Wj
fj
и
значений
нижний
параметра t
верхний пределы
1Н' 1в
инициализировать пределы значений параметра, предпола—
—
—
—
вектор Р,
что
вектор
Р2
—
Pj определяет ориентацию отрезка, а
ft пропорционален расстоянию от первого конца отрезотрезка до избранной
граничной точки. Обозначим через D
Р2
Р,
или
директрису
ориентацию отрезка, а через
f.
некий
W,
Р,
весовой множитель.
—
=
=
Тогда уравнение
t(nyD)
предполагая
=
—
—
D
C.7)
176
Гл. 3. Отсечение
C.8)
отрезок полностью видимый
0
I
вычислить
Решая последнее уравнение
относительно /, имеем:
/=1,2,3,
что
tH
tB=
—
C.6) можно записать так:
n/ = 0
нижнего
п, < 0, то значение / рассматривается в качестве
—
Заметим,
вы-
0 ^ / ^ 1. Эти решения следует разбить на две группы: нижнюю и
верхнюю, в зависимости от того, к началу или к концу отрезка бу-
к
О
соот-
выпуклое окно не более чем в двух точках, т. е. при двух значениях /,
¦
п,- [Pi +(P2-Pi)t-f/]
/,
сторо-
Последнее соотношение применимо к любой плоскости или
дает условие пересечения
отрезка с
используется для получения значений
каждой стороной окна. Если
значение / лежит за пределами интервала 0 ^ t ^ 1, то можно его
предела. Если D
-
0, то она
соответствующих пересечениям отрезка
уравнения
0</<l
границе окна
внутри окна
то она на
,
проигнорировать. Хотя известно,
напомним,
0!), а это оз-
0, то эта точка вне окна
w/
Из приведенных примеров
=
Р,, т. е. вырождение отрезка в точку. Если
=
<
Поэтому отрезок невидим.
при D
только
)
=
Р2
-
директрису D
Р,
начать
главный цикл
for i
1 to k
=
А также при параплельности
3.5.
D избранной границе.
Алгоритм Кируса—Бека
—
Прим. перев.
вычислить
D-rij и Wg-n для данного
i
=
Wj
i
Инициализа ция
wj}
I
1
call Скал-произведф, n^ DCk)
call Скал-произвед(\\;, Пр WCk)
переменных
с„-0,
отрезок вырождается
0 then 2
if DCk
в
точку?
=
К
—
отрезок невырожден,
Число сторон окна
t
-wCk/dCk
=
верхнего и нижнего пределов
> 0 then 1
поиск
if
вычислить t
DCk
t
поиск верхнего предела
i ? 1?
верно ли, что 0
г =
-
¦
if t < 0 then 4
(W, Щ)/ф п,)
¦
tB
нет
go to 3
ла
поиск нижнего
Поиск нижнего
Поиск
верхнего
min (t, tB)
=
предела
верно ли,
ла
нет
1
if t >
1
предела
да
1Л
что t
^ 1?
then 4
max
=
предела
(t, tjj)
go to 3
нет
отрезок выродился в точку
if
2
WCk < 0 then 4
точка
i-i+ I
Результат
-
точка
3
next i
выход из цикла
произошел нормальный
фактической видимости отрезка
невидима
нет
видима относительно текущей границы
проверка
Нормальный
if tH
>
tB then 4
Начертить отрезок от P(tH) до P(tB)
результат
4
Обработать следующий отрезок
подпрограмма вычисления скалярного произведения
нет
Результат
отрезок
невилим
-
Начертить участок
отрезка от P(tH) до P(tB)
Скал)
subroutine Скал-произвед (Вектор1, Вектор2;
Вектор1
—
Вектор2
Скал
Взять следующий отрезок
—
—
компонентами х
и
У
первый вектор, заданный
компонентами х и у
второй вектор, заданный
скалярное произведение векторо
Скал
=
Вектор 1х*Вектор2х + Вектор1у
*
Вектор2у
return
Рис. 3.14.
Блок-схема алгоритма отсечения
Кируса— Бека.
ограничивается
формы, рассмотрим следующий пример.
Для иллюстрации того,
окнами
178
Гл. 3. Отсечение
прямоугольной
3.5. А игорнтм
что
Кируса—Бека
данный алгоритм
не
3.6. ВНУТРЕННЕЕ И ВНЕШНЕЕ
ОТСЕЧЕНИЕ
В предыдущих разделах упор был сделан
на
отсечение
отрезка
внутренней областью окна. Однако существует возможность
отсе-
отрезка и внешней его областью. Для этого надо определить
и начертить их. Напричасть или части отрезка, лежащие вне окна,
отсечения
Например, видимые части отрезка
расположены
в
Р]Р2, показанного на рис. 3.15, Ь, рас-
интервалах 0 ^ / < 1/6
и
5/6
< /
^ 1,
или от точки
точки
(—1, 1) до точки @, 3/2), а также от точки G/3, 8/3) до
так и внешнего отсечений этого
C, 3). Результаты как внутреннего,
-1
'
I
2
3
b
Рис. 3.15. Внутреннее
(а) и внешнее (Ь) отсечение
Кируса
—
отрезка показаны на рис. 3.15.
Внешнее отсечение играет важную роль
допускающих
Бека многоугольником.
Пример 3.13. Алгоритм Кнруса
Бека.
—
Нестандартное окно
На рис.
3.15, а показан восьмиугольник, служащий
отсекающим окном. Отрезок от
Р,(— I, 1) до Я,C, 3) должен быть отсечен данным окном. В табл. 3.7
приведены
результаты работы алгоритма Кируса
Бека. В
—
рассмотрим ребро от
качестве частного примера
рас-
К, до Vb. Алгоритм дает D
Для граничной точки /B, 3) имеем w
Внутренняя нормаль к ребру I
516 равна п
=
Р,
-
[- I
5, то /„
верхний предел. Поскольку w-n =
Аначиз табл. 3.7 показывает, что
=
=
=
Р,
-
дисплеях, допускаю-
работу с несколькими окнами, как это показано на рис. 3.16.
На этом рисунке приоритет окон
всего
в
экрана, а приоритет окон 1
и
1, 2, 3 выше приоритета окна все-
3 выше приоритета окна 2. Поэто-
Поэтому изображение в окне экрана отсекается его собственной внутренвнутренней областью и внешними областями окон 1, 2, 3. Изображение в
и внешними областями
окне 2 отсекается его собственной областью
окон
и
1
3.
Изображения в окнах 1 и 3 нужно отсечь только соот-
[3 3J
[-1 1J
[4 2].
[2 3]
[-3 -2]. ВнутIJ. Значит, Dn
—6 < О, и найден
соответствующими внутренними областями.
Внешним отсечением можно воспользоваться
-5 (-6) = 5/6.
вогнутым полигональным окном.
Р,
f = [- 1 1]
—
=
-
=
-
=
=
максимальное
среди значений
минимальное среди
/1( равно 1/4, а
/J} равно 5/6. Как показано на рис. 3.15, а, отрезок видим в пи
тервале 1/4 <$ / ^ 5/6. inn от точки
@, 3/2) ло точки
8
G 3.
3).
На рис.
при
работе с
3.17 показан
вогнутый
и
многоугольник, заданный вершинами Vx V2 Уъ V4 V5 Vb Vx. Этот вогвогнутый многоугольник можно преобразовать в выпуклый путем соесоединения вершин
отрезком.
К3 и К5, что и показано на рис. 3.17 штриховым
Отрезок
Р\Р2 внутренне отсекается полученным много-
Таблица 3.7.
Окно экрана
-1/2
11
180
При D-n < Q, верхний предел
UB); При Р-П > 0. нижний (/„)
-1
0
Рис. 3.16. Отсечение несколькими
Рис. 3.17. Отсечение невыпуклым
окнами.
окном.
Гл. 3. Отсечение
3.6. Внутреннее
и
внешнее
отсечение
угольником с помощью алгоритма
полученный при
многоугольником
3.7.
этом
VbVbVAVv
Р[Р'г
отрезок
что и дает
Кируса
Бека. А затем полу-
—
внешне отсекается
искомый результат
—
Уа
V,
v4
многоугольни-
P[Pv
0
0
ОПРЕДЕЛЕНИЕ ФАКТА ВЫПУКЛОСТИ
МНОГОУГОЛЬНИКА И ВЫЧИСЛЕНИЕ ЕГО
ВНУТРЕННИХ НОРМАЛЕЙ
Для работы с алгоритмом Кируса
—
Бека надо прежде всего убе-
убедиться, что окно является выпуклым, а затем вычислить
внутренние нормали к
невыпуклости
двумерного полигонального
окна
вычисления векторных произведений его
которые
внутрен-
каждой его стороне. Факт выпуклости или
можно
сделать
из
анализа
можно
невыпук-
установить
смежных сторон.
знаков
этих
таковы:
путем
¦-х
о
Выводы,
а.
произведений,
2
1
V,
2
1
Ь. Невыпуклый
Выпуклый
Рис. 3.18. Определение факта выпуклости многоугольника.
Все знаки равны нулю
—
многоугольник вырождавырождается в отрезок.
Есть как положительные,
так и отрицательные знаки
нормали
—
Все знаки неотрицательные
многоугольник
невыпуклый.
невыпук-
неположительны
влево
от
контура.
многоугольник выпуклый,
а
внутренние
нормали
вправо
выбрана базой, и могут вычисляться век-
Результаты этого метода интерпретируются точно так
будут перпендикулярны
многоугольника. Векторные произведения
перпендикулярный
Нормаль
вспомнить,
182
к
Vy Vx )k, где k
—
же.
что
стороне
•
V,
=
(пх\ + лj) (VJ + Ve j)
•
=
nxVe, 4- nyVe>.
=
0
многоугольника
Поскольку
что
равна п
=
нас
п
-
—
интересует только направление нормали, то поло1 без потери общности. Следовательно, нормаль
V / V
\ +
\.
х
У
Если вектор стороны многоугольника образован как разность
векторов пары смежных его вершин Vi_l и V. и если скалярное про-
к
плоскости
двух плоских векторов
V,
единичный вектор, перпенможно
скалярное произведение пары
вычислить,
умножив п на
-
1. Один
простой пример проиллюстрирует этот
метод.
Пример 3.14. Векторное произведение
невыНа рис. 3.18, а показан простой выпутый многоугольник, а на рис. 3.18, b
пуклый многоугольник. В табл. 3.8 и 3.9 привечены результаты всех вычислений.
и
Рассмотрим, например, векторное произведение сторон, смежных вершине К,,
а.
внутреннюю нормаль к стороне У1 У2 дпя многоугольника с рис. 3.18,
=
=
2 J. Векторное
21 + j,
смежные
равны:
—
плоскости, несущей векторы-сомножители.
к
V ) стороны многоугольника,
нормаль. В последнем случае внутреннюю нормаль можно получить,
вершин много-
векторов, начинающихся в этой базе
и заканчивающихся в
последовательных вершинах
многоугольника.
Vx Кч
компоненты
—
векторные произведения для пар
-
неизвестные
—
Другой подход заключается в том, что одна из
V2 равно (
—
произведение нормали и вектора от Vf_{ до Vi+l положительно, то
внешняя норп
п
внутренняя нормаль. В противном случае
контура.
Рис. 3.18 иллюстрирует эти
правила.
и
п
то
положим,
—
от его
произведения
и
(Vx,
известному вектору
к
п
ориентированы
Векторные
пх
многоугольник выпуклый,
а
внутренние
нормали
его
многоугольника может быть
Если
—
ориентированы
Все знаки
векторов равно нулю.
Стороны,
их произведение
равно
если
перпендикулярных
вершине
VjV2 ® V2 V3
V2 V3
V, V2
V2,
единичный вектор, перпендикуЭто векторное произведение положительно.
=
4k, где k
—
лярнып" плоскости многоугольника.
В табл. 3.8 показано, что векторные произведения
положительны для всех вершин
Гл. 3. Отсечение
J.7. Определение факта выпуклости многоугольника
Таблица 3.8
Вершина
Векторы
Векторное произведение
V\
V4V, <g> Vlv2
[
о
—3] <8> [
2
Vi
Vlv2® V2V1
f
2
l|®[
V3
V2V3® V3V4
1
0
v4
ViV4<g> V4VI
[-2
V,
U
=
+ 6
0
2]
=
+ 4
2|<g>[-2
0]
=
+ 4
-31
=
+ 6
0]®[
0
¦-х
Таблица 3.9
Вершина
Векторы
V\
V5V1Cg>V|V2
f
0
v2
V|V2(?S> V2V3
[
2
V2
V2V3C1?> VjV4
[-1
Va
V3V4<55V4V5
[
V5
v4v5<$?>V5V|
[-2
Векторное произведение
1
2
U
=
+6
H<5S> I— 1
1]
=
+3
U€H
1
U
=
-2
USM-2
0]
=
+2
=
+6
-3]<251
0 -3]
0j<§?[
v,
2
1
многоугольника. Поэтому данный многоугольник
выпуклый. В табл. 3.9 показано,
что для многоугольника с
рис.
вершине
3.18, b векторное произведение сторон, смежных
вер-
v4
о
2
1
а.
=
=
внутренняя нормаль.
Другой
метод
-
\/2\ + J, или, иначе, п
(-i + 2])-B1 + 3j)
=
=
-1 + 2j.
4 > 0, поэтому
факта выпуклости многоугольного
окна и вычисления
внутренних нормалей к его сторонам состоит в
реализации поворотов и переносов этого окна.
этого ме-
Алгоритм
метода таков:
Для каждой /-й вершины полигонального окна
надо перенести
его
так, чтобы
эта
вершина совпала с
началом
координат.
Рис. 3.19. Использование поворота и переноса дня определения выпуклости окна.
2)-х вершин совпадают, то окно
выпукло; иначе, оно невыпукло.
какой-нибудь из (/ + 2)-х вершин ордината равна
нулю, то /-я, (/ + 1)-я и (/ + 2)-я вершины коллинеарны.
Если
для
Если
все
вырождено,
ординаты (/ +
т. е.
является
2)-х вершин равны нулю, то окно выотрезком.
Повернуть многоугольник относительно начала
координат так,
чтобы (/ + 1 )-я его вершина оказалась
на положительной
В повернутой системе координат внутренняя нормаль к (/ +
полуоси X.
ординату, равную знаку ординаты (/ +
Вычислить знак ординаты у
184
полу-
(/ + 2)-й вершины.
3
Выпуклый
Если знаки ординат у всех (/ +
определения
1
V3
3
Следовательно, этот многоугольник невыпуклый.
V, V2 равна п
Вектор V,V3 равен 21 + 3]. Значит,
n-V^
получена
•—>
n
¦+-Х
V3, отрицательно, в то время как для всех других вершин оно положительно.
Нормаль к вектору стороны
¦
стороне выпуклого многоугольника
имеет
1)-й
нулевую абсциссу
и
2)-й вершины.
Для определения исходной ориентации внутренней нормали исиспользуются только обратные повороты.
Гл. 3. Отсечение
3.7. Определение факта
выпуклости многоугольника
На рис. 3.19 показаны разные стадии работы
этого
алгоритма
и невыпуклого многоугольников с рис. 3.18.
для выпуклого
и перенос, приведены в
Алгоритмы, реализующие поворот
работе
рабо-
[1-1].
3.8. РАЗБИЕНИЕ НЕВЫПУКЛЫХ МНОГОУГОЛЬНИКОВ
Во многих алгоритмах требуется, чтобы полигональные
из примеров таких алгоритотсекающие области были выпуклыми. Одним
отсекаю-
В последуюалгоритмов является вышеописанный алгоритм Кируса—Бека.
обопоследующих разделах будут представлены и другие примеры. Простое
обобщение
метода
переносов окна, используемого для
выпуклости или невыпуклости, позволяет
поворотов
определения факта
его
и
разбивать или разделять простой невыпуклый многоугольник
несколько
выпуклых
Эту
многоугольников.
процедуру
на
можно
алгоритм. Если вершины многото процедура
многоугольника перечисляются против часовой стрелки,
в
встроить
изложенный
выше
будет иметь такой вид:
Для каждой /-й вершины многоугольника надо так его перенеперенести, чтобы
координат.
она совпадала с началом
Повернуть многоугольник относительно координат по часовой
на положистрелке так, чтобы (/ + 1)-я его вершина оказалась
положительной полуоси х.
Проанализировать знак ординаты (/ + 2)-й вершины. Если он
в (/ + 1)-й вершинеотрицателен, то многоугольник выпуклый
вершине.
Если
же этот знак
отрицателен,
то
многоугольник невыпу-
разбить его.
Многоугольник разрезается вдоль положительной полуоси х,
невыпуклый;
т. е.
ищутся
осью
л1.
все
которые пересекаются с
два новых многоугольника: один состоит
такие
Образуются
его
стороны,
из вершин, лежащих выше оси
координат точки
л1 и
пересечения с х > xi+ р
лежащих ниже оси v и уже
ближайшей к началу коордиа
второй
—
из
вершин,
лежа-
упомянутой точки пересечения1*-
1}Это построение не вполне корректно. Правильное построение таково: один
образован вершинами исходной фигуры, начиная с (/ + 1)-й
кончая
упомянутой точкой пересечения (он целиком ниже оси л), а другой образован
этой точкой пересечения и всеми вершинами исходной фигуры, не вошедшими в сосостав первого
ось х).
Прим. перев.
многоугольника (он может пересекать
и
многоугольник
3
—
b.
Невыпуклый
V4
Рис.3.J9. Продолжение.
3 8.
Рпчб сине нспыпукпых mmoi оугольникоп
кон-
Алгоритм рекурсивно применяется к полученным многоугольнимногоугольникам до тех
пор,
Этот алгоритм
минимального
сможет
числа
не
пока все они не
дает
станут выпуклыми.
разбиения в смысле минивыпуклых компонент. Кроме того, алгоритм не
оптимального
корректно разбить многоугольник, стороны
пересекаются
Дальняя
которого пере-
Дапьняя
между собой.
Правая
Пример 3.15. Разбиение невыпуклого многоугольника
вер-
V'2 совпадает с началом координат, а К3 лежит на положительной полуоси v,
знак ординаты
\
4 будет отрицательным. Значит, этот многоугольник
Разрезание его осью х дает многоугольники
выше этой оси.
показывает, что оба они выпуклы.
Нижняя
невыпуклый.
Нижняя
Ближняя
Ближняя
Уъ У4 У5 ниже оси х и У{ У2 Уъ V5 вы-
Возобновление работы алгоритма с новыми
Правая
Левая
Левая
Рассмотрим невыпуклый многоугольник, показанный на рис. 3.19, Ь. Когда его
вершина
X
-
Проиллюстрируем работу этого алгоритма на примере.
многоугольниками пока-
Поэтому алгоритм прекратит дальнейшую работу.
а.
3.9. ТРЕХМЕРНОЕ ОТСЕЧЕНИЕ
Ь. Усеченная пирамида
Параплелепииеч
Рис. 3.20. Трехмерное отсечение.
Прежде чем заняться обобщением изложенных методов для
случая
измерений, необходимо обсудить вопрос о форме отсекающе-
трех
отсекающего объема.
Двумя наиболее распространенными формами
трехмерных
трехмер-
отсекателей являются: прямоугольный
параллелепипед,
полый брусок, используемый
т. е.
при параллельном или аксонометри-
аксонометрическом
проецировании,
пирамида, часто называепирамидой видимости, которая используется при
центральном
проецировании. Эти формы показаны на рис.
из
а также усеченная
называемая
них
3.20, у каждой
шесть граней: левая,
правая, верхняя, нижняя, ближняя и дальняя.
Существует, кроме того, необходимость отсекать и по нестандартобъемам.
Как и при двумерном отсечении,
нестандартным
видимы или тривиально
использованием
отрезки, которые полностью
можно
невидимы,
идентифицировать с ис-
В трехмерном случае
используется 6-битовый код. Вновь самый
правый бит кода считается первым. В биты кода заносятся
единиединицы с помощью обобщения
двумерной
процедуры. Конкретно еди-
единица заносится:
второй бит
в третий бит
в четвертый бит
во
188
—
—
—
—
в
пятый бит
—
в
шестой бит
—
Гл. 3. Отсечение
если конец
Точно так
же,
отрезок тоже будет полностью видимым.
не
если побитовое логическое произведение кодов концов отрезка
видимы
и
равно нулю,
то
ребра левее объема,
если конец ребра правее
объема,
если конец ребра ниже
объема,
если конец ребра выше
объема,
если конец ребра ближе
объема,
если конец ребра дальше объема.
он
полностью
невидим.
Если же это логическое
может оказаться как частично
произведение равно нулю, то отрезок
необходимо
видимым, так и полностью невидимым. В этом случае
определять пересечения отрезка с гранями отсекающего
Поиск кодов
параллелепипеда
обобщения кодов концевых точек Козна-Сазерленда.
в первый бит
И
В противном случае в соответствующие биты заносятся нули.
то оба конца
опять, если коды обоих концов отрезка равны нулю,
точки относительно
является
отсекающего
объема.
прямоугольного
прямым обобщением соответствующего
случай, когда отсекателем служит
дополусеченная пирамида, показанная на рис. 3.20,Ь, заслуживает
дополнительного обсуждения. Один из методов [1-3] заключается в пре1,
преобразовании отсекателя в каноническую форму, где хправ
двумерного алгоритма. Однако
=
1. Если *ближ
а, где
1 при *даль
0 < а ^ 1, а центр проекции совпадает с началом левой системы
координат, то проверка кодов концевых точек заметно упрощается.
**в
=
-
1. Лерх
=
1. Л»,з
=
~
=
=
В более естественном методе, меньше искажающем форму отсе-
отсекателя, отрезок, соединяющий центр проекции с центром усеченной
как
пирамиды, совмещается с осью z правой системы координат,
это показано на рис. 3.20, Ь.
Вид усеченной пирамиды сверху показан на рис. 3.21, а. УравнеУравнение прямой на плоскости xz, несущей проекцию правой грани отсе-
отсе3.9.
Трехмерное отсечение
Пробные функции для левой, верхней
и
нижней граней имеют вид:
С > о, если Р справа от плоскости
=
/л
Центр
=
0, если Р на плоскости
С<о,
Дальняя
Р слева
если
от плоскости
проекции
/3j
где
=
=
znn), а /32
-
хп/{ Zjy
-/3j z nn.
-z
0, если Р выше плоскости
0, если Р на плоскости
< 0, если Р ниже плоскости
>
[
где 7]
-
=
=
z
цп)> аТ2
=
-Ti Znu.
0, если Р ниже плоскости
0, если Р на плоскости
> 0, если Р выше плоскости
<
{
6t
где
-
=
=
а
д2
zm),
m
=
-
Наконец, пробные функции для ближней и дальней граней имеют
вид:
Г>о, если Р ближе плоскости
/в
=
z
=
-
ZB
0, если Р на плоскости
С<о,
если
Р дальше плоскости
С < О, если Р дальше плоскости
/д
=
=
-
z
О,
если
Р на плоскости
О, если Р ближе плоскости
Рис. 3-21. Усеченная
пирамида.
тем больше форма отсекателя
?цП к бесконечности,
приближается к прямоугольному параллелепипеду. Пробные функ-
Чем ближе
кателя,
имеет вид:
х
=
(z
функции
-
x
ц
где
-
znn)
и
а2
=
при
этом
тоже
приближаются к соответствующим пробным
функциям прямоугольного параллелепипеда.
Как указывали Лианг и Барский [3-5], последний метод может
-а
Уравнение этой прямой можно использовать для определения ме-
Дать некорректные значения кодов, если концы отрезка лежат за
местоположения точки: справа, на или слева от
центром проекции. Это происходит потому,
секателя,
на
прямой, т. е. вне от-
плоскости, несущей его правую грань,
или
внутри от-
Подстановка координат х и z точки Р в
пробную функфункцию правой грани дает
следующий результат:
секателя.
Г >о, если Р справа от плоскости
—
х
~
=
0, если Р на плоскости
С<о,
190
Гл. 3. Отсечение
если
Р слева от плоскости
что
плоскости,
несу-
левую, правую, верхнюю и нижнюю грани усеченной пирамипирамиды, пересекаются в точке центра проекции. Поэтому существуют
точки, расположенные одновременно левее левой и правее правой
несущие
Барский предложили способ устранения этой ненеопределенности. Для этого в принципе необходимо лишь обратить
граней. Лианг
и
значения
первых
Разд. 3.12.
3.9. Трехмерное
четырех
отсечение
битов
кода
при
z >
гцп. См.
также
3.10.ТРЕХМЕРНЫЙ АЛГОРИТМ РАЗБИЕНИЯ СРЕДНЕЙ
ТОЧ КОЙ
Ниже следует пример использования трехмерного
точкой.
отсечения методом разбиения средней
Двумерный алгоритм разбиения средней точкой, описанный выше
(см. разд. 3.3), непосредственно обобщается на случай
трех измереизмерений. В записи этого алгоритма на псевдокоде
нужно изменить раз-
размерности у массивов Ткод и Окно, а подпрограммы Конец и Логис учетом трех
измерений. Запись на псевдокоде
подпрограммы вычисления кода концевой точки отрезка имеет
трехмерной усеченной пирамиды
—
*
Ткод
масссив
—
Сумма
—
1x6, содержащий код концевой точки
7(
=
=
6 х + z
=
правая: /п
левая: fn
нижняя: /н
ближняя: /Б
дальняя: /д
6 х
=
=
=
=
—
6^
6у
z
-
—
г
-
z +
2500
2500
357.14
Р1 равен @10101), а код Р2 равен @00000).
Логиотрезок не является полностью видимым.
Поэтому отрезок не являЛогическое произведение кодов концевых точек равно @00000).
равен нулю, то Р2 лежит
невидимым. Поскопьку код точки
и
Р2
тривиально
Следовательно,
а2, /Зр /32, у]9 у2, б,, 52
отрезка.
zun)
Координаты середины отрезка равны:
Р2
—
~а1 2ЦП
+
а-,)/2
+ Zj)/2
=
наиболее удаленная от Pj
Значит, отрезок имеет только одно пересечение
=
+ у)/2 =
7,
Поскольку оба этих
кода не равны нулю одновременно,
вну гри отсекателя.
"
2500
z +
-
2500
-
z + 500
Код концевой точки
является
сумма элементов Ткод
вычисление ах,
-
=
верхняя: /в
координаты ху у и z точки Р
Окно —массив 1 х 7, содержащий
координаты (хл,
л
хп,
п
ун,
н
ув,
в
zB,
B
)
правой,
нижней,
шдней
верхней, ближней,
zun
сторон окна и центра проекции
Р?
пирана дальней плоскости,
экранной системе координат, расположенной
=
500. Аппликаты ближней и дальс
500, хл = уи =
ув
д'п
пирамидой видимости
2500.
=
—500. Центр проекции лежит на <цП
357.14, гд
дальней граней таковы: ?Б
показан на рис. 3.21, а, а ее перспективное изображение
Вид сверху на эту сиену
отсекателя таковы:
на рис. 3.21, Ь. Пробные функции
=
subroutine Конец(Р, Окно; Ткод, Сумма)
,
в
—
вид:
подпрограмма вычисления кода концевой точки отрезка относи-
Рх, Р
разбиения средней точкой
экранР,(-600, -600, 600) до Р2A00, 100, -100),и заданный
отсекаемый
от
Возьмем отрезок
методом
=
Логическое переписать
относительно
Пример 3.16. Трехмерное отсечение
алгоритма от-
=
с
1100 4- (-600)]/2
[100 + (-600)]/2
(- 100 + 6О0)/2
=
видимая точка
границей отсекателя. Ко-
=
-250
=
-250
ЛЛ
250
У
Таблица 3.10.
-
Ь2
2цп)
=
if Рх
-
Р,/3,
Р/х,
Р76,
Pzt,
/32
О then ТкодF)
=
а2
>
0 then ТкодE)
=
52
<
О then ТкодD)
l else ТкодF) = О
l else ТкодE)
о
рс
100,
Примечания
100, -100
-250, -250, 250 Продолжить с р1 Рс
-600, -600. 600
-250, -250,
250
-425, -425, 425 Продолжить с рс Р2
-425, -425, 425
-250.
250.
250
-338. -338, 337 Продолжить с Pi Рс
-425, -425, 425
-338.
48.
337
-382, -382, 381 Продолжить с Рс Pi
-382, -382, 381
-338.
т.
337
-360. -360. 359 Продолжить с рс Pi
-360, -360, 359
-338, -338,
337
-349, -349, 348 Продолжить с р1 Рс
вычисление суммы
-360. -360, 359
-349, -349,
348
-355, -355. 353 Продолжить с Pi Рс
Сумма
-360. -360, 359
-355. -355.
353
-358, -358, 356 Продолжить с Рс Рг
-358, -358. 356
-355, -355.
353
-357, -357, 354 Продолжить с Pi Рс
-358, -358, 356
-357, -357,
354
-358. -358. 355 Продолжить с Рс Pi
-358. -358, 355
-357. -357,
354
| -358, -358. 354
if Рх
if
Ру
if
Ру
if Pz
if Pz
for i
-
-
-
-
-
-
-
> 0 then
=
=
1 else ТкодD)
1 else Ткод(З)
т2
Ткод(З)
>
0
then ТкодB)
1 else ТкодB)
zB
О
< 0 then
1
else
ТкодA)
О
гд
=
=
-
=
=
=
О
1 to 6
Сумма
=
Сумма + ТкодО)
next i
return
192
-600, -600, 600
<
-
Pi
Р\
--1-Ц11
определение кода концевой точки
Гл. 3. Отсечение
=
ТкодA)
=
=
о
=
о
з.Ю. Трехмерный алгоритм разбиения средней точкой
1 Найдено пересечение
Код этой
точки
@00000). Отрезок Р? Р2
полностью видимый,
отрезок
А>, Рс
Алгоритм продолжает работу с отрезком
Результаты процесса
Я, Рс. Резульподразбиения даны в
—
равен
—
частично видимый.
табл. 3.10. Фактические
координаты точки перавны (-357.14, —357.14, 357.14). Отличие
этих значений от
приведенных
в табл. 3.10 объясняется
тем, что в алгоритме использовалась
целочисленная
арифмет ика.
wn
Dn1*
[-3-2-I/2]
2
-5/2
0
3/2]
0
5,2
1) [-3 -2 -1/2]
3
-7/2
-1
7/2
пересечения
3.11. ТРЕХМЕРНЫЙ АЛГОРИТМ
КИРУСА
В двумерном варианте
алгоритма Кируса
—
—
БЕКА
Бека
отсекателя не накладывалось никаких
[3-4] на форму
ограничений, за исключением
выпуклости. Поэтому и в трехмерном
варианте отсекатель может
быть произвольным
выпуклым объемом. Можно
непосредственно
воспользоваться ранее разработанной
двумерной версией. Теперь к
w
0] (
1.
I,
I)
Верхняя
[0-1
Нижняя
[010] (-1,-1,-1) [-1
Правая
[-1
Левая
[10
0
0
Ближняя[
п
0
0] (-1,-1.-1) [-1
0-1]
1,
(
1,
I)
3/2]
[-3-2-1/2]
1/2
0
3/2
1] (-1,-1,-1) [-1
0
Дальняя 10
1.
1.
0] (
3/2]
/H
'В
4/5
0
6/7
2/7
-1/2
3/2
-1
При Dn < 0, верхний предел (гв); при Dn > 0, нижний предел (/н).
обозначает не число сторон
многоугольника, а число граней много(см. рис. 3.14). Все векторы
теперь имеют по три компокомпоненты: х, у, z. Обобщение
подпрограммы Скал
многогранника
—
случай трехмерных
произвел на слу-
векторов реализуется также
непосредственно.
более полной иллюстрации этого
алгоритма рассмотрим
Для
Выбор точек, лежащих на каждой грани отсека геля, также очевиден. Достаточно
iefi параллелепипеда.
взять две точки, лежащие на концах одной из главных диагопа
Итак»
Л=/п==/б<1' »• ^/н =/л =JnS-1- "I- "*>
следую-
следующие примеры. В первом
примере отсекателем служит прямоугольпрямоугольный
параллелепипед, т. е. полый брусок.
Вместо этих точек можно взять центры или любые угловые точки на соответствуюсоответствующих
гранях.
Директриса отрезка
Пример 3.17. Трехмерный алгоритм Кируса— Бека
~
На рис. 3.22 показан
отрезок от
Я,(-2, -1, 1/2) до Р2C/2, 3/2, -1/2), которыП
нужно отсечь по объему с
координатами (,vn, v,,,
(-1, 1. —1. 1. 1.
»'H,jB, zB. гд)
1). Шесть внутренних нормалей к
=
—
D
пв
нижняя
nH
"I
HI 0 0]
пп
j
[1 0 0]
пп
-к=
[0 0 -1]
пБ=
к
[0 0 1]
пд
правая
левая
ближняя
дачьняя
=
=
=
w
-J
(О -1 0]
j
[0 1 0J
Р,
=
=
а внутренняя
=
=
=
=
-
Р,
Р/2 3/2 -1/2]
Для граничной точки/л(—1,
граням отсекателя, очевидно,
равны:
верхняя
РХР2 равна:
Р,
-
нормаль
f
к
=
—
[-2-1 1/2]
-
[7/2 5/2 -1]
=
I, —1):
[-2 -1 1/2]
[-1
-
-1
-1]
=
[-1 0 3/2J
левой грани отсекателя равна
=
[1 0 01.
=
пл
=
Следовательно,
=
D пл
•
[7/2 5/2
=
что соответствует нижнему пределу,
ю-пл
/л
(l.l.D
=
=
-
1] 11 0 0]
•
=
7/2 > 0
а
1-1 0 3/21 [I 0 0]
-
=
-i-
=
-1
2/7
Попностью результаты работы алгоритма собраны в табл. 3.11. Анализ таблитаблицы 3.11 показывает, что максимальным из нижних значений будет
2/7, а мини/н
4/5. Параметрическое представление отминимальным \п верхних значений будет
=
(-1.-1.-1)
/в
отрезка
Рис.
Бека:
p.
194
3.22.
трехмерный
прямоугольный объем.
*-'
Рх Р2 имеет вид:
P{t)
Отсечение
Кируса
=
=
[-2 -1 1/2] + [7/2 5/2 -l]t
—
прямоуголь-
Подстановка сюда /н и /в дает:
ЯB/7)
=
[-2 -1 1/2] + [7/2 5/2
—
I] B/7)
Гл. 3. Отсечение
з.И. Трехмерный алгоритм
Кируса—Бека
=
[-1 -2/7 3/14]
лля точки пересечения
отрезка с левой 1раиью отсекателя и
РD/5)
зля точки его
=
[-2 -I
I
Таблица 3.12.
2J
пересечения с верхней гранью отсекателя.
Отсечение относительно
будет ненамного сложнее.
отсекателя
[7/2 5/2 -1]-D/5) = [4/5 1
-3/10]
+
стандартной пирамиды видимости
Здесь внутренние нормали к
следует определить формально, так как их
бу-
граням отсекате-
значения неочевидны.
Пример 3.18. Отсечение относительно пирамиды видимости
Возьмем тот же отрезок, чго и в
примере 3.17. от
-1/2), ко горы Л отсекается пирамидон видимости сЯ,(-2,
•"б1 zn)
=
(~1' !• ""'• '• 1- ~*)«
а
-1, 1/2) до Я,C/2, 3/2,
координатами (хл,
хп, уи, уь>
Центр проекции расположен на
5. См.
zun
рис. 3.20, Ь.
соответствующих граней при z = 0. Эти
векторы равны:
V,
=
V,
V,
=
[-1 -1 -5]
=
[1
пл
nH
-1
для
10
0-2] @,0,
5) [-2-1 -9/2] -11
37
Бпнжняя
[
0
0-1] @, 0,
1) [-2-1 -1/2]
1/2
1
Дальняя
[001] @,0,-1) [-2-1
3/2]
3/2
-1
0.879
0 .297
-0 .5
1.5
11
При Dn < 0, верхний предел GВ); при D-n > 0, нижний предел (/н)
значит, ищется нижний предел.
=
Далее,
[-2 -1 -9/2]-[10 0 -2]
-(-11)/37
=
=
11/37
=
верхних будет /в
=
0.826. Из
-11
=
0.297
в
табл. 3.12. Анализ этой таб-
будет /н
=
0.297, а мини-
параметрического описания отрезка следу-
следует, что
=
=
V3 <g> V4
пп
=
V, <g>V,
пБ
=
[0 0
пд
=
[0 0 1J
-
[0 -10 -2]
[10 0 -2J
Я@.297)
=
[0 10 -2]
Я@.826)
=
[-10 0 -2]
=
четырем из шести плоскостей, несушнх
=
семью
и
верхней 1ранями отсекателя
центры
=
=
отсекателем
будет нестандартное тело с
гранями.
Пример 3.19. Отсечение относительно произвольного
@.0. 5)
объема
изображен на рис. 3.23. Это куб, один из углов которого срезан.
Грани
задаются списками их вершин:
@, 0, -I)
Директриса Рх Я, равна
Р,
[0.891 1.065 -0.323]
i ра-
Отсекатель
./Б= @,0, 1)и/д
-
=
[-0.961 -0.258 0.203]
пересечениям с левой
В последнем примере
бчижней и дааьней граней взять их
Р2
это соответствует
=
1)
удобно выбрать граничные точки так:
=
I
Левая
минимальным из
V,®V2
V2®V3
D
-33
таблицы показывает, что максимапьным из нижних значений
/в=-/л =/»=/„
а
29
0 .037
27
5) [-2-1 -9/2] -1
Полностью результаты работы алгоритма даны
-5]
Поско 1ьку центр проекции принадлежит
рани отсекателя, то
5) [-2-1 -9/2]
Правая
tH
Внутренние нормали равны:
=
0-2] @,0,
[
\лг-пл
=
=
[-10
Нижняя
[1 1 -5]
[-1 1 -5]
V,
nB
5) [-2-1 -9/2]
[
0.826
-23
19
0-10-2] @,0,
0
10-2] @,0,
Верхняя
'н
—
Значения внутренних нормалей к ближней и
дальней граням очевидны. Для
остальных четырех граней их можно
получить, вычислив векторные произведения,
образованные парами векторов, которые начинаются в
центре проекции, а заканчизаканчиваются в углах
Dn'>
w
Грань
[7/2 5/2 -1]
Дня граничной гочкн на левой грани отсекателя
A, -1, 1), A, -1, -1). A. 1, -1), 0. 1. 1)
0, I)
левая : (-1, -1. 1), (-1, -1. -1). (-1, 1. -1), (-1. 1, 0), (-1,
нижняя:
A, -1. 1), (I, -1, -1), (-1. -1, -П. A, -1. -1)
верхняя:
A, 1. 1), A, 1, -1), (-1. 1. -1), (-1, I. 0), @, 1, 1)
-1. 1)
ближняя:
A, -1. 1), (I, 1, 1), @, 1, 1), (-1. 0, 1), (-1,
О
дальняя:
(-1, -1, -1), A. -1, -1), (I. 1. -1), (-1. 1.
косоугольная: (-1, 0, 1), @, 1, 1), (-1, 1. 0)
правая:
-
w
=
Р,
-
!л
=
[-2 -1 1/2]
D-n4
=
[7/2 5 2
-
[0 0 ^]
=
[-2 -1 -9/2]
Заметим, что
В табл. 3.13 собраны все результаты работы алгоритма с отрезком от Я, ( 2,
3 2, 1) до
описанного объема.
Я2C/2, —1, -1/2), который отсекается относительно
—
196
—
IJ [10 0 -2]
•
=
37 > 0
Гл. 3. Отсечение
3.11.
Трехмерный алгоритм Кируса—Бека
Главная причина
преобразование проецирования.
что отсекающая плозатруднений объясняется тем,
„пльзуется еше и
Pi V
вникающих
части, одна
^псть тут не обязательно разрезает отрезок на две Отрезок
-
A.1.1)
Заворачиваться»
nvT лежать
(-1.-1.-1)
объем
внутри отсекателя бувидимы) сразу две его части.
бесконечности так,
в
может
вне отсекателя.
(и, следовательно, будут
что
всех отрезков перед завершени[3-6] доказал, что отсечение
осуществляемого путем деления
завершением преобразования проецирования,
отна значение однородной координаты, удаляет
всех координат
с
нечетным числом
Бека:
—
граней.
которые «возвращаются
оезки
=
другая
Ьлинн
Рис. 3.23. Отсечение Кируса
Из
а
которых будет внутри,
из
таблицы следует, что максимальным из нижних значении* будет
6/7. Поэтому точками пересечения
1/3. а минимапьным из верхних будет /в
эгоп
=
(н
будут:
Р{\ 3)
на косоугольной
грани
=
бесконечности». Лианг
и
Бар-
отсечения отрезков, работающий
в
Барский [3-5] предложили алгоритм
Они получили корректный результат пуоднородных координатах.
путем искажения
-
служила
них
формы видимого объема, которым у
усеченная пирамида.
В алгоритме Кируса
f-5/б 2/3 1/2]
из
Бека отрезок корректно отсекается
отно-
что он целиком распопирамиды видимости при условии,
что то же самое, перед центрасположен перед точкой наблюдения или,
за
3.18). Однако если отрезок заходит
центром проекции (см. пример
даже если он чато этот ачгоритм отвергает его,
центр проекции,
и
относительно
Я(б/7)
на правом
=
[1 -9/14 -2/7]
«рани.
Таблица 3.13.
частично
если
Грань
/
п
Верхняя
[
0
-1
Нижняя
1
0
I
г
Правая
Левая
1
0] (
w
1.
01 (-1.
-
.
1.
]
0
0] (
1
0
0| (-1.
Ближняя 1
0
0
Дальняя
1
0
0
1) (-1.
Косоуготьиая
[
1
-1
-и (-1.
-II (
,
Dn'> 'н
-3
1/2
01 -1/2
5/2
"О [-1
5/2
2|
5/2
-5/2
1)
-3
1/2
01
3
-7/2
,
-О
[-1
5/2
21 -1
7/2
2/7
— о
1/2
0]
0
3/2
0
5/2
2]
2
-3/2
3/2
0| -5/2
,
-
1)
.
-1)
0,
1)
1
-1
15/2
системе
Заметим,
6/7
Пример 3.20. Применение алгоритма Кируса
Я,@. 1. 6) до Р2@, -1.-6).
в обычной системе координат значениями
При 0 •п < о. верхний продел (/ц); при D •п > 0. нижний предел
выше-
к
отрезку,
отсекаемый пирамидоП заданной
(лл, л,,, vH. >'в- <-Б' *д>
=
'
'
концы отрезка
на
Когда отсечение необходимо провести в однородной системе кооркоординат
-30)иЯ2@. -5 11. -30/П)
отсекапелсм. но дальше
за отсекатчем.
в бесконечности, оказалась
Заметим, что исходная точка /> лежала перед
ини. а теперь она, «завернувшись»
[1-1], то нужно проявить осторожность, если при этом ис3.12. Отсечена
Гл.
3. Отсечение
в
'
о>
однородную координату лает
ОТСЕЧЕНИЕ В ОДНОРОДНЫХ КООРДИНАТАХ
3.12.
'
,'
\
5. Огрезок РхРг пересекает
Р2[0 -1 -6 11/5]
Переход к обычным координатам путем деления
/>@. -5,
~
однородных координат:
/>[0 1 6 -1/5] и
Бе-
растет линейно с ростом числа сторон или граней у отсекателя.
Бека
преобразования проецирования (см. [1-1])
дут иметь следующие значения
198
-
-1), причем центр проекции расположен
видимый объем, но начинается за центром проекции.
После выполнения
Бека
к
и
заходящему за центр проекции
Возьмем огрезок от
1/3
—
что
Следующий пример проиллюстрирует
вышеизложенные соображения.
4/3
Заметим, что оценка числа операций в алгоритме Кируса
а затем
повороты, переносы и т. п.).
в точке с г
"
координат,
преобразование проецирования.
уже
проецирования
и к
отрезку перед преобразованием
отсекателю
(т. е. повороможно применить любое аффинное преобразование
1
О
в обычной
отрезок сперва отсечь
выполнить
'в
1/5
.
-
1.
wn
получается,
видимый. На практике корректный результат
однородных координатах
ТРЕХМЕРНОГО ТЕЛА
3.13. ОПРЕДЕЛЕНИЕ ВЫПУКЛОСТИ
И ВЫЧИСЛЕНИЕ ВНУТРЕННИХ НОРМАЛЕЙ К ЕГО
ГРАНЯМ.
Таблица 3.14.
Грань
w
Верхняя
[0
-1
Нижняя
О
1
[
Правая
01 (
01
1.
I,
1)
wn
[-1
0
51
0
2
1
2
7]
2
-2
(-1. -I. -I)
[
(
h
выпуклости
Ранее описанный двумерный алгоритм определения
0
и
0J
[-1
0
5]
1
О
использует
01 (-1. -1, -1) [ I
1.
1] ( 1.
I) |-1
2
7]
I
О
Эта процедура
трехмерных многогранников.
0
51 -5
12
I] (-1.-1, -1) [
2
71
7
-12
I.
1,
I)
[
О
Ближняя
[ О
О
Г
О
О
n <
0, верхний предел UB); при Dn > 0, нижний
1
5/12
7/12
предел
в
из вершин грани оказалась
Перенести тело так, чтобы одна
(/н).
координат.
Повернуть тело относительно
одна из двух смежных
скольку теперь оба конца отрезка оказались вне
отсекателя2\ то алгоритм Кируса
—
и
координат точек, лежащих
на
каждой
из
граней отсскателя, из примера 3.17, провезем теперь вначале отсечение относительотносительно объема (—1, 1, -1, 1, 1. -1). Здесь
директриса отрезка
Р{Р2 равна
D
=
Р,
-
Р,
=
[0 -1 -6]
-
[0 1 6]
=
[0 -2 -12]
Апа шз табл. 3.14 показывает,
5/12 < / < 7/12.
Координаты концов вшпмого участка отрезка равны:
вокруг
РE/12)
РG/12)
=
[0
1
[0
1
б] + [0
-2
6]-г |0
-2
-121E/12) «Г0
1/6
I]
-121G/12) «[0 -1/6 -Ц
однородных координатах
имеем для видимого куска
отрезка:
1/6
I
П
I
0
0
0
-1/6
-1
lj
0
1
0
0
0
0
1
-1/5
0
0
0
I
[о
-
5/24
5/4
5/36
-5/6
[1-1].
с
выбранной оси координат так, чтобы
выбранная грань легла на координатную
на плоскость z
—
0.
вершин тела,
всех
знаки
плоскость, например
принадлежащих выбранной грани,
не
координаты,
которая
перпендикулярна этой
грани; здесь это будет координата zравны нулю,
относительно выбранной грани. Ес-
Если эти знаки для всех вершин совпадают
=
Выполняя преобразование проецирования этих точек в
[0
тело
Повернуть
проверить
что отрезок видим в интервале
координат так, чтобы од-
х.
одной из осей координат, например с осью
Для
Результаты отсечения приведены в табл. 3.14.
начала
выбранной вершине сторон грани совпала
Бека отбросит его как невидимый.
Взяв значения внутренних нормалей
будет выглядеть так:
тела выполнить следующее:
Для каждой полигональной грани
начале
При D
0
его
вычисления
О
1
'»
внутренних нормалей, который
на случай трехповороты и переносы, можно обобщить
многоугольника
[ -1
Левая
Датьняя
'н
или
то тело
будет выпуклым
Если тело
выпукло относительно всех своих граней,
считается
выпуклым,
—
в
то оно счи-
противном случае тело невыпукло.
Если для всех вершин значения координаты, перпендикулярт. е.
перпендикулярной выбранной грани, равны нулю, то тело вырождено;
оно плоское.
заданный
Вектор внутренней нормали к выбранной плоскости,
все нулевые компов повернутой системе координат, имеет
этой плоскости.
кроме той, которая перпендикулярна
с
Знак этой компоненты для выпуклой грани будет совпадать
компоненты,
Полученный результат корректен.
ранее найденным знаком.
Для определения искомой ориентации внутренней нормали
координат нужно применить
исходной
системе
обратное
преобразование поворотов.
Пример 3.21. Определение выпуклости
2)
200
И по отлу сторону or ею дальней
грани.
Рл. 3. Отсечение
—
Прим. перев
к
в ис-
ней только об-
тела
В качестве частного случая рассмотрим куб со срезанным углом, который уже
описывался выше в примере 3.19. Этот
опи-
куб изображен на рис. 3.24, а. Определим при
3.13. Определение выпуклости трехмерного
тела
псшоши
изложенного алгоритма
факт выпуклости этого отсскателя
относительно
грани, которая обозначена на рис. 3.24, а
буквами abc. Сначала перенесем это
так,
чтобы точка а совпала с началом
преобразования в однородных
координатах
[Г]
координат.
(см. [1-1]):
| I О
О
О
0
10
0
0
0
1
0
Проекция результата на плоскость z = 0
вокруг оси z на угол 0
=
cos<9
=
тело
гакова
=
№
-45° совмещает
Матрица 4x4 этого преобразова-
sin в
sintf
0
0
в
0
0
cos
0
0
10
0
0
0
1
0
показана
на
этого
преобразования на плоскость z
Проекция результата
чтобы совместить плоскость
с. Остается сделать поворот вокрут оси д\
рис. 3.24.
=
0. Координаты точки с на рис. 3,24, с равны
abc с координатной плоскостью у
0.565685, —0.8). Угол поворота О1носитсльно оси v равен:
-
10
-I
-
I
@.565685,
показана на рис. 3,24, Ь.
Поворот тела во-
ребро аЬ с осью х. Матрица этого
преобразования в однородных
координатах имеет вид
а
=
arctgCv Z)
arclg[0.565685/(-0.8)]
=
-35.2644°.
=
преобраплоскостью \>
(см. [1-1]):
=
0. А пово-
Поворот на этот угол поместит тело под координатной
плоскостью. Последний реол A80°—а) поместит это тело над указанной
поворот на yi
результат
изображен на рис. 3.24, d в проекции на плоскость z
=
0. Maipima этого
поворота равна:
1**1
1
0
0
о
cos a
sin а
0
о
cos а
1
о
0
0
1
=
—
sin a
0
Ор аи паты всех вершин тела, не лежащих
на плоскости
Значит, это тело выпукло относительно грани
0, положительны. Зна-
результирующем положении, равна
в
[0 sign(v) 0]
=
=
—
abc.
Внутренняя нормаль к грани abc, заданной
п'
v
[0 1 0]
Обратный поворот даст
П
=
|0.5777 -0.5774 -0,5774]
П
что и ожидалось.
=
Ц -1-1]
Для доказательства выпуклости тела описанную процедуру след>-
ei повторить для всех остальных его граней
3.14. РАЗРЕЗАНИЕ НЕВЫПУКЛЫХ ТЕЛ
Трехмерная версия алгоритма Кируса
выпуклыми отсекателями. Вместе
с тем
—
Бека работает с выпуклы-
существует
потребность отсечения
Ее можно удовлетворить путем реаиз
реализации внутренних и внешних отсечений выпуклыми объемами,
относительно невыпуклых тел.
которых
состоит невыпуклое тело.
Этот подход аналогичен тому
невы-
методу, который уже обсуждался ранее в связи с отсечением
невыпуклыми многоугольниками (разд. 3.6). Задачу разрезания простого
невыпуклого тела на составляющие его
Рис. 3.24. Определение
202
выпуклости тела и нахождение внутренней
нормали.
решить
путем
был
описан
что
тело
обобщения
метода
выпуклые тела можно ре-
переносов и
поворотов,
который
предыдущем разделе. В алгоритме предполагается,
с плоскими гранями.
представляет собой многогранник
в
Гл. 3. Отсечение
3.14. Разрезание неныпуклы.ч
тел
Процедура разрезания такова:
У.
Для каждой полигональной грани тела
Перенести тело так, чтобы одна из вершин выбранной
совпала
с
началом
II
грани
координат.
Повернуть тело вокруг начала координат так, чтобы одно из
инцидентных ему ребер совпало с
одной из осей координат, нанапример с осью х.
Повернуть тело вокруг выбранной оси координат так,
выбранная грань совпала с одной из координатных
чтобы
плоскостей,
например
с плоскостью z
=
а
9
0.
Проверить знаки координаты, которая
перпендикулярна вывыбранной грани (т. е. координаты z), для всех вершин
тела, не лележащих на этой грани.
Если все эти знаки совпадают или
является
равны нулю, то тело являетвыпуклым относительно этой грани. В
противном случае оно
невыпукло;
разрезать
тело
плоскостью,
несущей
10
выбранную
грань.
Повторить всю процедуру с каждым из вновь образовавшихся
тел. Продолжать
работу до тех пор, пока все тела не
станут
выпуклыми.
Рис. 3.25. Разрезание невыпуклого тела.
Пример 3.22. Разрезание невыпуклого тела
Рассмотрим невыпуклое тело, изображенное на рис. 3.25, а. Его
следующими вершинами:
задняя:
ритма. Сначала
грани задаются сле-
0, 0), Р2@, 0, 0), Р3@. 2, 0), Р4A, 2,
0)
Р5A. 3/2, 0), Р6C/2. 3/2, 0), Р7C/2, 2,
0). Р8C, 2, 0)
Р9C. 0, 2), РШ(О, 0, 2), РП(О, 2. 2), Р12A.
2, 2)
Р|3A. 3/2, 2), Р14C/2, 3/2, 2), Р15C/2. 2,
2), Р16C, 2, 2)
^2@. 0, 0), Р,о(О, 0, 2), Ри{0, 2,
2), Р3@. 2, 0)
Р|C. 0. 0), />8C, 2. 0), Р16C. 2, 2), Р9C, 0. 2)
Р|C, 0, 0). Р2@, 0, 0), Р,о(О. 0, 2), />9C, 0,
2)
/>2A, 2, 2), Р4(\, 2, 0), />3@, 2, 0), Р,,@. 2, 2)
Р|ЗП, 3/2. 2), Р5A. 3/2, 0), Р4A, 2, 0). />,,(!. 2,
2)
Р|зA, 3/2. 2). РмC/2. 3/2, 2). РбC/2. 3/2. 0).
Р5A. 3/2. 0)
РбC/2. 3/2, 0). Р7C/2, 2, 0), Р|5C/2, 2, 2). Р|
4C/2. 3/2. 2)
Р|бC. 2, 2), Р8C, 2. 0), />7C/2. 2. 0), РMC/2, 2,
2)
.
передняя:
левая:
правая:
нижняя:
верхняя слева:
левая у выемки:
нижняя у выемки:
правая у выемки:
верхняя справа:
Проверим выпуклость этого тепа относительно грани, названной «левая
выемки»
204
и
помеченной
у выем-
буквами ube на рис. 3.25, а, с помощью изложенного выше ал ю-
Гл. 3. Отсечение
гело
переносится так, чтобы вершина
Р5, помеченная на рис. 3.25, а
буквой а, совпала с началом координат. Одновременно- этот перенос совмещает вервершину Р13. помеченную на рис. 3.25, а буквой Ь, с положительной полуосью z. КомКомпоненты вектора переноса относительно осей л\ у, z равны (—1, —3/2, 0) соответсоответственно.
Поворот
Результат переноса в проекции на плоскость z
—90е вокруг
тела на
оси z совмещает плоскость
0. Результат этого поворота
спек шве показаны, на рис. 3.25, с и d.
плоскостью у
=
=
в
проекции на
0 показан на рис. 3.25, Ь.
abc с
координатной пло-
плоскость z
—
0 и в пер-
Проверка знаков ординат вершин показывает, что тело нсвыпукло. Оно разрезаразрезается плоскостью у
гело
координаты
*2
—
ниже.
которых
=
0 на два тела
У^ и У2- Тело J'j лежит выше плоскости .у
=
Грани этих тел описываются следующими вершинами, координа-
заданы в исходном положении тела:
(нижняя):
Р2@. 0. 0), Рю@. 0, 2). />п@. 2. 2). Рз<0. 2, 0)
Р,'оA. 0, 2), Р5'A. 0. 0). Р5A. 3/2, 0). Р|зA. 3/2. 2)
правая (верхняя):
Pi3(l. 3/2, 2), Р5A. 3/2. 0), ?4A, 2, 0). Pi2(l. 2, 2)
верхняя:
нижняя:
/>12A, 2. 2), Р4A. 2, 0), Рз(О. 2, 0). Рм@. 2. 2)
левая:
правая
0, а
Р:@, 0, 0),
3.14. Разрезание невыпуклых
Р5'A, 0, 0). Р,'()(!¦ 0, 2), Рю@. 0. 2)
тел
перешяя:
Р\оЮ. 0. 2). />;0A. о. 2), Л»|3€ 1
задняя:
Я,'A. 0. 0), А>2@, 0. 0). А\,<0. 2, 0). />4A. 2. 0), Р5<1. 3/2, 0)
-
3'2. 2). Рр(]. 2. 2).
псвая:
Р5<\. 0. 0). Р,'оA
правая:
Р|C. 0. 0). Р$(?. 2. 0). Р|6C, 2, 2). Р9О. 0. 2)
/у3/2. 3/2. 0), />7C/2. 2. 0), Р|5C/2, 2, 2), РыО/2,
3/2. 2)
Р\з(\. 3/2. 2). Р|4C/2, 3/2. 2). РьО/2. 3/2. 0), Psd.
3..2, 0)
Р|бC. 2. 2). PsC. 2. 0). Р?C/2. 2, 0). />|5C/2. 2, 2)
правая у выемки:
нижняя у выемки:
верхняя справа:
Отсекающее
Г
0, 2), Л»i.ч< 1. 3*2. 2), Р5{\. 3/2. 0)
Отсечение
Pi(U 0. 0), Р\О. 0. 0), />9C. 0. 2). Р,'о(|. 0, 2)
нижняя
После повторной обработ ьн алгоритмом каждого из этих тел
выпуклым, а
_|
I
( будет объявлен
Уу будет разрезан на лва новых тела, которые потом тоже окажутся
выпуклыми. Окончательный результат
в
разрезанном виде показан
на
рис.
3.25. е.
Рис. 3.27. Отсечение многоугольника:
3.15. ОТСЕЧЕНИЕ
Разумеется, многоугольник можно рассматривать как
набор отрезотрезков. В приложениях, связанных с
вычерчиванием штриховых изо-
изображений, не слишком существенно, если многоугольник разбит на
отрезки до его отсечения. Если замкнутый многоугольник отсекает-
набор отрезков, то исходная фигура может превратиться в
один или
более открытых многоугольников или
совокупностью
Однако если
то
не связанные между
собой многоугольники.
МНОГОУГОЛЬНИКОВ
Предыдущее обсуждение было связано с отсечением отрезков. Ра-
отсекается, как
|~
просто стать соворазрозненных отрезков, как показано на рис. 3.26. Одна-
многоугольники
рассматриваются
как
сплошные
необходимо, чтобы замкнутость сохранялась
Для примера на рис. 3.26 это означает, что
и
области,
результирующего многомногоугольника. Добавление отрезков ef и fg представляет особые трудбыть
должны
трудности.
добавлены
к
описанию
Трудные вопросы возникают и тогда, когда результат отсе-
собой несколько несвязанных между собой мномногоугольников меньших размеров, как это показано на рис. 3.27. На-
отсечения представляет
а/, показанные на рис. 3.27, включавключаются в описание результата. Если, например, исходный многомногоугольник объявлен красным на синем фоне, то отрезки аЬ'и cd то-
Например, иногда отрезки ab
тоже
и
будут выглядеть красными на синем фоне. Это противоречит
ожидаемому результату.
у результата.
отрезки be,
ef, fg и ha
3.16.
ПОСЛЕДОВАТЕЛЬНОЕ ОТСЕЧЕНИЕ
МНОГОУГОЛЬНИКА
—
~\
Отсекающее
окно
АЛГОРИТМ САЗЕРЛЕНДА
~1
Основная идея алгоритма Сазерленда
том,
Отсечение
—
что
плоскости
отсечь
многоугольник
очень
легко.
В
этом
ХОДЖМЕНА
—
Ходжмена
[3-7] состоит в
одной прямой или
алгоритме исходный и каждый из
относительно
промежуточных многоугольников отсекается последовательно ототносительно одной прямой. Работа алгоритма для прямоугольного
окна показана на рис. 3.28.
списком
Р2Рз>
L
Рп, который порождает список его ребер Р{Р2>
Л» РпР\- На Рис- З-^8 показано, что многоугольник
вершин Р,,
•••»
сначала
рп
-
Исходный многоугольник задается спи-
...,
отсекается
левой стороной окна,
в
результате чего получа-
получается промежуточная
Рис. 3.26. Отсечение
многоугольника:
206
Гл. 3. Отсечение
фигура. Затем алгоритм вновь отсекает эту
фигуру верхней стороной окна. Получается вторая промежуточная
открытый многоугольник.
фигура. Далее процесс отсечения продолжается с оставшимися сто3.16.
Последовательное отсечение многоугольника
Вишмая сторона
Видимая сторона
, Отсечение
Or сскаюшее
Исходный
певой
Видимая сторона
Видимая сторона
'Р
по
/
стороне
окно
/
/S
S
/
/
/
Отсекающая
~
~
плоскость
Отсечение по
i
верхней стороне
Полная вилимость.
Результат Р.
Полная невидимость.
Выход из обпасти
Нет результата.
видимости.
видимости.
точка.
0 точек.
Результат I.
Результат I и Р
I точка.
2 точки.
Вхол
в
область
Отсечение no
Рис. 3.29. Взаимное расположение
ребер и отсекающей плоскости.
нижней стороне
н
результат
I Отсечение по
правой стороне
I
Если рассматриваемое ребро полностью видимо, то результатом
будет вершина Р. Заносить в результат начальную вершину S в
этом
случае
не
надо, так
как
если
вершины рассматриваются
по-
поочередно, то S уже была конечной точкой предыдущего ребра и попоэтому уже попала в результат. Если же ребро полностью невидиневидимо,
Рис. 3.28. Последовательное отсечение многоугольника.
ронами окна. Этапы отсечения показаны на рис. 3.28. Заметим, что
добавление угловой точки Qs в окончательный результат отсечения
теперь стало тривиальным. Этот алгоритм способен отсекать
сторонами
окна
Порядок отсечения многоугольника разными сторо-
непринципиален.
Результатом работы алгоритма является список вершин многомногоугольника, у
которого
все
вершины лежат по
видимую
сторону
отрезка
одной отсекающей
относительно
рассматривать
плоскости.
Будем рассматри-
каждую точку Р из списка вершин многоугольника,
исключением
за исклю-
первой, как конечную точку ребра, начальной точкой
S ко-
которого является вершина, предшествующая Р в этом списке. Тогда
возможны
только
четыре ситуации взаимного расположения
и отсекающей плоскости. Они показаны на рис. 3.29.
Результатом
каждого
сопоставления
ребра
ребра
многоугольника
результирующего усеченного многоугольника нуля, одной или двух вершин.
Гл. 3. Отсечение
результат точку пересечения ребра и отсекающей
плоскости.
Если же ребро входит в область видимости, то следует
поступить
точно
так
же.
Поскольку
в
последнем
случае конечная
вершина Р ребра видима, то она также должна попасть в результат.
Для
первой вершины многоугольника необходимо определить
только
факт ее видимости. Если вершина видима, то она попадает
в
результат и становится начальной точкой S. Если же вершина не-
невидима,
она тоже становится
начальной точкой, но в результат не
попадает.
Последнее ребро
—
РпРх
—
следует рассмотреть особо. Это ре-
реализуется путем запоминания первой вершины многоугольника в F.
ребром становится PnF, и его можно обрабатыобрабатывать точно так же, как и любое другое ребро.
Прежде чем описать алгоритм полностью, приведем два дополдополнительных соображения, касающихся определения видимости точки
и определения пересечения ребра многоугольника с отсекающей
Тогда последним
плоскостью.
с
отсекающей плоскостью будет занесение в список вершин результи-
208
определить и занести в
независимо от других, то достаточно рас-
рассмотреть только возможные ситуации расположения одного отрез-
области видимости отсекающей пло-
Если ребро выходит из области видимости, то надо опреде-
плоскости.
от
очередной отсекающей плоскости. Поскольку каждая сторона мномногоугольника отсекается
или входить или выходить из
лю-
любой многоугольник, выпуклый или невыпуклый, плоский или ненеплоский, относительно любого окна, являющегося выпуклым мномногоугольником.
результат не изменяется.
Если ребро многоугольника видимо неполностью, то оно может
то
Определение видимости точки эквивалентно определе-
определению той стороны границы отсекающей плоскости, по которую лележит эта точка. Если
по часовой
209
ребра отсекающего многоугольника обходятся
стрелке, то его внутренность лежит по правую сторону
3.16. Последовательное отсечение многоугольника
от
фаницы.
левую
При противоположном порядке обхода она лежит по
сторону. Ранее рассматривались два метода определения по-
(видимости) точки относительно ориентированного отрезотрезка или плоскости. Первый сводится к определению знака
скалярно-
Используя метод векторного произведения с Р, (- 1, 0)
саучая точки
Р3:
положения
скалярного произведения вектора нормали на вектор, начинающийся в
пропроизвольной точке на прямой или плоскости и заканчивающийся в
пробной точке (см. разд. 3.5). Второй метод заключается в подстановподстановке
(см. разд. 3.9). Последний метод является вариантом
того, что было предложено Сазерлендом и Ходжменом в [3-7].
Третий метод определения видимости сводится к проверке знака
или
<*э
это означает, что
плоскости
"
это означает, что
х
Пусть две точки Р, и Р2 лежат на отсекающей
это пробная точка. Эти три точки задают
плоскости, а Р3
некую
на
лежат
плоскость,
два вектора:
которой
Р,Р2 и Р,Р3. Если эту
1-2
=
У0
(-ПИ2
-
-
0)
-2 < 0,
=
Р3 лежит слева от PjP2- Для Р3' имеем:
6 > 0,
(-1I-2
[2
*№г У\)
(*з
=
"
=
-
Р3 лежит справа от Р,Р2.
Метод подстановки координат особенно прост. Здесь пробная функция равна
»• Для точки
Р3:
-
Р3:
для
(-1)
-
2
=
w
-
v3'
-2
=
w
-
хг
координаты z у векторного произведения двух векторов, лежащих в
одной плоскости.
"
*1>0Ъ
-
пробной точки в уравнение ориентированной прямой
координат
Р2(- I, 2), получаем для
и
=
-1
<
0
(-1)= 3 > 0
-
Р3 и Р3 лежат слева и справа от PjP2 соответственно.
отсекающей
Это доказывает, что
Взяв в качестве внутренней нормали п
=
[1 0J, а в качестве точки на
—
плоскость
(х3
компоненты
плоскостью ху,
то
у
векторного
—
—
—
-
—
будет положительным, нулевым или отрицательным, то
z
Р3: п [Р3
для Ру- п [Р3'
Р3 будет лежать соответственно справа, на или слева от прямой
Р Р
Все эти методы реализуются особенно просто для случая
прямо-
•
для
произведения
Р,Р3 (Я) PjP2 ненулевой будет только компонента z, равл',H>2
У\)
{уъ
У1)(х2
х{). Если знак этой компо-
векторов
равная
считать
плоскости f(-l, 0), получаем скалярное ироизведепие двух векторов:
•
Это
опять доказывает,
что
координатным
окон,
стороны
которых
параллельны коор-
осям.
=
[1 0] (-1 1] =
f]
=
[1 0] [3 1]
-
=
-1 < 0
3 >0
Р3 расположена слева, а Р3
—
справа от отсекающей
При использовании этих тестов видимости ребро многоугольниего конца видимы, и полмногоугольника будет полностью видимым, если оба
если
оба
они
невидимы.
Если
же
ребра видим, а другой невидим, то ребро пересекается
отсекающей
Пример 3.23. Определение положения точки относительно плоскости
f]
плоскости.
полностью невидимым,
прямоугольных отсекающих
-
плоскостью и нужно вычислять точку
один
с
конец
отсекаю-
пересечения. Для этого
любые изложенные выше алгоритмы отсечеБека (разд. 3.5), простой или паотсечения отрезка, например Кируса
3.1 и 3.4) или разбиение средней точкой
можно
использовать
—
Рассмотрим отсекающую плоскость х
как
показано
н<а
рис.
=
vj
=
3.30. Нужно определить
-], ьоторая перпендикулярна оси х,
положение двух точек
Р'Л2, 1) относительно данной отсекающей плоскости.
Р?(— 2, 1) и
параметрический (разд.
что реа(разд. 3.3). Подчеркнем опять, и это было показано выше,
реализация данных алгоритмов
Р2
особенно проста в случае, когда отсе-
У
отсекающее окно является прямоугольником со сторонами, параллель-
2\
параллельными координатным осям. Алгоритмы
Кируса
—
Бека и разбиение
всей своей общности.
средней точкой, разумеется, применяются во
Однако пересечение двух параметрически заданных отрезков,
лежащих в одной плоскости, требует некоторого уточнения.
1-
Рз-
Два отрезка с концевыми точками
соответственно можно задать
-3
-2
-1
0
лежа-
Рр Р2 и Р3, Р4 соответствен-
параметрически следующим образом:
=
Р, + (Р2
-
P{s)
Р@
=
р3 + (Р4
-
P,)s, 0 < 5 ^ 1
и
Отсекающая
ръ)и о < t ^ 1
п юскость
Рис. 3.30. Тесты видимости.
210
Гл.
В точке
их
пересечения
P(s)
=
P(t). Напомним, что P(s) и P{t)
3. Отсечение
3.16. Последовательное
отсечение
многоугольника
являются
P{t)
=
векторно-значными функциями, т. е.
P(s)
=
Замыкание
С Обработка вершины P*F J
[x(s)y(s)]f a
многоугольникаГ^Ч
[x(t) y(t)]. Отсюда следует, что из последнего
векторного
уравнения получаются два скалярных уравнения с
двумя неизвестнеизвестными 5 и /, т. е. в точке
=
пересечения x(s) =
и
x{t)
последние уравнения
y(s)
нет
y(t)- Если
вообще не имеют решения, то отрезки
параллельны. Если же решение есть, т. е. s или t
нет
парал-
выходит за пределы до-
Отрезок SP пересекает
области, то отрезки не имеют общих точек. Особенно
удобна матричная форма записи последнего
уравнения.
огсекаюшую плоскость
допустимой
Пример 3.24. Пересечение параметрически заданных отрезков
Возьмем два отрезка, показанных на рис. 3.31, от
Р4[0 2J. Здесь
P(s) = [0 0] + [3 2]s. a P{t)
=
Р, [0 0] до Р2[3 2] и от Я3[3 0] до
Отрезок SF пересекает
отсекающую плоскость?
Вычислить точку
Занести I
I
в
пересечения SP
и
\1
рсзулыат/i
отсекаюшей плоскости
Вычислить точку 1
пересечения SF с
[3 0J + [-3 2]t
отсекающей плоскостью
Приравнивание компонент х и у этих векторов дает систему из двух уравнений:
3s
Занесги I
=
3
-
Ъ!
S лежит
25 = 2/
з результат
на видимой
нет
стороне отсекающей
Ее решением является
Переустановить F
плоское ги?
s
=
(
=
1/2
1 да
Точка пересечения имеет координаты:
P,ls)= [0 0] + [3 2]-0/2)
=
[Занести S
[3/2 1]
ПерсГгти к следующей стороне окна
в результат
Выход
( Выход)
Как уже упоминалось,
Сазерленд и Ходжмен [3-7] предложили
новый метод формирования
последовательности промежуточных
многоугольников. Напомним, что в их
алгоритме ребра многомногоугольника обрабатываются
А
это значит, что можно
поочередно.
b
a
Рис. 3.32. Блок-схема алгоритма Сазерленда
—
Ходжмена.
использовать с минимапьными
изменениями прежние коды концеконцевых точек
обрабатывается
ребер. Последняя вершина многоугольника обрабатыва-
особо. На рис. 3.32 приведена блок-схема этого
заимствованная
с
некоторыми
изменениями
из
алгоритма, заработы [3-7]. На
3.32, а приведена процедура, применяемая к рядовой вершине,
а процедура на рис. 3.32, b применима только к последней вершине
рис.
многоугольника. Запись алгоритма, порождающего
запоминающего
и
запоминаю-
промежуточные многоугольники, приводится ниже.
Сазерленд и Ходжмен показали, как можно избежать порождевершин промежуточных многоугольников. Для
этого вместо отсечения каждого ребра (вершины) многоугольника
порождения и запоминания
ограничивающей окно, надо отсекать каждое
такое ребро (вершину) последовательно всеми границами окна. ПоПосле отсечения очередного ребра (вершины) многоугольника по ододной из границ окна, апгоритм рекурсивно обращается к самому сесебе, чтобы отсечь результат предыдущего обращения по следующей
границе окна. Это свойство делает данный алгоритм более удободной плоскостью,
Рис. 3.31. Пересечение параметричепараметрически заданных
отрезков.
удобным для
212
аппаратной реализации.
Гл. 3. Отсечение
3.16. Последовательное
отсечение
многоугольника
Алгоритм Сазерленда
Ходжмена для
—
отсечения
j
обработать замыкающее ребро многоугольника
то перейти к следующей стороне
если результат пуст
next
3
много-
многоугольника
Р
массив
вершин исходного многоугольника
массив
вершин результирующего многоугольника
массив
вершин отсекающего окна.
повторяется в
конце массива
—
число
вершин исходного многоугольника
—
число
вершин результирующего многоугольника
число
вершин окна плюс единица
—
Q
—
W
Np
Nq
Nw
—
окна
if
Первая вершина повторя-
0 then 4')
проверить
факт пересечения последним ребром многоокна
многоугольника стороны
call Факт—сеч(S, F, Wif Wi+I; Признак)
нет then 4
if Признак
=
—
факт пересечения установлен; вычислить точку пересе-
вершины всех многоугольников перечисляются по часовой
стрелке
для каждой стороны окна выполнить:
for i
1 to
=
Nw
установить
пересечения
N
Q
счетчик
вершин результата
и
вывести точку
обнулить
каждое ребро многоугольника по данной
=
1 to
4
if j <
>
1
F=Pj
go to 2
проверить факт пересечения ребром многоугольника
стороны окна
если
=
нет
многоугольника
call Видимость (Начало, Wl, W2; Твидимость)
ТвидимостьЛ = Твидимость
определить видимость конечной точки ребра многоугольника
точку
call Видимость (Конец,
Pj, Wj, W|+I; Тсечения)
Твидимость2
занести точку пересечения в
результат
call Выход (Тсечения,
2
S
считается,
NQ, Q)
Pj
Твидимость
ребро многоугольника, которое начинается
на
стороне окна,
if Твидимость! < 0 and
это
S) ребра многоугольника
call
Видимость^, Wj} Wi+I; Бвидимость)
if 8видимость
<
занесена в
не
пересекается
с
результат ранее
Твидимость2 > 0 or
Твидимость! > 0 and Твидимость2 < 0 then
0 then 3
видима,
то занести ее в
результат
Выходу, NQ, Q)
Гл. 3. Отсечение
что
Wl, W2; Твидимость)
Эта точка должна быть
проверить видимость конечной точки (теперь
call
=
или заканчивается
начальную точку ребра многоугольника
если точка
Q
Q
subroutine Факт-сеч (Начало, Конец, Wl, W2; Признак)
определить видимость начальной точки ребра многоугольни-
then 2
пересечения
call Пересечение(S,
=
подпрограмма определения факта пересечения ребра многоугольнимногоугольника со стороной окна
ребро пересекает сторону окна, вычислить точ-
изменить
=
finish
Факт—сеч(S, ?}, W;, Wi+J; Признак)
if Признак
=
NQ, Q)
next i
5
then 1
запомнить первую вершину
call
Р
Np
Np
особо обработать первую вершину многоугольника
1
результат
отсечения
стороне
окна
for j
в
Теперь многоугольник отсечен стороной W. W} + , окна
работа алгоритма возобновляется с результатом отсе-
0
отсечь
пересечения
call Выход (Тсечения,
=0
=
Пересечение(S, F, W|t Wi+1; Тсечения)
call
1
-
результат
214
=
NQ
*
В этом случае следует вообще выйти из алгоритма.
3.16. Послслоншсльиое
отсечение
многоугольника
—
Прим. перев.
ней.
Признак = да
сформировать матрицу Коэф
Р1х
Р2х
КоэфA,1)
W2x
Wlx
КоэфA,2)
Ply
Р2у
КоэфB,1)
W2y
Wly
КоэфB,2)
сформировать матрицу правых частей
Plx
Wlx
ПравA,1)
Ply
Wly
ПравB,1)
обратить матрицу коэффициентов
else
-
=
Признак
=
нет
-
=
end if
-
=
return
подпрограмма определения видимости точки
subroutine Видимость (Точка, PI, P2; Твидимость)
видимость Точка следует определить относительно
стороны
=
-
=
-
=
-
необходимости проверять здесь невырожденность
этой матрицы, поскольку факт пересечения уже установ-
нет
О, если Точка невидима
=0, если Точка лежит на стороне Р, Р2
> 0, если Точка видима
<
|
Твидимость
(^
в
этой подпрограмме используется вычисление
установлен
Коэф
Обрат (Коэф)
векторного произ-
=
Параметр
координаты точки пересечения
вычислить
функция, принимающая значения
1, 0, 1 в зависимости
от того, будет ли знак ее
аргумента отрицателен, равен
—
параметров в точке пересечения
(Коэф) Умнож (Прав)
вычислить значения
произведения
Sign
=
—
Тсечения = Р1 +
(Р2
-
Р1) * ПараметрA,1)
return
нулю или положителен
Раб1
=
Раб2
=
РабЗ
=
(Точка х
(Точка у
Раб1
-
Твидимость =
-
-
Р1х) * (Р2у
Ply) * (Р2х
-
-
подпрограмма формирования результирующего многоугольника
Ply)
Р1х)
subroutine Выход (Вершина,
Раб2
Вершина содержит точку, заносимую в результат
Sign (РабЗ)
увеличить
return
в
NQ
subroutine
Q(Nq)
Пересечение^ 1, Р2, Wl, W2; Тсечения)
подпрограмма использует параметрическое описание отрезков
отрезки Р{ Р2 и W, W2 считаются двумерными
и
у
у двух парамет-
параметрических описаний отрезков
—
матрица
2x2,
содержащая
коэффициентов,
уравнения отрезка
Параметр
—
матрица
описания
ПараметрA,1)
Прав
—
—
2x1, содержащая
значения
параметров
отрезков
значение параметра описания
да
—
матрица 2x1, содержащая значения правых частей урав-
NQ + 1
=
Вершина
Ходжмена. Будет показана также одна
особенность этого ал-
возникновение ложных границ. Во многих приложениях
возникновение таких
границ несущественно, например при
сплошных областей. Однако в ряде других
ложных
растровой развертке
приложений, например
невидимых
отрезка Р
=
СазерленПример 3.25 продемонстрирует работу алгоритма
алгоритма:
значения
вершин результата и добавить точку
return
матричное уравнение с неизвестными значениями параметров пополучается путем приравнивания компонент х
число
Q
подпрограмма вычисления точки пересечения двух отрезков
Коэф
NQ, Q)
поверхностей,
проделать путем
невидинекоторых алгоритмах удаления
Это можно
требуется устранение таких границ.
в
сортировки вершин так,
как
предложено в работе
[3-7].
уравнений
Обрат
—
Умнож
216
—
функция, обращающая матрицу
функция умножения матриц
Гл. 3. Отсечение
Пример 3.25. Отсечение многоугольника алгоритмом Сачерленда
Рассмотрим ммоюугольмик, вершины которого приведены в табл.
217
3.16. Последовательное отсечение многоугольника
—
Ходжмена
3.15. На рис. 3.33
Таблица 3.15
•
мере 3.23), имеем здесь пробную функцию
.v
Верши- Исходный много- Отсечение icnoft
ны
уго н.ннк
Опгечеиис псрхнеП Отсечение правой
стороной
стороной
l'ejy lbTU Г
Для точки
сiороной
н»
-
=
(
1/2. -3/2)
A'2, -3'2)
Pi
(
-2. -3/2)
(-1. -3/2)
A/2. -3/2)
(-1. -3/2)
Рз
(
, 2)
(-1.
2)
(-1.
Р4
(
3/2.
2)
C/2.
2)
Ps
(
3/2,
0)
C/2,
0)
Рь
(
1/2,
0)
A/2,
0)
C/2,
C/2.
A/2.
Pi
(
1/2.
3/2)
A/2,
3/2)
Pi
(-3/2,
3/2)
(-1.
3/2)
Р9
(-3/2,
1/2)
(-1.
0)
1)
1)
A/2.
(-1.
(-1.
A/2, -3/2)
(-1. -I)
-3/2)
("I.
I)
(-1.
( I.
( I.
0)
(-1
I)
I.
1)
(
1.
0)
0)
A/2.
0)
A/2.
1)
1)
1)
0)
(-1.
(-1,
1)
A/2,
1)
A/2.
1)
(-1.
0)
(-1.
=
I
-
(-1)
w, равную:
=
х +
1.
1/2 + I > 0.
Р2 лежит справа от края окна и видима.
Для точки Р(-2. -3 2):
л2 +
1)
(
0)
0)
Поэтому
~
/^,A/2, -3/2):
.v
Р\
х
х
1
=
-2 + 1 < 0.
плоскость. Значит, нужПоэтому /¦*, невидима. Ребро Р^Р? пересекает отсекающую
Воспользовавшись мето юм параметрического занужно вычислять точку пересечения.
-3/2.
-1. у
(см. пример 3.24), получаем х
-
-
0)
задания отрезка
Результаты отсечений показаны на рис. 3.33.
отсечения,
этапа.
(
0, -1)
т. е. отсечение нижним
краем окна.
Особенно интересен последний этап
Р, еще не отсечена до этого
Точка
Следовательно, в списке першмн промежуточного многоугольника сохраняет-
сохраняется тот же порядок обхода, что и в списке вершин
исходного многоугольника. Однаначи-
Р^ устраняется. Теперь список вершин
Последней в списке вершин
начинается с промежуточной вершины, соответствующей Р2.
окна
Однако после огсеченпя нижним краем
показано,
как
плоскостями
этот
хл
=
рассмотрим отсечение
окна
стороны
многоугольник
—
1, лп
=
1, Vj,
отсекается
=
-
1, i'H
=
кпадрагным
окном,
ограниченным
1. В качестве частного примера
рас-
ребра мпогоую шпика между вершинами
/', и Р2
«евым краем
При обходе краев оып по часопоИ стрепке внутренние или видимые ич
остаются
справа.
Используя
меточ
подстановки,
описанный
выше
сторо-
(и
результирующего миоюугольннка
будет точка пересечения ребра Р9Р,
с
нижним
краем окна.
на рис.
Заметим, что в верхнем левом углу отсекающего окна
четыре ложных
3.33 показаны че-
ребра и т границы результирующего многоугольника.
при-
Ходжмена, которая описаОднако
описана выше, предназначена для отсечения по двумерному окну.
Так, версия алгоритма Сазерленда
—
Отсечение по
Любой
алгоритм фактически обладает большей общностью.
плоский или неплоский многоугольник можно отсечь по выпуклому
левой
объему путем вычисления его пересечений с трехмерными
этот
ИсходпыП
стороне
отсекающими плоскостями при помощи алгоритма
Алгоритм
для
Отсекающее
работу
окно
по
верхней стороне
Qe
—
Ходжмена
можно
и результат
Отсечение по
описан в
оригинале,
оптимально
окнами,
однако
приспособлен для отсечения пря-
его можно
обобщить
основан
на
случай
на идеях,
алгоритма отсечения двух- и трехмерных отрез-
работает
вдвое
быстрее,
чем
алгоритм
Ходжмена.
Рис. 3.33. Результаты отсечений
примера 3.24.
218
и
отрезков, который принадлежит тем же авторам [3-5]. Эксперименты
алпоказали, что для прямоугольных окон этот оптимизированный
алгоритм
правой стороне
3.8 и рабо-
Барский предложили [3-8] новый алгоритм отсечения
в какой он был
многоугольников. Этот алгоритм в той форме,
заимствованных из
нижней стороне
и
и
произвольных выпуклых окон. Данный алгоритм
Отсечение по
использовать
[3-7]).
прямоугольными
Q-
Сазерленда
Бека. Алго-
—
разрезания невыпуклых многоугольников (см. разд.
Лианг
Отсечение
Ql,Ql
отсечения
Кируса
отсекаю-
1л. 3. Отсечение
3.16. Последовательное
отсечение
многоугольника
Сазерленда
—
3.17. НЕВЫПУКЛЫЕ ОТСЕКАЮЩИЕ ОБЛАСТИ
ВЕЙЛЕРА
Для
—
АЛГОРИТМ
АЗЕРТОНА
—
использования вышеизложенных алгоритмов отсечения
требуются выпуклые отсекающие
области. Однако
во многих
требу-
приложе-
приложениях, например при удалении невидимых поверхностей, необходимо
уметь отсекать и по невыпуклым областям. Этой потребности ототвечает более мощный, но и более сложный алгоритм, предложен-
предложенный Вейлером и Азертоном [3-9]. Данный алгоритм позволяет проотсечение
производить
невыпуклого
многоугольника
отверстиями
по
также
внутренние отверстия.
имеет
который
многоугольник,
с
внутренними
Отсекаюший
многоугольник
Отсекаюший I
-I
многоугольник
Обрабатываемый
Обрабатываемый
многоугольник
другому невыпуклому многоугольнику, который
Будем
называть
обрабатываемым
отсекается,
многоуголь-
многоугольником,
многоугольник, по которому производится отсечение,
—
а
С
Q
отсекаю-
(отсекателем). Новые границы, образуемые
в результате отсечения обрабатываемого многоугольника отсекаю-
i
i
Jib
отсекающим, совпадают с участками границ отсекателя. Никаких иных но-
границ не возникает. Следовательно,
результате
Как
Начало-
число
многоугольников в
I
минимально.
обрабатываемый, так и отсекающий многоугольники опи-
описываются в
из
этих
многоугольников
обходится
многоугольника в
внутренняя
их
то
следования
в
или
точки
выходит оттуда.
от
границы.
Границы
образуют пары. Одно пересечение из пары
когда ребро обрабатываемого многоугольника входит
вид:
не
а
другое
—
когда оно выхо-
Основная идея заключается в том, что алгоритм начи-
точки
пересечения
обнаруживается еще одно ее
точке
далее
входного
типа,
затем
он
прослеживает
последнего
обнару-
пересечение с отсекающим многоугольником.
пересечения производится поворот направо
прослеживается
внешняя
стрелке до тех пор, пока не
граница
отсекателя
по
и
часовой
обнаруживается ее пересечение с обра-
обрабатываемым многоугольником. И вновь в точке последнего пересепересечения
производится поворот направо
и
далее прослеживается гра-
граница обрабатываемого многоугольника. Этот процесс продолжает-
220
Азертона.
Гл. 3. Отсечение
не
(см. рис. 3.34).
Более формальная запись
часовой
отсекающего
внешнюю границу по часовой стрелке до тех пор, пока не
В
—
встретится начальная вершина. Внутренние
часограницы обрабатываемого многоугольника обходятся против
пор, пока
ся до тех
многоугольников могут пересепересекаться между собой. Если они пересекаются,
и
внутрь отсекающего многоугольника,
с
внутрен-
пересечения
возникает,
начинает
списке
соответствующем
область будет расположена справа
обрабатываемого
пересекаться
Рис. 3.34. Отсечение Вейлера
—
порядке
его
Mnoi оугольник
часовой
по
внутренние границы или отверстия
против часовой
стрелки. Это условие означает, что при обходе вершин многоугольа
стрелке,
Обрабатываемый
алгоритме циклическими списками их вершин. Внешняя
граница каждого
многоугольник
ГТ~'
отсекающим многоугольником
новых
Отсекаюший
стрелки
этого
алгоритма
имеет
следующий
Вычислить все пересечения обрабатываемого и отсекающего многомногоугольников.
Добавить все эти пересечения к спискам вершин обрабатываемомногоугольников. Пометить все точки пересеи установить двусторонние связи между списками вершин
обрабатываемого и отсекающего
пересечения
обрабатываемого и отсекающего многоугольников для каждой
такой
точки.
Обработать непересекающиеся границы многоугольников.
Установить два списка принадлежности, один
лежащих
внутри
отсекающего
многоугольника,
—
и
для границ, ле-
другой
—
для
границ, лежащих вне отсекателя. Проигнорировать такие грани3.17. Невыпуклые отсекающие
области
—
алюритм
Вейлера—Азертона
чальная
обрабатывающего многомногоугольника. Границы отсекателя, попавшие внутрь обрабатываобрабатывающего многоугольника, образуют в нем дыры. Следовательно,
цы
отсекателя,
которые
лежат
вне
границ отсекающего многоугольника должны
копии
попасть
в
соответствующие
списки
точками
Один
список входов
—
вершин отсекателя просматриваются
в
Связать
все
список
об-
этом
внешней принадлежности.
отверстия,
т. е.
с
внутренние границы,
соответ-
соответствующими им внешними границами. Поскольку внешние граграницы ориентированы по часовой стрелке, а внутренние грани-
пересечения.
содержит только пересечения, образо-
обрабатываемого многоугольника, которые
список выходов
входят внутрь отсекателя. Другой
содерсодержит только пересечения, образованные ребрами обрабатываемо—
—
многоугольника, которые выходят изнутри отсекателя. Типы
точек
берется из списка выходов, а вер-
против часовой стрелки, эту операцию
—
удобно выпол-
путем проверки ориентации границ.
выполнить
ребрами
образованные
обрабатываемого
списка
копируются в
в
границы
—
пересечения
обратном порядке. Списки вершин многоугольников при
принадлежности.
Создать два списка вершин, являющихся
из
вершины
оба списка принадлежности: внутренний и внешний. Занести эти
границы
точка
пересечения
Процесс завершен.
Ряд примеров послужит для более полной иллюстрации работы
этого алгоритма.
будут чередоваться при обходе границы. ПоПример 3.26. Отсечение с помощью алгоритма Вейлера
Случай простого многоуюльника
Поэтому достаточно определить тип только у одной из каждой папары точек пересечения.
многоугольник,
Рассмотрим
Реализовать отсечение.
иа
рис. 3.34, а,
Азертона.
который
отсекается
следующей процедуры.
1Г Ниже приводятся списки вершин обрабатываемого и отсекаюотсекающего многоугольников. В список входов занесены вершины
/2, /4, /6 и /8, а в список
помеченные через
выходов
—
вершины
/,, Iy Fy /7.
Взять точку пересечения из списка входов. Если этот список
пуст,
то поиск
завершен.
обрабатываемого многомногоугольника до тех пор, пока не обнаружится пересечение.
Скопировать вершины из списка вершин обрабатываемого
Просматривать
список
вершин
многоугольника вплоть до
этого
пересечения
в список
двустороннюю связь,
перейти
к
вну-
/4 1
списку вершин
s4
/6
/7
Ss
/8
Sf>
l\
Si
Si
отсекателя вплоть до этого пересечения в список
назад в список вершин
обрабатываемого
много-
Повторять эти действия до тех пор, пока не будет достигдостигнута начальная вершина. В этот момент новый внутренний
многоугольник замыкается.
многоугольников, лежащих вне отсекателя, ведется
помощью
222
Гл.
такой
3. Отсечение
же
процедуры,
,
/1 'з
S3
многоугольника.
Поиск
/1 /т Коней
^7 ci
с
f
7
Перший ы
Вершины
обрабатываемого
отсекспошею
миогоут олышка
MHOIOVlOJIbUH
Ci
/з U^
внутренней принадлежности.
Вернуться
многоугольника
Si
Начапо \~, •
Просматривать список вершин отсекателя до тех пор, пока
не обнаружится пересечение. Скопировать вершины из списвершин
о геекоющего
многоугольника
отсекающего многоугольника.
списка
Вершины
Вершины
обрабат ываемо! о
внутренней принадлежности.
Используя
по
квадрату. На рисунке изображены так-ке точки пересечения ">гих многоугольников,
Поиск многоугольников, лежащих внутри отсекателя, ведется с
помощью
показанный
—
С\
Т /l Коней
1 /з
""^^ J
с2
/4
/з
\ ^3
/4
s4
Сз
/5
h
с?
/б
С4
/7
/7
/8
Ci
/
1
/
)
/
1
/8
С\
Внутренний миогоут ц,ник
^2
1 /8
/l Нимало
1 Si f
1¦S|J
Внешний многоугольник
за исключением того что на-
223
3.i7t Невыпуклые отсекаю»
тласти
алгоритм
Вейлера—Азертона
Для формирования внутреннего многоугольника возьмем первую точку пересече-
/,. Описанный алгоритм дает результаты, показанные
со
линией
сплошной
стрелками на рис. 3.34, а, а также в таблице. Результирующий
внутренний многоугольник таков:
пересечения
из
списка
входов
Чтобы получить внутренние многоугочьники, берем сначала из списка входов
—
а затем
/р
/3- Результаты показаны сплошными линиями со стрелками на рис. 3.34, b
таблице. Результирующие внутренние многоугольники таковы:
и в
/, V2q/, и /3/4с,/3.
Заметим,
Если начинать с других точек пересечения из списка входов, т. е.
/8,
то получится тот же
с точек
Еспи начать построение с
/4, /6 и
самый результат.
что в результате получилось два
точки
/2
внутренних многоугольника.
из списка выходов, то получится
следующий
внешний многоугольник:
Для формирования внешних многоугольников возьмем первую точку пересечения
из списка выходов—
/,. Описанный выше алгоритм дает результаты, показанные
штриховой линией со стрелками на рис. 3.34, айв таблице. Заметим, что вершины
из списка вершин отсекателя проходятся в обратном порядке от /, к
/,. Получаю-
Такой же результат получится, если начать построение с точки /4. Этот результат
показан штриховой линией на рис. 3.34, b и в таблице. Вновь заметим, что вершины
Получающиеся внешний многоугольник таков:
отсекателя в списке внешнего многоугольника следуют в
В последнем примере показано,
Еслч же начинать построение с других точек пересечения
—
/3, /5 или /7
—
из списка
выходов, то получатся другие внешние многоугольники, соответственно:
с
как
обратном порядке.
невыпуклый многоугольник
дырой отсекается относительно невыпуклого окна, также
имею-
имеющего дыру.
/rS2/4/3, /5S4/6/5 или /7S5/8/7.
В следующем примере рассмотрен более сложный
обрабатываемый многоугольник,
Пример 3.28. Отсечение с помощью алгоритма Вейлера
Случай многоугольников с дырами
обрабатывае-
который частично охватывает отсекатель.
Азертоиа.
—
Обрабатываемый и отсекающий многоугольники, а также их пересечения показаны
Пример 3.27. Огсеченне с помощью алгоритма Вейлера
Азертона.
Случай охвата обрабатываемым мнот оугольником отсекающего
—
на рис.
Ц помешаются в список входов, а /2, /4 и
/
обрабатываемого и отсекающего много-
_
3.34, с. Точки пересечения /,, /3 и
в список выходов. Списки вершин
многоугольников
приведены
следующей таблице:
в
Обрабатываемый и отсекающий многоугольники, а также их пересечения показаны
на рис. 3.34, Ь. Точки пересечения
список выходов.
с
учетом
/, и /3 попадают в список входов, а /2 и /4
Вершины
Вершины
обрабаты ваем ого
отсекающего
Miioroyi ольника
мпоюугольннка
5i
52
5з
54
ГСП
/з
С2
h
Сз
Вершины
обрабатываемо! о
Miioroyi ольника
Начало I\ { •
^i'
Конец « 1 /|
56
с4
у
Si
у
/з|/
5i
Внутренний МНОГОУ1 ОЛЬНИК
224
Гл. 3. Отсечение
многоугольника
многоу! олышка
5i
/4 IX
52
5з
54
\СГ\
) h I
1
5з 1
Конец f /2 ¦
1 Сз '
/
55]
11/.!
у
5,;
5«
/
/
L7 />"
/
\
\V
и!
-Ci-
У
/
-5i->
| /4
Внешняя
I ПсШИПП
225
Ci
1
с
.
О")
С2
Ci
/4
\
\
\
\
5з
/л
/г1 \у
\д / С'
55
//
// VI
//
\
/
//
1 1]
\
/2f
-5,-i
Начало
/6
/,
\
С\
\
/
|54
/б
/ /1 /| Копен
/5
с4
\
'
55
5б
57
5б
57
/2
с6
/5
58
/з
d
/6
С8
/5
58
/б
55
с5
55
Грашша
дыры1
Внутренний многоугольник
Внешний многоугольник
огескаюшет
многоугольника
f5n
1 ^3 1
S\
у
у
**
С\
Сг
Сз
1 /4
Вершины
'5
Начало /)•
-/—Ч!
С4 1
Об
h
обрабатываемого
много) тлышка
Вер шипы
обрабатываемого
многоугольни
Г5П
59
Вершины
отсскаюшего
отсекающею
/2 # Начало
Si
Вершины
Вершины
Коней •
55
Start
в
Списки вершин обрабатываемого и отсекающего многоугольников
пересечений задаются следующей таблицей:
59
—
3.17. Невыпуклые отсекающие области
\
v
t
С5
/2 Конец
мс6
N
/3
С7
Cg
с5
Внешний Miioroyi О 1Ы1НК
—
алгоритм
Вейлера—Азертона
Заметим, что для внутренних границ, т.е. отверстни. вершины обходятся против
часовоП стрелки. Списки вершин внешних и внутренних границ образуют независинезависимые конт>ры.
Если начать с точки
/, из списка входов, то алгоритм построит следующий внутпа рис. 3.34, сив таблице сплошной линией со
показанный
внутренний многоугольник,
WbWsWx
начать с точек
при
которых вершина
или
/,, взятой из списка выходов, то получим внешний мно-
многоугольник:
отсекателя,
со
чтобы избежать
рис. 3.35, а. Аналогично,
возникновения
и такие
висячих
пересечения, ко-
3.35, Ь. В частности, точки, помеченные
а помеченные
крестиками на рис. 3.35, Ь, считаются пересечениями,
таковыми не считаются. Дополнительные подробности
точкой
показаны
на рис.
—
реализации этого алгоритма даны
WiCb'l
ребро обрабатываемого
стороной
многоугольника инцидентна или- совпадает
таких ситуаций показаны на
не считаются пересечениями. Примеры
которые
/3 или /5 из списка входов, то результат будет таким же.
Если же начать с точки
ситуации,
ребер, нужно корректно классифицировать
стрелками:
Если
т. е.
в
работах [3-10, 3-11].
Заметим, что список вершин обрабатываемого многоугольника содержит две разные
границы, внутреннюю и внешнюю, каждая нз которых
контур.
Поэтому переход от 5,
произойдет к 5j
—
—
образует свой замкнутый
нижней записи в списке вершин внешней границы,
верхней записи в том же списке, а не к записи Ss из списка ipann-
Переход от внешней границы к внутренней всегда происходит путем
перехода от обрабатываемого многоугольника к отсекающему, или наоборот, что и
показано штриховой линией, соединяющей списки вершин этих фигур в вышепривецы отверстия.
вышеприведенной таблице. Аналогично, если начать с точек
придем
1Л и f6 из списка выходов, то при-
к внешнему многоугочьннку:
3.18. ОТСЕЧЕНИЕ ЛИТЕР
Литеры
или
текст
можно
генерировать программно,
Они
микропро-
состоять из отдельных
отрез-
могут
микропрограммно или аппаратно.
точечной матрицей.
отрезков или штрихов или быть образованными
можно
Штриховые литеры, которые сгенерированы программно,
т. е. их можно поворачиобрабатывать как любые другие отрезки,
с
масштабировать и отсекать по любым окнам
поворачивать, переносить,
произвольной ориентацией, используя изложенные
Для корректности работы алгоритма Вейлера
Азертона нужи
вычислять
нужно аккуратно классифицировать
пересечения. Касания,
—
алгоритмы.
выше
алгорит-
На рис. 3.36 показан типичный пример такого отсечения.
литеры в форме точечной матри-
Программно сгенерированные
же. Однако эта задача более
матрицы можно обрабатывать точно так
трудоемкая. В частности, если прямоугольная
i
оболочка
объемлющая оболоч-
то нужно пролитеры отсекается по окну произвольной формы,
проверить,
будет
ли
каждый
пиксел
из
маски
символа
находиться
1
Обрабатываемые \
многоугольники
I
L.
г
а
Отсекающий
многоугольник
Г"
\
Обрабаты наем ые
многоугольники
ОтсскаюшнП
многоугольник
Рис. 3.35. Подробности ре-
Рис. 3.36. Отсечение программно сгене-
Рис. 3.37. Отсечение программно сгене-
реализации алгоритма Вейле-
сгенерированных штриховых литер.
сгенерированных точечных лигер.
Вейлера
226
Гл. 3. Отсечение
—
Азертона.
3.18.
Отсечение литер
Interactive
Computer
3-3 Newman, William, M., and Sproull, Robert, F., Principles of
1979.
New
Book
York,
Company,
Graphics, 2d ed., McGraw-Hill
Two- and Three-Dimensional Clipping,"
"Generalized
M., and Beck, J.,
3-4
CHARACTERS
Cyrus,
Computers & Graphics, Vol. 3, pp. 23-28. 1978.
Method for Line
3-5 Liang, You-Dong and Barsky, Brian, "A New Concept and
Clipping," ACM Trans, on Graphics, Vol. 3, pp. 1-22, 1984.
3-6 Blinn, J.F., and Newell, M. E.. "Clipping Using Homogeneous Coordinates,"
Computer Graphics, Vol. 12, pp. 245-251, 1978 (Proc. SIGGRAPH 78).
3-7 Sutherland, Ivan, E., and Hodgman Gary, W., "Reentrant Polygon Clipping,"
CACM, Vol. 17, pp. 32-42, 1974.
3-8 Liang, You-Dong, and Barsky, Brian, "An Analysis and Algorithm for Polygon
CHARACTERS
Clipping," CACM, Vol. 26, pp. 868-877, 1983.
3-9 Weiler, Kevin, and Atherton, Peter, "Hidden Surface Removal Using Polygon
a
Area Sorting," Computer Graphics, Vol. 11, pp. 214-222,1977 (Proc. SIGGRAPH
Рис. 3.38. Отсечение аппаратно сгенерированных литер.
оболочки. Если внутри, то этот
пиксел активируется. В противном случае никаких действий не
пропроизводится. Это показано на рис. 3.37.
На отсечение аппаратно сгенерированных литер накладывается
или
внутри
вне
отсеченной
части
больше ограничений. Обычно любая не полностью видимая литера
удаляется. Это можно проделать путем отсечения прямоугольной
оболочки литеры окном. Если вся эта оболочка лежит внутри окна,
то
литера изображается,
противном случае она не изображается.
Если прямоугольная оболочка литеры ориентирована так же, как и
прямоугольное окно,
для
одной
из
то
в
тест
видимости
можно
провести
только
диагоналей этой оболочки. Рассмотрим рис. 3.38,
Для окон нестандартной формы
или
в
тех
а.
случаях, когда прямо-
прямоугольная оболочка литеры ориентирована иначе, чем окно, тесты
видимости следует провести для обеих диагоналей
оболочки,
как
3.38, Ь.
При микропрограммной генерации литер средства их отсечения
могут оказаться как очень ограниченными, так и очень разнообразпоказано на рис.
разнообразными.
Эти
отсечения,
который тоже реализуется микропрограммно.
возможности зависят от
особенностей алгоритма отсе-
3.19. ЛИТЕРАТУРА
3-1 Clark, James, H., "The Geometry
Engine: A VLSI Geometry System for Graphics,"
Computer Graphics, Vol. 16, pp. 127-133, 1982 (Proc. SIGGRAPH 82).
3-2 Sproull, Robert, F., and Sutherland, Ivan, E., "A
Clipping Divider," 1968 Fall
Joint Computer Conference,
1968.
228
Гл. З. Отсечение
Thompson Books, Washington, D.C., pn
765-775
77).
3-10 Weiler, Kevin. "Hidden Surface Removal Using Polygon Area Sorting," Masters
1978.
Thesis, Program of Computer Graphics, Cornell University, January
3-11 Weiler, Kevin, "Polygon Comparison Using a Graph Representation," Computer
Graphics, Vol. 14, pp. 10-18, 1980 (Proc. SIGGRAPH 80).
Удаление невидимых линий и
поверхностей
а
линий.
Рис. 4.1. Необходимость удаления невидимых
прозрачность и фактура, учитывающие эффекты
в мельчайших оттенках. Подобные алгоотражения и преломления цвета
ны
Задача удаления
из
наиболее
невидимых линий и
сложных в
невидимых линий
поверхностей
является
одной
графике. Алгоритмы удаления
машинной
служат для определения линий
поверхностей
ребер, поверхностей или объемов, которые видимы или невидимы
для
наблюдателя,
и
находящегося в заданной точке пространства.
алгоритмы работают
ВВЕДЕНИЕ
Необходимость
или
ребер, поверхностей
объемов проиллюстрирована рис. 4.1. На рис. 4.1, а приведен
типичный каркасный чертеж куба.
Каркасный чертеж представляет
трехмерный объект в виде штрихового изображения его ребер.
Рис. 4.1, а можно интерпретировать двояко: как вид куба сверху,
Для этого достаточно прищуриться и переперефокусировать глаза. Удаление тех линий или поверхностей, которые
невидимы с соответствующей точки зрения, позволяют избавиться
от неоднозначности. Результаты показаны на рис. 4.1, b и с.
слева или снизу, справа.
Сложность задачи удаления невидимых линий и поверхностей
привела к появлению большого числа различных способов ее решерешения.
Многие из них ориентированы
на специализированные
прило-
Наилучшего решения общей задачи удаления невидимых лилиний и поверхностей не существует. Для моделирования процессов в
например, для авиатренажеров, требуются
реальном времени,
приложения.
быстрые алгоритмы, которые могут порождать результаты с чачастотой видеогенерации C0 кадр/с). Для машинной мультипликамультипликации, например, требуются алгоритмы, которые могут генерирогенерировать сложные реалистические изображения, в которых представле-
230
Гл. 4. У тление невилимыч
линии
и
поверхностей
медленно,
требуется
учет эффектов
и зачастую на вычисления
или даже часов.
Строго
говоря,
и т. п.
не входит в задачу
уда-
прозрачности, фактуры, отражения
Естественнее считать их
удаления невидимых линий или поверхностей.
визуализации
процесса визуализации изображения. Процесс
изображения или сцеявляется интерпретацией или представлением
частью
реалистической манере. Такие эффекты подробно обсуждают5. Однако многие из этих эффектов встроены
обсуждаются в гл.
удаления невидимых линий,
минут
несколько
сцены в
4.1.
отраже-
тени,
в
алгоритмы
в
поверхностей и поэтому будут затронуты
раданной главе. Существует тесная взаимосвязь между скоростью
удаления невидимых
работы алгоритма и детальностью его результата.
Ни один из алго-
оценок для
алгоритмов не может достигнуть хороших
этих двух показа-
показателей одновременно.
По мере создания все более быстрых алгорит-
Реальные
строить все более детальные изображения.
еще большего колизадачи, однако, всегда будут требовать учета
алгоритмов
можно
количества
деталей.
Все алгоритмы удаления невидимых линий (поверхностей)
вклю-
себя сортировку [4-1]. Порядок, в котором производится
не влияет на эфсортировка координат объектов, вообще говоря,
включают
в
по гео-
эффективность этих алгоритмов. Главная сортировка ведется
или точки
геометрическому расстоянию от тела, поверхности, ребра
до точки
наблюдения. Основная идея, положенная в основу сорти-
в том, что чем дальше располосортировки по расстоянию, заключается
он
наблюдения, тем больше вероятность, что
более
будет полностью или частично заслонен одним из объектов,
расположен объект от точки
близких
к
точке
наблюдения. После определения
расстояний или
по
горизон-
приоритетов по глубине остается провести сортировку
горизонтали и по вертикали, чтобы выяснить, будет ли рассматриваемый
231
4.1. Введение
объект действительно заслонен объектом, расположенным ближе к
в
объектном пространстве. Однако
поверхностей в большой мере зависит от эф-
ритмов следует реализовывать
в
не так. Дело в том, что алгоритмы, работающие
на практике это
более эффективны потому, что для них
пространстве изображения,
эффективности процесса сортировки. Для повышения эффективности
при растролегче воспользоваться преимуществом когерентности
наблюдения. Эффективность любого алгоритма удаления
точке
невидимых
линий
или
сортировки используется
неизменяемости
тенденция
также
т. е.
когерентность сцены,
характеристик сцены
в
не-
тенден-
В растровой
малом.
растровой реализации.
В следующих разделах дается
подробное изложение некоторых
работающих как в объектном пространстве,
графике использование когерентности для улучшения результатов
апгоритмов,
сортировки в алгоритмах удаления невидимых
пространстве изображения. Каждый
приводит
к
поверхностей приво-
алгоритмам, которые очень напоминают алгоритмы растро-
обсуждавшиеся ранее в гл. 2.
растровой развертки,
невидимых линий
Алгоритмы удаления невидимых линий или поверхностей
классифицировать по способу выбора системы координат или
пространства, в котором они работают [4-1]. Алгоритмы, работаработающие в объектном пространстве, имеют дело с физической систеполучаются
весьма
которой описаны эти объекты. При этом получа-
точные
лишь точностью
ограниченные,
вообще
во
много
раз.
говоря,
высокая
пространстве
изображения,
точность.
Алгоритмы
имеют
для
удаАлгоритм плавающего горизонта чаще всего используется
опиудаления невидимых линий трехмерного представления функций,
описывающих
дело
с
же,
работающие в про-
системой
координат
того
пример—
512x512
точек.
Результаты,
низким,
полученные
типичный
в
при-
пространстве
изображения, а затем увеличенные во много раз, не будут соответсоответствовать исходной сцене. Например, могут не совпасть концы ототрезков. Алгоритмы, формирующие список приоритетов, работают
попеременно
в
в математи-
этот подход (см.
Предложено цного алгоритмов, использующих
[4-2]—[4-6]). Поскольку в приложениях в основном интересуются
поверхности,
алгоритм обычно работает в проГлавная идея данного метода заключается
этот
изображения.
исв сведении трехмерной задачи к двумерной путем пересечения
исходной поверхности последовательностью параллельных секущих
плоскостей,
имеющих
постоянные значения координат х, у или z.
обеих упомянутых системах координат.
Объем вычислений для любого алгоритма,
объектном
О
и других дисциплинах.
математике, технике, естественных науках
пространстве
экрана
=
Подобные функции возникают во многих приложениях
бывает довольно
на
разрешение
поверхность в виде
F{x, у, z)
описанием
Обычно
идей теории алгоритмов удаления не-
4.2. АЛГОРИТМ ПЛАВАЮЩЕГО ГОРИЗОНТА
котором объекты визуализируются. При этом точность
вычислений ограничена разрешающей способностью экрана. Обычэкрана,
иллюстрирует одну или
Алгоритмы, работающие в объ-
пространстве, особенно полезны в тех приложениях, где не-
необходима
в
поверхностей.
вычислений. Полученные изображения можно сво-
свободно увеличивать
объектном
результаты,
и
и
мож-
можно
системой координат, в
несколько основополагающих
из них
так
пространстве,
всеми остальными
и
работающего в объ-
сравнивающего каждый объект сцены
со
объектами этой сцены, растет теоретически как
Аналогично, объем вычислений люболюбого алгоритма, работающего в пространстве изображения и сравни-
квадрат числа объектов (я2).
сравнивающего каждый объект сцены
системе
с позициями всех пикселов в систе-
координат экрана, растет теоретически,
обозначает
количество
как
объектов (тел, плоскостей
N— число пикселов.
nN. Здесь п обозна-
или
ребер) в сцене,
а
Теоретически трудоемкость алгоритмов, ра-
работающих в объектном пространстве, меньше трудоемкости алго=
работающих в пространстве изображения, при n<N. ПоПоскольку N обычно равно E12J, то теоретически большинство алгоалгоритмов,
232
Гл. 4. Удаление невидимых линий и поверхностей
const
Рис. 4.2. Секущие плоскости с постоянной координатой.
233
4 2. Алгоритм плавающего горизонта
Если на текущей плоскости при некотором заданном
значении х
значения у для
соответствующее значение у на кривой больше
то текущая кривсех предыдущих кривых при этом значении х>
она невидима.
кривая видима в этой точке; в противном случае
Невидимые участки
показаны
пунктиром
на
4.4.
рис.
Реализация
максимальданного алгоритма достаточно проста. Для хранения
х используется массив, длина
максимальных значений у при каждом значении
которого
равна числу различимых
точек
(разрешению) по оси х в
в этом массиве,
пространстве изображения. Значения, хранящиеся
Поэтому по
представляют собой текущие значения «горизонта».
этот горизонт «всплывамере рисования каждой очередной кривой
линий работа«всплывает». Фактически этот алгоритм удаления невидимых
Рис. 4.3. Кривые в секущих плоскостях с постоянной
координатой.
работает
На рис. 4.2 приведен пример,
плоскости
определяются
z)
=
0 сводится
из
этих
где указанные параллельные плоско-
постоянными
к
значениями
последовательности
параллельных
где z постоянно на
Функция F(x,
кривых, лежащих
в
у,
каждой
плоскостей, например к последовательности
=
у
г.
f{x, z) или х
-
g (у,
z)
каждой из заданных параллельных плоскостей.
Итак, поверхность теперь складывается из последовательности
кривых, лежащих
рис. 4.3.
в
каждой
из
Здесь предполагается,
этих
плоскостей,
как
показано
на
что полученные кривые являются
однозначными функциями независимых переменных. Если
спроеци-
спроецировать полученные кривые
на
плоскость
z
—
О,
как
показано
каждый раз с одной линией.
пока какая-нибудь
Алгоритм работает очень хорошо до тех пор,
очередная кривая не окажется ниже самой первой
показано на рис.
участков исходной поверхности.
упорядочивает
плоскости z
точки наблюдения.
ближайшей
к
для
каждого
точке
—
const
по
расстояния до
них
4.5, а. Подобные кривые, естественно, видимы и
работы
длина которого равна числу различимых точек
пространстве
х
в
пространстве
определяется соответствующее значение у.
невидимой линии заключается в следующем:
значения у для каждого значения х.
на
меньше минимума по
от
у для
всех
Ху то текущая кривая видима.
предыдущих кривых при этом
В противном случае она невидима.
Ч
Рис. 4.4. Проекция кривых на
234
Гл. 4. Удаление невидимых линий
и
поверхностей
про-
текущей плоскости при некотором заданном значении х
или
соответствующее значение у на кривой больше максимума
Если
изображения
0.
в
на
Z3
=
оси х
Алгоритм теперь становится таким:
Алгоритм удаления не-
плоскость z
по
изображения. Этот массив содержит наименьшие значе-
наблюдения, строится кривая, лежащая на ней, т. е.
координаты
по-
этот алгоритм,
поверхности делается видимой, если модифицировать
включив в него нижний горизонт, который опускается вниз по ходу
алгоритма. Это реализуется при помощи второго массива,
Затем для каждой плоскости, начиная с ближай-
значения
как
одна-
Алгоритм сначала упорядочи-
возрастанию
кривых,
представляют собой нижнюю сторону исходной поверхности,
Нижняя сторона
однако алгоритм будет считать их невидимыми.
рис. 4.4, то сразу становится ясна идея алгоритма удаления невидиневидимых
из
Рис. 4.5.
235
Обработка нижней стороны поверхности.
4.2.
Алгоритм плавающего
юризонта
Полученный результат показан на рис. 4.5, Ь.
В
изложенном
предполагается,
алгоритме
известно для каждого значения х
т. е. у,
функции,
Значения ,\ в пространс гве
что
значение
в пространстве изо-
изображения. Однако если для каждого значения х нельзя указать (вы(вычислить) соответствующее ему значение у, то невозможно поддерподдерживать массивы
таком
изображения -у.
функТекущая линия.
N
\А
Предыдущая
D
Известные
А
значения у
линия
\
верхнего и нижнего плавающих горизонтов. В та-
хгп+к'Уггнк
с/
xm
В
ч
случае используется линейная интерполяция значений^ между
известными значениями для того, чтобы заполнить массивы верхX
верхнего
и
нижнего
плавающих
горизонтов,
как
показано
на
fa
рис. 4.6.
Если видимость кривой меняется, то метод с такой простой интера
интерполяцией не даст корректного результата. Этот эффект проиллюстпроиллюстрирован рис. 4.7, а. Предполагая, что операция по заполнению масмассивов проводится после проверки
видимости, получаем, что при пе-
Значения х в пространстве
переходе текущей кривой от видимого к невидимому состоянию (сег(сегмент АВ
на
изображения-
Л
рис. 4.7, а), точка (х„ +к,уп +к) объявляется невидимой.
Тогда участок кривой между точками (хгпуп) и (хп+к,уп+к) не изо-
изображается и операция по заполнению массивов не проводится. Обпредыдущей кривыми. Если
и
Образуется зазор между текущей
Текущая
линия-
А
Предыдущая
на
состояния к
видимому (сегмент CD
рис. 4.7, а),
\
линия
участке текущей кривой происходит переход от невидимого состоя-
У
(хт+к> Ут+к) изображается
и
операция
по
то точка
заполнению
11 к
Известные
А
значения у
in-
п
I
массивов
Поэтому изображается и невидимый кусок сегмента
CD. Кроме того, массивы плавающих горизонтов не будут содер-
D
хтп+к'Упьк
В
п
(хт +к, ут +к)
объявляется видимой, а участок кривой между точками (хт,ут) и
на
\
проводится.
содержать точных
значений у. А
это может
повлечь за
собой дополни-
дополнительные нежелательные эффекты для последующих кривых.
Рис. 4.7. Эффект пересекающихся кривых.
Следонеобходимо решать задачу о поиске
сегментов текущей и предшествующей кривых.
вательно,
Существует
несколько
методов
получения
точек
пересечения
точек
пересечения
Зпачения х в пространстве
кривых. На растровых дисплеях значение координаты х
изображения
У
увеличивать на
1,
начиная
можно
уве-
схп или*,н (рис. 4.7, а). Значение^, соот-
соответствующее текущему значению координаты х в пространстве изо-
изображения, получается путем добавления к значению^, соответствуИзвестные
соответствующему предыдущему
шачення v
приращения Ду вдоль заданной кривой. Затем определяется видимость
значению
координаты х, вертикального при-
новой точки с координатами (х + 1,у + ?у). Если эта точка видиактивируется связанный с ней пиксел. Если невидима, то
пиксел не активируется, ах увеличивается на 1. Этот процесс про-
видима,
то
Линейное
продолжается до тех пор, пока не встретится хп +к
ин гсрполнрование
Пересечения для растровых дисплеев
достаточной точностью.
Рис. 4.6. Линейная интерполяция между заданными точками
Гл.
Удаление
неои
м. i\
<нний
и
поиерхностей
определяются изложенным методом с
Близкий и даже более элегантный метод
определения пересечений основан
.2.
ипихт+к. Пересече-
Алгоритм плавающего
на двоичном поиске
тригингя
[4-6].
Точное
значение
точки
пересечения двух прямолинейных отрезотрезков, которые интерполируют текущую и предшествующую кривые,
между точками (*,,, уп) и (хп+к, уп+к) (рис. 4.7) задается формулами:
=
-
х„
(Аур
у
=
т(х
-
-
Аус)
х„) + уп
где
Ах = х„+м
АуР
АУс
т
а
индексы
~
(уп)р
О
=
(Уп+к)с
~
(ул)с
Рис. 4.8. Эффект зазубренного ребра.
=
\(уа*к)-{уп)\1Ах
до 17 он равен ординатам кривой п\ а для значений
текущей (current) и предшествую-
Полученный
кривым.
результат
показан
на
Теперь алгоритм излагается более формально.
Если на текущей плоскости
соответствующее
этом л*,
то текущая
при некотором заданном значении
значение у на
или меньше минимума
ординатам
кривой п—\. Нижний горизонт для
начальному значению v; для значений х
по
у для
кривой больше максимума
всех
предыдущих кривых при
В
кривая видима.
противном случае она
видимой при х
Если на участке от предыдущего
значения х видимость
пересечения
(хп) до текущего (хп+к) зна-
кривой изменяется, то вычисляется точка
(jc,).
на участке от
238
п~\
и
п
расположены ближе
После обработки кривых /7—1
=
—
ил
и
горизонтов ординат, соответствующих штриховым
рис. 4.8. Это можно выполнить эффективно, создав
на
боковые
является
алгоритм,
реализующий
эту
первой точкой на первой кривой, то за-
Рп в качестве Рп_{ и закончим заполнение. В пропротивном случае создадим ребро, соединяющее Рп^х и Рп.
запомним
Занесем
в
ординаты
этого
массивы
верхнего
и
нижнего
горизонтов ор-
ребра и запомним Рп в качестве /*„_[.
Обработка правого бокового ребра:
Если Рп
является
последней точкой
на
первой кривой, то
Рп в качестве Рл_, и закончим заполнение. В
противном случае создадим ребро, соединяющее Рп и Р„_г
к точке
обрабо-
наблюде-
Занесем
в
ординаты
этого
верхний горизонт для зна-
поверхностей
рис. 4.8. Анало-
запомним
где уже
0 и 1 равен начальному значению у; для значений х от 2
Гл. 4. Удаление невидимых линий
на
нижнего
Если Рп
На рисунке показано, что получается при обработке плоскости
значений х
ор-
1 ра-
Обработка левого бокового ребра:
плоскостей, появляется слева или справа из-под множества кривых,
лежащих в плоскостях, которые ближе к указанной точке наблюдеплоскости
4. Это показано сплошной линией
ребра. Приведем
идею для обеих ребер.
целиком; если он стал невидимым,
Этот эффект продемонстрирован на рис. 4.8,
и
ложные
Изложенный алгоритм приводит к некоторым дефектам, когда
кривая, лежащая в одной из более удаленных от точки наблюдения
/7 +1.
2, 3, 4
0
и
=
линиям
Заполнить массивы верхнего и нижнего плавающих горизонтов.
наблюдения.
=
=
зазубренностью боковых ребер решается включением в массивы верхне-
изображается
то изображается фрагмент от
хп до х{\ если же он стал видивидимым, то изображается фрагмент от xi до хп+к.
обработанные
значений х
—
18. Такой эффект приэффект возникает и справа при х
приводит к появлению зазубренных боковых ребер. Проблема с зазу-
хп до хп+к сегмент кривой полностью ви-
видим, то он
=
Аналогичный
верхнего
наблюдения.
18, 19, 20
ординатам
ординатам кривой /7-1.
кривой п; а для значений х от 5 до 20
При обработке текущей кривой (/?+1) алгоритм объявляет ее види-
равен
невидима.
Если
15
10
5
(уп+к)р
—
рис. 4.7, Ь.
х
хп
=
сир соответствуют
(previous)
предшествующей
-
массивы
верхнего
и
4.2. Алгоритм
горизонтов ор-
ребра и запомним Рп в качестве Рп_г
Теперь полный алгоритм выглядит так:
239
нижнего
плавающего
горизонта
Для каждой плоскости z
const.
=
Обработать левое боковое ребро.
Для каждой точки, лежащей на кривой из текущей плоскоплоскости:
Если при некотором
заданном значении х соответству-
соответствующее значение у на
кривой больше максимума или
меньше
минимума по у для всех предыдущих кривых
при этом х, то кривая видима
противном
Если
случае
(в этой точке). В про-
она невидима.
на сегменте от
предыдущего
A/5) sin х cos z
C/2) cos (la/4) x exp(-a), a
(x
тгJ +
изображенная в интервале @, 2т) с помощью алгоритма плавающего
Рис. 4.10. Функция у
(хг]) до текущего
+
(z
7гJ,
-
=
(х„+к) значения х видимость кривой изменяется, то вывычисляется пересечение (а;).
горизонта.
Если
ляется точка пересечения и линия
на
участке
от
хп до хп+к сегмент кривой полно-
изображается целиком; если он
стал невидимым, то изображается его кусок от хп до
Л"х-; если же он стал видимым, то изображается его куполностью видим,
то он
этой
На участке
точки.
вновь становится
л; до хп+к.
Заполнить массивы верхнего и нижнего плавающих гори-
Обработать правое боковое ребро.
функция
(пики),
то
приве-
приведенный алгоритм может дать некорректные результаты. Этот
эф-
1) содерэффект показан на рис. 4.9. Здесь самая нижняя линия (z
содержит пик. При х
8 следующая линия (z
2) объявляется види12 эта линия (z
видимой. При х
2) объявляется невидимой, опреде=
=
=
—
=
=
2) изображается от х
12 до
=
х
16
=
эта
линия
-
8 до
=
(z
=
2)
16. Следующая
изображается от этого пересечения до х
8 видима; однако она объявляется видимой
линия {z
3) при х
12. Следовательно, эта линия изображается на участке
и при Л"
8 до х
от х
12, несмотря на то что она заслонена пиком. Этот
эффект вызван вычислением значений функции и оценкой ее види=
=
=
видимости
содержит очень острые участки
х
(z
кривая
=
=
горизонтов.
от
=
видимой, определяется новая точка пересечения и
—
кусок от
Если
-
на
участках, меньших,
чем
разрешающая способность экра-
функция задана слишком малым количеством тоточек (см. разд. 2.25). Если встречаются узкие участки, то функцию
экрана, т. е.
тем, что
следует
вычислять
в
большем
числе
точек.
Если
в
примере
на
18,
функцию вычислять в точках с абсциссами 0, 2, 4,
3 будет изображена
20, вместо точек 0, 4,
16, 20, то линия z
рис. 4.9
...,
=
...,
правильно.
На
рис. 4.10
показан
типичный
результат
работы
алгоритма
плавающего горизонта. Запись этого алгоритма на псевдокоде приприводится ниже.
Алгоритм плавающего горизонта
z=3
Гэкран
Вэкран
Верх
—
разрешение экрана в горизонтальном направлении
—
разрешение экрана в вертикальном направлении
содержащий ординаты верхнего горизонта
Низ
массив, содержащий ординаты нижнего горизонта
Y
const
текущее значение функции у
f(x, z) при z
Тфлаг
флаг видимости для текущей точки
Пфлаг
флаг видимости для предыдущей точки, равный
—
z=2
массиву
—
—
—
—
г
-
—
Рис. 4.9. Область с очень острым углом.
—
240
Гл. 4. Удаление невидимых линий
и
поверхностей
241
0
=
невидима
1
=
видима и выше верхнего горизонта
1
=
видима и ниже нижнего горизонта
4.2. Алгоритм плавающего горизонта
=
Draw
графическая команда, которая чертит видимую лилинию между точками, заданными их координатами
Xmin,Xmax —минимальная и максимальная абсциссы функции
Хшаг
—
ние
Zmin Zmax
—
if
шаг
—
минимальная и максимальная аппликаты
функ-
между плоскостями z
const
=
Верх (Гэкран), Низ (Гэкран)
Dimension
Хлевое
—
1; Улевое
=
—
1; Хправое
=
—
1; Управое
=
—
1
инициализация массивов горизонтов
О
Верх
=
Низ
=
Вэкран
Вычисление функции на каждой плоскости z
=
const,
начиная с ближайшей к наблюдателю плоскости Zmax
for z
Zmax to Zmin step
=
—
начи-
=
О then
Пфлаг
call Пересечение (Хпред, Упред, х, у, Верх;
Xi, Yi)
Draw (Xi, Yi, x, y)
call Горизонт (Xi, Yi, x, у; Верх, Низ)
else
call Пересечение (Хпред, Упред, х, у, Низ;
if
Ziuar
инициализация предыдущих значений по х и у:
Хпред и Упред
Xmin
Хпред
=
Упред
=
f(Xmin, z)
используется видовое преобразование,
если
то его нужно
Упред, z в данной точке
обработка левого бокового ребра
call Обрребра (Хпред, Упред, Хлев, Улев; Верх, Низ)
call Видимость (Хпред, Упред, Верх, Низ; Пфлаг)
применить к Хпред,
=
Низ)
call Пересечение (Хпред, Упред, х, у, Верх;
const
for x
У =
Xi, Yi)
Draw (Xi, Yi, x, y)
call Горизонт (Xi, Yi, x, у; Верх, Низ)
end if
else
О then
if Пфлаг
call Пересечение (Хпред, Упред, х, у, Верх; Xi,
Yi)
Draw (Xi, Yi, x, y)
call Горизонт (Xi, Yi, x, у; Верх, Низ)
else
call Пересечение (Хпред, Упред, х, у, Верх;
Xi, Yi)
Draw (Хпред, Упред, Xi, Yi)
call Горизонт (Хпред, Упред, Xi, Yi; Верх,
min to Xmax Step Хшаг
=
f(x, z)
если используется
видовое преобразование,
нужно применить к
данной
то его
точке
проверка видимости текущей
точки и заполнение со-
=
соответствующего массива горизонта
call Видимость (х, у, Верх, Низ; Тфлаг)
if Тфлаг
Пфлаг then
=
If Тфлаг
1 then
Тфлаг
Draw (Хпред, Упред, х, у)
call Горизонт (Хпред, Упред, х, у; Верх, Низ)
else
end if
если
242
=
1
=
или
видимость изменилась,
Гл. 4. Удаление
невидимых линий
и
—
то вычисляется
поверхностей
=
Xi, Yi)
Draw (Хпред, Упред, Xi, Yi)
call Горизонт (Хпред, Упред, Xi, Yi; Верх,
для каждой точки на кривой, лежащей в плоскости
z
=
Yi)
end if
Draw (Хпред, Упред, Xi, Yi)
call Горизонт (Хпред, Упред, Xi, Yi; Верх, Низ)
else
1 then
if Тфлаг
инициализация переменных
=
0 then
Тфлаг
1 then
if Пфлаг
call Пересечение (Хпред, Упред, х, у, Верх; Xi,
Yi)
else
call Пересечение (Хпред, Упред, х, у, Низ; Xi,
=
функции
Ziuar
горизонта
else
приращения вдоль оси х
—
и заполняется массив
пересече-
243
4.2. Алгоритм
плаваюшег
горизо* та
подпрограмма заполнения массивов плавающих горизонтов
Низ)
call Пересечение (Хпред, Упред, х, у, Низ;
Xi, Yi)
Draw (Xi, Yi, x, у)
call Горизонт (Xi, Yi, x, у; Верх, Низ)
subroutine Горизонт (XI, YI, X2, Y2; Верх, Низ)
Эта подпрограмма использует линейную интерполяцию для
заполнения массивов
горизонтов между XI
и
Х2
(а, Ь) определяет большее из а и Ъ
Mln (a, b) определяет меньшее из а и Ъ
Мах
end if
проверка вертикальности наклона
if (X2
XI) = 0 then
end if
-
end if
Верх (Х2)
end if
Низ (Х2)
Вновь инициализировать Пфлаг, Хпред, Упред
Пфлаг
Тфлаг
else
Наклон
=
Хпред
Упред
next
=
Мах (Верх (Х2), Y2)
=
Mln (Низ (Х2), Y2)
=
XI)
У1)/(Х2
XI to X2 stepl
for х
Наклон * (х
XI) + Y1
у
Мах (Верх (х), у)
Верх (х)
М in (Низ (х), у)
Низ (х)
х
=
(Y2
-
-
=
=
у
-
=
х
=
Обработка правого концевого ребра
call Обрребра (х, у, Хправ, Управ; Верх, Низ)
next
=
next х
z
end if
finish
return
подпрограмма обработки бокового ребра
подпрограмма вычисления пересечения текущей кривой с гори-
subroutine Обрребра (х, у, Хребра, Уребра; Верх, Низ)
горизонтом
Хребра
если
=
subroutine Пересечение (XI, YI, X2, Y2), Массив; Xi, Yi)
Эта процедура вычисляет пересечение двух отрезков прямых
-1, то встречена первая кривая и ребро не
создается
if Хребра
call
1
=
Массив содержит информацию о соответствующем горизон-
-1 then 1
горизонте
Горизонт (Хребра, Уребра, х, у; Верх, Низ)
Хребра
Уребра
=
=
х
Sign
у
аргумента
—
функция, принимающая значения
if
подпрограмма определения видимости точки
(X2
-
XI)
=
0 then
Xi = Х2
else
нижнему плавающим горизонтам. Если
вычисление пересечения
самом горизонте,
=
=
то она считается
Yi
точка лежит на са-
видимой.
0, если точка невидима
1, если она видима и выше верхнего горизонта
-1, если она видима и ниже нижнего горизонта
целой
If у < Верх (х) and у > Низ (х) then
if у ^ Верх (х) then Тфлаг
if у ^ Низ (х) then Тфлаг
=
=
Тфлаг
=
=
Массив (Х2)
обход начинается с самой левой используемой точки
пересечение считается обнаруженным, когда изменяется
знак разности
Наклон =
х считается
Ysign
Csign
О
(Y2
значений у
-
Y1)/(X2
=
Sign(Yl + Наклон
=
Ysign
1
Yi
=
YI + Наклон
-1
Xi
=
XI + 1
XI)
-
-
return
244
Гл.
если знак ее
<0, =0, >0
subroutine Видимость (х, у, Верх, Низ; Тфлаг)
видимость точки определяется по отношению к верхнему и
Тфлаг
1, 0, 1,
проверка бесконечности наклона
return
=
—
245
4. Удаление невидимых линий
и
поверхностей
4.2. Алгоритм плавающего горизонта
Массив (XI + 1))
while(Csign
Yi
=
как выше, так
Ysign)
-
Xi
Xi + 1
=
Массив (Xi))
Csign
Sign(Yi
end while
выбирается ближайшее целое число
if I Yi
Наклон
Массив (Xi
1I
=
плоскости,
которой лежит прямая. Алгоритм плавающего
в
-
—
=
const.
Однако порядок
обработки
пары
этих
линий,
линий
Здесь первой будет рассматриваться прямая.
Перед визуапнзацией к поберхности, описанной
-
—
ниже
горизонта легко справляется со случаем
Yi + Наклон
=
и
в одной
плоскости
конечный
результат.
лежащих
влияет
на
табл. 4.1, необходимо приме-
в
поворачивается на 30° вокруг
преобразование. Поверхность
0 из
оси у, а затем на 15° вокруг оси v. Результаг проецируется на плоскость z
применить
сначала
видовое
=
I Yi
—
в бесконечности на оси + г (см. [1-1]). Матрица раз4x4
результирующего преобразования однородных координат есть:
размером
центра проекции, находящейся
Массив
(Xi)lthen
Yi
=
Yi
Xi
=
Xi
—
-
Наклон
0. 866
0. 129
0
1
0
0. 966
0 0
0. 5
-0. 224
0 0
end if
0
end if
0
0
0
1
return
Применение этого преобразования приводит к результатам, показанным в табл. 4.2.
Эти результаты отображены на целочисленную сетку в диапазонах 0 < .v ^ 100 и
50 < у ^ 50, т. е. в координаты пространства изображения.
Следующий пример иллюстрирует данный алгоритм.
-
Пример 4.1. Плавающий горизонт
Рассмотрим геометрические функции,
на плоскостях г
линий
—
=
описанные
в
=
табл. 4.1. Эти функции
заданы
0, 3, 6. В каждой плоскости заданы две линии. Первая из этих
прямая, а вторая описывает
Упорядочивая кривые по приоритету глубины вдоль оси z и вспоминая, что пряпрямые должны быть обработаны (каждая на своей плоскости z
const) в первую очечто
мы
видим,
порядок обработки кривых обратсн тому, который указан в
очередь,
табл. 4.2. Порядок обработки таков: 6, 5, 4, 3, 2, 1.
пиаообразную волну, точки которой лежат
Начальные значения верхнего и нижнего горизонтов равны соответственно —50 и
50, как показано в табл. 4.3, которая содержит некоторые состояния экрана, образоТаблица 4.1.
образованного
горизонтами. Кроме того,
значения координат
J* кривой
1
2
3
4
5
А'
У
1
0
0
о
2
4
о
3
6
-4
о
4
8
0
о
5
0
0
0
6
8
0
0
7
0
0
3
8
2
4
9
6
10
Пилообразная
до/ показаны те
(округленные до ближайшего целого числа), которые алгоритм
Штриховыми пиниями обозначены фиктивные левое и
волна
Таблица 4.2.
Прямая линия
Vs кривой
1
кривой
точки
№ точки
х
У
1
0
0
11
15
-7
3
2
17
41
12
84
36
-4
3
3
52
-31
8
0
3
4
10
13
30
-13
69
14
47
28
II
0
0
3
5
0
0
15
82
-44
12
8
0
3
6
69
10
16
99
-3
13
0
0
6
14
2
4
6
7
15
17
30
-П
15
6
-4
6
8
32
35
18
99
16
8
0
6
9
67
-38
17
0
0
6
10
84
36
18
8
0
6
Пилообразная волна
Прямая линия
2
Пилообразная волна
3
Прямая линия
247
246
от а
получил
правое боковые ребра.
Комментария
2
табл. 4.3 и на рис. 4.11
каждой линии.
для
№ точки
в
Гл. 4. Удаление невидимых линий
и
поверхностей
4.2. Алгоритм
п
плавающего
горизонта
-50-50-50-13 -12 -10-9
Таблица 4.3.
-7 -6
-4-50
-50-50-50-13
10
-7-6-4-50
1
22
'
0
10
20
30
40
50
60
70
80
90
100
Верхний
40
Начальные
значения
20
горн-
В
зонтов
-50
-50
50
50
50
50
50
-12 -10
-9
-7
-6
-4 -50
50 -13
-12
-10
-9
-7
-6
-4
-50 -50 -50 -13
10
22
I
-7
-6
-4 -50
-12 -10
-9
-19
22
1
1
-12 -10
-9
22
50
50
50
50
Рис. 4.11, а
В
Кривая 6
Рис. 4.11, b
Ы
Кривая 5
Рис. 4.11, с
Н
50
50
50
-13
В
-50
-50
-6
-4
Кривая 4
Н
Рис. 4.11. d
В
Кривая 3
Н
Рис. 4.11, е
В
-50 -50 -50
-50 -50
-50 -50 -50 -50
Н
-50 -50
50
-50 -13
50
50
50
-9
-13
-50 -50
5
29
50
50
-9
-13
В
0
1
5
29
Кривая 2
Н
0
-4
-9
-13
Рис. 4.11, f
В
0
24
36
29
Кривая 1
Н
0
-4
-9 -13
50
50
50
-40 -25
50
-40
3
1
-50
0
-19
-40
-25
50
1
1
3
1
-50
-12 -10 -23
-30
-40 -25
50
22
9
10
1
-50
-12 -10 -23
-30
-40 -25
50
22
9
10
1
-50
-12 -28
-23
-30
-40 -25
50
10
19
19
19
5
5
F(x, z)
const. Часто бывает удобно вырассматривалась только при z
вычерчивать кривые, полагая постоянными как z, так и х. При этом
возникает эффект перекрестной штриховки. На первый взгляд моВ приведенных выше алгоритме и примере функция у
Нижний
40
20
50
50
60
50-13-12-10-9
80
-7
10
22
100
0
20
50
50
50-13-12-10-9-19-40-25 50
50
Нижний
b
a
Верхний-50-50-6 -4
80
60
40
100
-4
I
13
29
19
22
1
1
3
1-50
-50-50
5
Ю0
0
20
50
50 50-9-13-12-10-23-30-40-25
1-50
Нерхнип
=
=
20
40
может показаться, что перекрестную штриховку можно получить пупутем
=
z
наложения
const
и х
=
двух
образованных
результатов,
б
плоскостями
const. На рис. 4.12 показано, что это не так
[4-3].
Нижний 50
20
60
40
80
50-9 —13 —12 -10 -9 -19-40-25
40
z
=
const
или х
=
const, которые ближе
всего к
Верхний
0
1
5
29
50
Нижний
I -50
Верхний
d
С
Обратите внимание на рис. 4.12, с, где стрелки указывают на ненекорректные места. Верный результат, показанный на рис. 4.12, d,
получен обработкой тех кривых из числа лежащих в плоскостях
100
80
60
19 22
9
40
60
10
5
1 -50
0
24 36
29
19 22
9
40
60
10
5
горизонтальным
при обычном порядке их следования. Однако после обработки кажкаждой кривой, самой близкой к горизонтальной, необходимо обрабаобрабатывать участки
кривых, лежащих
в
ортогональных ей плоскостях,
которые находятся между указанной кривой и кривой, следующей
за ней. Разумеется, при обработке обеих последовательностей крикривых
нужно использовать одни и те же массивы верхнего и нижнего
плавающих
горизонтов.
В
частности,
если
кривые
для
функции
const наиболее близки к горизонтальным, то
F(x, z) при z
после обработки кривой при z, нужно обработать участки кривых
у
—
=
20
40
0
Нижний
0
20
80
-4 -9-13-12-10-23-30-40-25
е
248
Гл. 4. Удаление невидимых линий
и
поверхностей
Рис. 4.1 L Результаты примера 4.1.
20
80
100
0
50
0 -4 -9-13-12-28-23-30-40-25
f
100
50
Нижний
важных
рых
концепций. Наконец, более
поздние
реализации
алго-
алгоритма, использующие предварительную приоритетную сортировку
вдоль
оси
z
и
габаритные
простые
минимаксные
или
демонстрируют почти линейную зависимость
от
тесты, де-
объектов.
числа
В алгоритме Робертса требуется, чтобы все изображаемые тела
или объекты были выпуклыми. Невыпуклые тела должны быть
разбиты на выпуклые части (см. разд. 3.13). В этом алгоритме вывыпуклое многогранное тело с плоскими гранями должно представпредставляться набором пересекающихся плоскостей. Уравнение произволь-
a
плоскости в
произвольной
трехмерном пространстве
ax +
В матричной
by + cz + d
имеет
вид
D.1)
0
=
форме этот результат выглядит так:
[-V
>'
1]
Z
=
а
0
Ъ
Рис.
4.12.
Перекрестная
с
штриховка: линии с посто-
d
постоянным значением z (а); лилинии с постоянным значени-
(Ь); наложение а и b
(с); верный результат (d).
значением
х
при
=
const
плоскости
то
не надо
z2
между
—
zl
const.
и
х
z2> прежде чем обрабатывать кривую в
Если используется перекрестная штриховка,
или
[х
где [Р]т =
из
можно
0
выразить матрицей тела, состоящей
коэффициентов уравнений плоскостей, т. е.
4.3. АЛГОРИТМ РОБЕРТСА
Алгоритм Робертса представляет собой первое известное решение
задачи об удалении невидимых линий [4-7, 4-8]. Это математически
элегантный метод, работающий в объектном пространстве. АлгоАлгоритм прежде всего удаляет из каждого тела те ребра или грани, кокоторые экранируются самим телом. Затем каждое из видимых ребер
_
[abed] представляет собой плоскость. Поэтому любое
выпуклое твердое тело
формировать левое и правое боковые ребра.
лТ =
\)\Р}'
г
у
где
a»
a\
(ii
bx
bi
bn
c\
ci
Cn
dx
d2
dn
...
каждый столбец содержит коэффициенты одной
плоскости.
Напомним, что любая точка пространства представима в однооднородных координатах (см. [1-1]) вектором
=
[x у
точка
[S]
[S]
каждого тела сравнивается с каждым из оставшихся тел для опре-
z
1]
определения того, какая его часть или части, если таковые есть, экраниэкранируются этими телами.
алгоритма Робертса растет теоретически как квадрат числа объекобъектов. Это в сочетании с ростом интереса к растровым дисплеям,
раработающим в пространстве изображения, привело к снижению инте-
Робертса. Однако математические методы, исиспользуемые в этом алгоритме, просты, мощны и точны. Кроме то-
интереса
того,
250
к
алгоритму
этот
Более
Поэтому вычислительная трудоемкость ал-
алгоритм можно использовать
Гл. 4. Удаление невидимых линии
и
для
поверхностей
иллюстрации
некото-
[S]
¦
того,
[Р]т
=
если
0 (см. [3-5]). Если
же
лежит
на
плоскости,
то
[S] не лежит на плоскости, то
скалярного произведения показывает, по какую сторону
от плоскости расположена точка. В алгоритме Робертса предпола-
знак этого
предполагается,
что точки, лежащие
скалярное произведение.
рассмотрим
251
внутри тела, дают положительное ска-
Чтобы
следующий пример.
4.3. Алгоритм Робертса
проиллюстрировать
эти
идеи,
рас-
Пример 4.2. Матрица тела
© © D) ©
плоскостей, описывающих единичный куб с центром в начале координат, га-1/2. Они изобраковы:
1/2, у4
-1/2, г,
1/2, z6
-1/2, >'3
1/2, v2
.v,
Шесть
изображены
на рис.
=
=
=
=
=
4.13. Уравнение правой
=
0
-
+ 0
¦
ух
-
г,
2лг,
пли
6
-2
6
-2
6
]
плоскости имеет вид
Здесь результаты
+
1-2
=
1
-
=
A/2)
=
О
для
первого,
третьего и
пятого
уравнении
плоскостей
(столбцов)
и, следовательно, они составлены некорректно. Умножая эти уравне-
отрицательны,
уравнения (столбцы) на —1, по 1учаем корректную матрицу тепа для данного куба:
О
Полная матрица тела такова:
-220000
[V]
=
1
1
0
0
0
0
2
2
0
0
0
0
0
0
1
1
0
0
0
0
2
2
0
0
0
0
0
0
1
1
0
0
0
0
2
2
-1
1
-1
1
-1
1
-1/2
1/2 -1/2
1/2 -1/2
1/2
0
0-2
2
0
0
0-22
Если
знак скалярного
произведения для
какой-нибудь
плоскости
выбраны
плоскости
нуля, то соответствующее уравнение плоскости следует умно1. Точка внутри куба с координатами v = 1/4, у = 1/4, z = 1/4 представ-
умножить на
представляется в
—
верно.
меньше
В приведенном примере корректность уравнений плоскостей бы-
Разумеется, это не всегда возмож-
возможно.
Существует несколько полезных методов для более общего слу-
случая.
Хотя уравнение плоскости D.1) содержит четыре неизвестных
коэффициента, его можно нормировать так, чтобы d
Следовательно,
этих
однородных координатах в виде вектора
[S}
=
[1/4
1/4
Ска 1ярное произведение этого вектора
трех неколлинеарных
1]
=
на матрицу
1
[1
14]
4]
для
определения
(x3t y3, z3) в нормированное уравнение
объема равно:
2
2
0
0
0
0
0
0
2
2
0
0
0
0
0
0
2
2
1-1
1
-1
достаточно
1. Следова-
D.1) дает:
ахг + by2 + CZ2 = -1
(D © © © © ©
'
точек
=
коэффициентов. Подстановка координат трех неколлинеарных
точек (*,, ylt z,), (x2t y2, z2),
1/4
0
111111
была проверена экспериментально.
Эту матрицу тела следует проверить с иомошыо одной из тех точек, о которых изизвестно, что они лежат внутри тела, чтобы убелиться, что знаки каждого уравнения
0
0
1-1
ахз + Ьуг + cz3
В матричной
=
-1
форме это выглядит так:
Х\
У\
z\
а
хг
Уг
Z2
b
1
хг
Уг
Z3
с
-1
=
-1
или
[Х)[С]
=
[D]
D.2)
Решение этого уравнения дает значения коэффициентов уравнения
плоскости:
[С]
Другой способ
-
pq-[D]
используется, если известен вектор нормали
к
плоскости, т. е.
п
Рис. 4.13. Куб с центром в наначале координат.
гДе i,
j, k
—
=
а\ +
bj + ск
единичные векторы осей х, у, z соответственно.
Уравнение плоскости примет вид
h cz + d = 0
252
Гл. 4. Удаление невидимых .шний
и
Тогда
поверхностей
253
4.3. Алгоритм Робертса
D.3)
Величина d вычисляется с помощью произвольной точки на плоскоВ частности, если компоненты этой точки на плоскости (а*,, >>,,
плоскости.
?|), то:
d
Поскольку объем
линий
=
-(axi + by i + cz{)
вычислений
в
D.4)
алгоритмах удаления
невидимых
поверхностей растет с увеличением числа многоугольнимногоугольников, для описания поверхностей выгодно использовать многоуголь-
*- х
или
более
многоугольники
с
быть
как
чем
тремя
так и
невыпуклыми,
Эти
сторонами.
многоугольники
неплоскими.
могут
Метод, предложенный
Рис.
Мартином Ньюэлом [4-1], позволяет найти как точное решение для
уравнений плоскостей, содержащих плоские многоугольники, так и
«наилучшее»
приближение для
неплоских
многоугольников.
Этот
4.14.
Плоскость
в
фехмерном
пространстве.
Или, разрешая относительно
коэффициентов уравнения паоскости:
метод эквивалентен определению нормали в каждой вершине мномногоугольника посредством векторного произведения прилежащих рекоэффициенты
ребер и усреднения результатов. Если а, Ь, с, d
а
1
0
0
-Г
Ь
0
I
0
-1
-I
с
-1
1
1
-1
-1
—
"-Г
—
уравнения плоскости, то!)
а
=
X] (}',
ш
-
т
yj){Zi
Уравнение плоскости теперь имеет вид:
i=\
-\-v-z+l=O
b
=5^ (Zi-z)(xj+
D.5)
или
х + у + z
Решая другим методом,
С
можем
-
I
О
=
получить кормапь к этой плоскости,
используя
=
векторное произведение пары векторов, являющихся смежными
вершин, например f7,:
ребрами одной из
где
if /
a
d вычисляется с
метод
=
n
then 7
помощью
=
1 else j
любой
i+ 1
=
точки
на
плоскости.
Этот ме-
<
j
k
U2-.X1)
Vi)
(.V2
(уз ~)'l)
(Z2- г О
On
~
—
и)
(Z3- 2 |)
иллюстрируется примером 4.3.
или
Пример 4.3. Уравнения плоскостей
k
-1
J
I
-1
0
1
«
Рассмотрим четырехсторонний плоский многоугольник, описываемый четырьмя
1, 1) (рис. 4.J4). Используя
вершинами \ , A, 0, 0), У2 @, 1, 0), Уъ @, 0, 1) и У4 A,
вершины V[t Vv VA и уравнение D.2), получаем:
n
-
1
0
0
а
=
-1
0
1
0
b
-1
1
-1
1
с
-1
i, j, k
D.4) и
У4,
—
=
единичные векторы осей
v. у,
0
z соответственно.
получаем значение постоянного члена
в
"
d= -1A
-
I + \)= -|
Следовательно, уравнение плоскости опять имеет вид:
лг + у + z
Здесь
154
п
—
число вершин многоугольника.
—
Прим. перев.
Гл. 4. Удаление невидимых линий и поверхностей
4.3. Алгоритм Робертса
-
I
Используя уравнение
уравнении тоскости:
=
0
Обращаясь теперь к методу Ныоэла при п
в
=
(У1
>'2)(г 1 + Z2) + (у2
-
=
>3)(-2 +zi) +{уз
-
Ь
4, получаем из уравнения D.5):
~
=
=
2.1
}'4) (zi +24)
Вычисление d с использованием \ { и деление на 2 дает такое же приближенное урав-
=
B2
+ (Z4
С
-
Z
содержит вершины
этой плоскости.
-
|)(*4 + * l)
(OKI) + (-1X0) + (OXD + @B)
=
{Х\
Х2)(У\ + >'2) + С*2
-
=
2
V4)
-*3)(.У2
+ (*4 -Л1)(У4 +>'О
=
=
z и со-
F, и Vv Однако У2 и VA немного смешены по разные стороны от
Перед началом работы алгоритма удаления невидимых линий или
=
-
уравнение плоскости. Аппроксимирующая тоскость проходит через прямую л-
2
поверхностей для получения желаемого вида сцены часто применяприменяется трехмерное видовое преобразование. Матрицы тел для объекобъектов преобразованной сцены можно получить или преобразованием
исходных матриц тел или вычислением новых матриц тел, исполь-
AX1) + (OXD + (-!)(- П + @)(-1) = 2
преобразованные вершины или точки.
Если [В]
матрица однородных координат, представляющая
исходные вершины тела, а [Т]
матрица размером 4x4 видового
преобразования, то преобразованные вершины таковы [1-1]:
используя
—
а используя
У4, получаем для постоянного члена:
—
d= -B-2 + 2)= -2
Поспе деления
на
2 уравнение плоскости
вновь принимает вид
[ВТ]
x+y+z-\=0
—
ограничивающих тело:
\B\\V\
многоугольников.
где
Рассмотрим почти плоский многоугольник, описанный четырьмя вершинами
Vx A,0,0), V2 @,1,0), Уъ @,0,1) и V4 A.1,-1,-1). Вычисляя нормаль в каждой вершивершине через векторное произведение пары прилежащих ребер, имеем:
Усредняя
П2
=
пз
=
n4
=
—
следующим
[ VT]
D.7)
нулевая матрица.
правой части
преобразованных плоскостей задаются сле—
в
образом:
=
[D]
D.8)
—
=
[BT\[VT\
=
=
Подставляя уравнение D.6), сокращая
=
i +
[В] и умножая слева на
1.05J + k
Определение постоянного члена в уравнении плоскости с использованием одной из
1. Следовательно, приближенное уравнение пловершин, например У{. дает d
=
на
имеем
n
—
Итак, преобразованная матрица тела получается умножением исисходной матрицы тела слева на обратную матрицу видового преобпреобразования.
плоскости таково:
х +
к
[D]
преобразованная матрица тела. Приравнивая певые чачасти уравнения D.7) и D.8), получаем
j
V2V3<S>V2Vi =i+j + k
i+ I.IJ+ l.lk
V3V4®V3V2
i+ l.lj + k
V4Vi(g)V4V3
нормали, попучаем
Метод Ныоэла приводит
матрица тела, a [D]
=
[BT][VT]
где
nt
[ V]
Аналогично уравнения
Пример 4.4. Неплоские многоугольники
=
D.6)
[В][Т]
[ВТ]
преобразованная матрица вершин. Использование уравуравнения D.2) позволяет получить уравнения исходных плоскостей,
где
Пример 4.4 иллюстрирует метод Ньюэла для почти плоских много-
эти
=
1.05 >• + z
-
1
=
Следующий пример служит этому иллюстрацией.
0
Пример 4.5. Преобразование тела
такому же результату. В частности,
Рассмотрим перенос единичного куба с центром в начале координат на три единицы
а
256
=
Пл. 4. Удаление
(-1X0) + A)A) + A)B) + (-1X1)
невидимых линий и
поверхностей
=
2
в
положительном направлении
4.3. Алгоритм Робертса
оси
v.
Соответствующая матрица преобразования
размером 4x4 (см. [1-1])
имеет вил
точка
[Л
а
[У] ^ 0. Однако точ-
лежала внутри нспреобразованного гела. Слетователыю, [S]
| I
=
О
О
О
0
10
0
0
0
10
3
0
0
преобразованной матрицы тела
\S]-[VT\
Г
6
6]
певоЯ
гакова:
=
2
=
1
обратная к ней матрица, которая можег быть получена формально или подбором,
\гг1
[5] лежит вне перенесенного тела. Проверка скалярного произведения [S] и пре-
этемент во втором столбце, который соответствует
дает один отрицательный
Это показывает, что данная точка лежит вис тела. Фактически она рас
(рани куба.
т. е. с внешней стороны относительно лево
положена слева or левой грани куба,
и показал отрицательный знак.
грани, что
1
о
о
о"
0
10
0
преобразования, то
0
0
О
[571
1
[S] по i>чается умножением на матрицу пре-
Если преобразование матрицы точки
=
[S][T\
=
[111 4][Г)
=
[13 1
1
4]
C.2S 0.25 0.25 1]
точки с А'
Проверка скалярного произведения преобразованной
-3001
=
=
3.25 на преобразо-
преобразованную матрицу тела лает
Умножение
4.2.
слева
матрицы
тела
данною
единичного
куба, полученной
в
примере
[Т]~] лает матрицу гета для перенесенного куба:
па
[ST)-[VT)
6
=
6
2
61
® ®
Это г результат показывает, что преобразованная точка лежит внутри преобразованпреобразованного тела.
1
0
0
0
-2
2
0
О
О
О
0
1
0
0
0
О
-2
2
о
о
0
0
1
0
0
0
О
0
-2
2
-3
0
0
1
1
1
1
I
1
Тот
что
факт, что плоскости имеют бесконечную протяженность и
скалярное произведение точки на матрицу тела отрицательно,
если точка
лежит
тела, позволяет предложить метод,
вне этого
в
котором матрица тела используется для определения граней, котокоторые экранируются самим этим телом. В примере 4.5 показано, что
2
2
0
0
0
О
0
0 -2
2
0
О
плоскость
0
0
0
0 _2
2
лежит
7
-5
1
1
1
1
отрицательное
левую грань на
столбец
в
отметку .v
на отметку 3.5. Первый
2.5, а правую грань
преобразованной Maipnue тела сочержш коэффициенты уравнения ню=
—
скости правой грани:
-2v + 7
что и
0 или
.v
=
и ожидалось для
левой
=
0 или а
=
3.5
258
=
1/4
Если зритель находится
Гл. 4. Удаление невидимых
линии
в
11
и
=
|1
2.5
1
пло-
левая плоскость
бесконечности на положительной по-
полуоси z и
смотрит на начало координат, то его взгляд направлен в
сторону отрицательной полуоси z. В однородных координатах век-
=
[1-1]:
[0 0
-
1
0]
который служит, кроме того, образом точки, лежащей в бесконечбесконечности на отрицательной полуоси z. Фактически [Е] представляет
любую точку, лежащую на плоскости z
-°°, т. е. любую точку
типа (х> у
со). Поэтому, если скалярное произведение [Е] на
=
14
такая
рис. 4.15.
[Е]
i рани.
[1/4
только
снаружи. В примере 4.5 таковой объявляется
вектор такого направления равен
Напомним, что в примере 4.2 точка
[5]
дает
(столбец) в матрице тела, относительно которой точка ле-
требовалось. Ана югично второй с голбец даст
2д- -5
чго
=
произведение
(второй столбец) в преобразованной матрице тела [ VT] и непреобразованная точка [S]. Эти рассуждения проиллюстрированы на
Перенос единичного куба с центром в начале коортннат на три единицы вправо попомешает
скалярное
1
поверхностен
4|
—
у
4.3.
Алгоритм Робертсй
бесконечности) это эквивалентно поиску положительных
значений в третьей строке матрицы тела.
Этот метод является простейшим алгоритмом удаления невидивыневидимых поверхностей для тел, представляющих собой одиночные
пюдения
Внутри
выпуклые многогранники. Он также используется для удаления
одного из алнелицевых или задних граней из сиены перед применением
в даналгоритмов удаления невидимых линий, которые обсуждаются
нели-
I Внутри
Преобразованное
Ненреобразоваиная
точка
тело
[VT]
—
Снаружи
[S]
данной главе ниже. Этот способ часто называют отбрасыванием задчисло граней при
задних плоскостей. Для выпуклых многогранников
2
1
Внутри
этом сокращается примерно наполовину. Метод эквивалентен
1
плоскости¦
вне
-1
тела.
использовать также и для
столбец, соответствующий какой-нибудь плоскости в матрице тела,
отрицательно,
[Е]
то
лежит по
отрицательную сторону этой
Следовательно, эти плоскости
наблюдения, лежащей в плоскости z
плоскости.
Z
=
Такие
—
со
экранируется самим телом,
плоскости
грани
—
называются
задними.
со,
а
из
а
любой
пробная
как показано на
нелицевыми,
пло-
точки
точка
¦
оттенок
им
к
Пример 4.6. Нелицевая плоскость
единичный куб с центром в начале координат, как показано на
находится на положительной полуоси z, ее координаты
рис. 4.16. Точка наблюдения
Вновь рассмотрим
—
нелицевые,
а их
© © %
—
•
\Е] [V]
=
[О О
-
1
0]
-2
2
0
0
0
0
О
О
-2
2
0
0
О
0
О
0 -2
2
1
1
1
1
I
1
-z
!
Внутри
—
[Е] [00-10]
=
ф
*
=[0
О
О
О
2 -2 ]
со
Отрицательное число в шестом стопбие показывает, что грань с этим номером
Снаружи
Гсло
пропорциональным
указанного вектора на матрицу тела дает:
[V] <0
грани
аксонометрических проекций (точка наб-
Точка в
делается
многоугольника
поверхности на направление взгляда. СледуюСледующий пример иллюстрирует данный подход.
проекции нормали
рис. 4.16. Та-
соответствующие
простой закраски (см. гл. 5). Интенсивность или
равны [0 0 1 0], взгляд направлен на начапо координат. Скалярное произведение ука-
является условием того, что плоскости
Заметим, что для
цветовой
к
на
Следовательно,
[Е]
задние.
невидимы
=
вы-
поверхности для каждого отдельного многомногоугольника. Отрицательность нормали к поверхности показывает,
что нормаль направлена в сторону от наблюдателя и, следовательиспользоследовательно, данный многоугольник не виден. Этот метод можно
нормали
вычислению
Бесконечные
-'конечные Т
Рис. 4.15. Точка наблюдения
в
не-
плосколицевая; рис. 4.16 подтверждает это. Нулевые результаты соответствуют
плоскостям, параллельным направлению взгляда.
Внутри
Данный метод определения нелицевых граней в результате фор-
Бесконечные!
формирует аксонометрическую проекцию на некую плоскость, располорасположенную бесконечно далеко от любой точки трехмерного про-
|
плоскости -"—И
I
Направление взгляда
—
Точка наблюдения в + со
пространства. Видовые
определения нелицевых плоскостей. Когда видовое
преобразование включает в себя перспективу, то нужно использо-
производятся
[е]=[оою]
использовать
Гл. 4. \ юление невидимых линий
до
полное
перспективное
преобразование
одного
трехмерного
пространства в другое, а не перспективное проецирование на неко-
Рис. 4.16. Нелицевые плоскости.
260
преобразования, включая перспективное, про-
и
поверхностей
261
4.3.
Алгоритм Робертса
торую двумерную
плоскость
преобразование
к
приводит
[1-1]. Полное перспективное преобра-
искажению
перспективному
проецированию
Этот результат
из
[?J
трехмерного тела, которое затем
проецируется на некую плоскость в бесконечности, когда нелицевые
плоскости уже определены.
ром:
некоторого
эквивалентен
на
центра
Скалярное произведение
IE]• fVT]
и
Соответствующие точка наблюдения
неподвижным.
направление взгляда получаются умножением справа на матрицу,
обратную матрице видового преобразования. Следующий
этим
(?] на1 преобразованную матрицу тела равно:
пример
методам.
0
2\:
I-2/V2
=
0
-2/\f]
2/V2
Слеювательно, первая и шестая плоскости, которым соответствуют левая и задняя
грани в исходном положении куба,
4.17 подтверждает это). Заме-
нелицевые (рис
—
преобразовано и направление взгляда фиксировано, то
поиск отрицательных членов в скалярном произведении пробной точки на преобразо'ванную матрицу тела эквивалентен поиску положительных членов в третьей стро-
Заметим
строке
служит иллюстрацией
к
0J
пло-
конечную
Видовое преобразование можно применить к телу так, чтобы
точка наблюдения оставалась фиксированной. При другом способе
остается
fO 0 -1
перспек-
плоскость проекции.
тело
=
также,
что когда тело
преобразованной матрицы тела.
Эквиватентная точка наблюдения для
непреобразованного тела, соответствую-
соответствующая повороту вокруг оси .»', равна:
Пример 4.7. Нелицевая плоскость с учетом видовою преобразования
Рассмотрим единичный куб с центром в начале координат, повернутый на 45° вовокруг оси у. Соответствующее вщовое преобразование будет иметь вид [1-1]:
10 0
т. е. эта точка
1
ОЦЛуГ1 =[-l/vI 0
расположена на прямой —х
=
1/v? 0J
=
I
1
—
0
I
0]
у в бесконечности в направлении поло-
положительной полуоси z. как показано на рис. 4.17, Ь. Аналогично определяются эквива-
со&ф
0 —sin 0
О
1/\2
0 -\(\Д
0
0
10
0
0
10
0
0
cos0
0
1/V2
0
0
0
0
sin 0
I/V2
эквивалентное направление взгляда
[ЕГ]
=
1?][/?уГ'
пробная точка:
и
=
[0
-1
0
0][Rv]~l ={\/\T)[\
0
-1
0]
Эта точка распопожепа на прямой
v = г в бесконечности в направлении отрицаотрицательной полуоси z. Скалярное проишеденне этого эквивалентного направления
-
0
1
0
0
1
0
взпяда на исходную матрицу
гела равно:
Преобразованная матрица тела получается умножением исходной матрицы тела слеслева на матрицу, обратную матрице видового преобразования. Для чистою поворота
обращение матрицы видовою преобразования сводится к ее транспонированию По-
0
0
2
-2
Поэтому
го
1
I
—
М\П
0
1/V2
0
sin 0
0
1
0
0
0
1
0
0
-sin ф
0
COS (J)
0
-I/V5
0
I/V2
0
0
0
0
1
COS0
0
0
=
Оно вновь показывает,
чю
первая и шестая плоскости нелицевые,
4.17
по i-
Пробная точка
I
0
=
4S°
0
0
0
1
Пробная точка
[00-10]
Нелицевая
Нелнпевая плоскость п
плоскость
Нелицевая прямая
[10 ~10]
,*
Z
Нелицевая
-\
Преобразованная Matpuuj
и рис.
тверждает эю.
гела такова:
Нелицевая
плоскость
X
о
прямая
1
0
2/\2
0
0
-2/v?
2/VJ
О
-2
2
0
0
2/\2 -2M
1
1
0
1
0
1
-2/V2
1
21 \1
I
Направление взгляда
плоскость
Точка наблюдения
[0 0 I 0]
jI направление
0
[о
-1
взгляда
О]
/
Точка наблюдения
[-1010]
Если смотреть на начало координат из точки наблюдения [0 0 I 0], лежащей на поположительной полуоси z, то
262
Гл. 4. У
«ie
направление взгпяда или пробная точка
невидимых
линии
и
поверхностей
задаются иск г с
Нелицевая
Рис. 4.17. Видовое
4.3.
преобразование и нелицевые плоскости.
Ллгоритм Робертси
После определения
нелицевые отрезки.
нелицевых плоскостей остается найти нели-
Нелицевой отрезок образуется в результате пересе-
пары нелицевых плоскостей. Хотя в примере 4,6 шестая пло-
пересечения
плоскость нелицевая, однако нелицевых
себя. В то же время
только одна плоскость заслоняет сама
4.7 ребро,
отрезков нет, поскольку тольв
примере
ставляет собой плоскость в трехмерном пространстве.
определяет точку на этой плоскости. Значение а положительно,
точкой наблюдения.
Пример 4.8. Параметрическая плоскоеib
является нелицевым.
выяснить,
существуют
в
другими телами
оставшийся
удаления нелицевых
ли
такие
отрезки,
картинке или в сцене.
отрезков необходимо
которые экранируются
точки
наблюдения,
(рис. 4.18).
В однородных координатах Р,
картинки.
сцене
использующем
и
кластеры отрезков
упорядочены
в
тел.
Например,
если
все
тела
P(t)
=
v
=
s + d/
некотором приоритетном списке, использую-
наблюдателя, то никакое тело из этого списка, у которого блиближайшая вершина находится дальше от наблюдателя, чем самая
удаленная из концевых точек ребра, не может закрывать это ребро.
Более того, ни одно из оставшихся тел, прямоугольная оболочка
которого расположена полностью справа, слева, над или под ребребром, не может экранировать это ребро. Использование этих приесравнивать
сокращает
положительной
полуоси
Р2 таковы:
число тел, с
=
Р2
=
[-2 0 -2
1]
2 0
-2
IJ
l
[4 0 0 0]/
[
[-2 0 -2
Вектор точки наблкпення имеет вит
g
??(«./)
Рис. 4.18
и
табл. 4.4 показывают,
частного примера
[0 0
-2
[-2 0
=
=
=
1
1] + [4 0 0 0]/+ [0 0
что происходит при изменении / и а.
рассмотрим случай, когда t
P@.5)
=
v
=
0.5
и а
=
0
-2
Ц-Ч4 0 0 0]@.5)
0
0
-2
11
[
I
0]«
В качестве
3. Тогда
=[-2
=
которыми нужно сравни-
0]
каждый отрезок или ребро.
Для сравнения отрезка Р {Р 2 с телом удобно использовать парапараметрическое представление этого отрезка:
P2[2 0-2
Р,[- 2 0-2 1]
=
Pi +(P2-P\)t
v
где v
—
вектор точки
направление отрезка.
невидимым.
Если
он
которых он невидим.
отрезок
=
и
s
+ d/
отрезке, S
Для
=
—
начальная
точка, ad
—
-!¦¦
на-
Необходимо определить, будет ли отрезок неви-
невидим, то надо
от точки Р
Q(a,t)
на
=
этого
найти
те значения /,
для кото-
формируется другой параметрический
-1
(/) до точки наблюдения g:
v +
ga
=
s +
dr + ga
0<r<l
a^
Здесь a nt выполняют аналогичные функции. Заданное значение/
укаРис. 4.18. Параметри-
указывает точку на отрезке Р (/), а а указывает точку на отрезке, прове-
проведенном от точкиР (О до точки наблюдения.
264
Гл. 4. Удаление
невидимых линий
и
г
в
до
приемов значительно
Pi
=
ближайших вершин для представления расстояния
значения z
и
на
Следовательно.
прямоугольной объемлющей оболочкой тестов позволяет удалить целые
или
Р,(-2,0,-2) в точку /\B,0,-2) из точ-
бесконечности
в
расположенной
отрезок или ребро нужно сравнить с другими телами сцены
группы
из точки
Рассмотрим отрезок, проведенный
Для этого каждый остав-
При этом использование приоритетной сортировки
(z -сортировки) и простого минимаксного или габаритного с прямо-
или
по-
только в той
поскольку тела, экранирующие Р(/), могут находиться
и
части этой плоскости, которая заключена между отрезком Р(/)
образованное пересечением первой и шестой плоскостей,
После первого этапа
Пара (а, /)
•
Фактически Q(a,/) пред-
поверхностей
265
Точка наблюдения [0 0 1 0)
4.3. Алгоритм Робертса
Параметрическая плоскость.
равно
тела положительно. Это скалярное произведение
Таблица 4.4.
h
/)
/
a
v(/)
0
0
(-2 0
-2
[-2 0 _2
I)
=
u-[VT]
Если
1]
=
все компоненты
h неотрицательны для некоторых t и а, то
отрезок при этих значениях
1-2 0
1/2
-3 2
t
экранируется данным телом. Обозначив
1]
p
1
1.-2 0
-1
Л
2
[-2 0
0
1]
3
[-2 0
1
0]
I
о
0
-2
и
1/2
1
о
0
-3/2
i]
1
[
о
0
-1
i|
f
о
0
1/2
1
0 0
|
-2
1|
2
0
0
w
1
0
2
I
0
-2
l|
[
о
hj
1
2
0
1/2
1
2
1
f
2 0
0
s-[VT]
=
g-[VT]
=
0 < / < I, a > 0
pj + tqj + awj >0
столбца в матрице тела. Эти условия должны вые. для всех плоскостей, ограничивыполняться при всех значениях у, т.
где j
_
номер
объем тела. Пограничный случай между видимостью и не=
0 точка лежит на
0. При
невидимостью возникает, когда
ограничивающих
h}
Лу
i]
1
0
=
запишем условия в виде
плоскости.
3
0<?<1, a>0
s-[VTl + /d-[VT] + ag-[V7J>0
0|
систему
Полагая
Лу
=
=
0 для всех плоскостей, мы получим систе-
уравнений относительно а и tt которые должны удовлетворятьсовместного
H
одновременно. Результат можно получить путем
из этой системы, при
решения всевозможных пар уравнений
-3/2
П
будут найдены все значения а и /, при которых изменяется
-1
i]
видимости
—
->
удовлетворяться
отрезка.
Схема решения
возможных решений при у уравнениях
2
1
2 0
0
П
3
[
2 0
1
0]
показана
на
рис.
этом
значение
4.19. Число
(плоскостях) равно у (у
-
1)/2.
во
Каждое решение в диапазонах 0 ^ t ^ 1, а ^ 0, подставляется
0 вывсе остальные уравнения для проверки того, что условие h} ^
выполнено.
Поиск корректных решений производится для
того,
что-
чтобы найти минимальное среди максимальных значений параметра
3ia точка лежит
Z
=
-2.
При а
на отрезке
=
Р\Р-> и является точкой его пересечения с осью г при
3
.
)
и
максимальное
среди
минимальных
значений
'('maxmin)- Отрезок невидим при ^axmin < / < /mlnmax. Последнее трели-
С?C. 0.5)
=
v +
g«
=[0 0
=
что
соответствует
точке
рис.
4.18.
из
рис.
4.18. Заметим,
Каждая
t(t
на
точек,
оси
z
-2
@ 0
II)
при
.1=1. Эта
приведенных
что каждая ич
1] + [0
в
ночученны.х
0
точка
табл. 4.4.
требование является простым следствием
0]C)
отмечена
отмечена
кружком
на
крестиком
на
\)-B)
(О-О4
из
классической
задачи
'-и
прямых параллельна оси z.
Напомним, что скалярное произведение любой точки, лежащей
внутри тела,
i(
на
матрицу тела положительно. Если же точка лежит
внутри тела, то она невидима.
Поэтому для определения части от-
отрезка, которая экранируется телом, достаточно найти те значения
а и t> для которых скалярное произведение Q(cx,
266
Гл. 4. Удаление невидимых линий и поверхностей
t)
=
u на матрицу
Общее число решений при j уравнениях
267
4.3. Алгоритм Робертса
—
Рис. 4.19. Схема решения
относительно аи/.
нейного программирования. Ниже приводится еще один алгоритм
решения данной задачи, напоминающий ранее изложенный алгоалгоритм
отсечения
несколько
Кируса
Бека (см. разд. 3.5). Но
—
сначала дадим
гтн
Используя
значения,
/,=/;+ щ. +
и и1.
>
получаем
куб
с
в
центром
начале
кооришач.
Отрезок
5-8/
>0
© -3 + 8/
>0
©
I
>0
©
I
>0
©
5
Q)
Пример 4.9. Проверка экранирования отрезков ie.ia.Njn
единичный
от
кубом и частично экранируется им.
-
(ь) -3
P(t)
=
v
=
[-2 0
-2
1] +[4 0 0 0]/
s
=
1-2 0
-2
1]
d
=
4
0
0]
(
0
условия всегда выполняются. Они выражают тот геометрический факт,
целиком
находится
имеем
=
1
fO 0
«внутри»
просто посмотрев на
что
[VT]
Значения /;, q и
iv
\V\
=
[-20
2.
0
0
0
0-2200
0
0
0-22
1
I
I
1
1
I
суть результат скалярною произведения s, d и g на
[VT):
те
p
<y
vv
s-\VT\=
I5-31I
5
-31
=
d-|VT]
[-8
8 0 0
0
0|
=
g-[VT] =[0
000-2
2|
=
общем случае
=
5/2
можно ре-
т> не так.
что все неравенства h
> 0 удовлетворяются только внутри указанной на рисунке
ограниченной облает.
Итак, /maxmin
Отрезок невидим
5/8 ^ / ^ 1.
в
диапазоне
=
РE/Ъ)
=
=
5/8.
и
видим
3/8, a /minnm
3/8 < /
<
Используя параметрическое уравнение отрезка,
что и
5/8
0 ^ / ^ 3/8
при
имеем
|-2 0
-2
|4 0 0
11C/8)
[-2 0
-2
11+ [4 0 0
1|E/8)
=
=
[-1/2 0
-2
1]
Ц/2 0
-2
I]
показано на рис. 4.20.
(X
Р2 [2 0 -2 1]
Р, [-2 0 -2 l]
t=5/8
t=3/8
Невидимый участок
/77/777
ск=5/2
-1
Отрезок невидим
в этой области
•¦х
-2
..
268
а =
-1
I Точка
Направление взгляда —Ч*
Рис.
Гл п i гЛ
наолюдення [И U 1
UJ
4.20.
Проверка
экра-
экранирования отрезка телом.
Гл. 4. Удаление невидимых линий и поверхностен
и
стороны прямых, где расположены возможные решения. Очевидно,
=
=
в
а
описывает прямую в пространстве
m полеченных
обозначены
0
0
однако
=
(а, /). Поуравнений
учнтспьно взглянугь на фафнческое решение, показанное на рис. 4.21. Штриховкой
куб не преобразуется. Следовательно,
=
них,
плоско-
куба. Превращение оставшихся четырех
=
решить,
0]
что отрезок
бесконечных полупространств, ограниченных
5/8. /
3/8.
неравенств в равенства дает следующие их решения: /
=
Эти
3/2.
а
уравнения
Разумеется, приведенный пример элементарен.
Каждое
Здесь б\лем считать,
2« > 0
Третье и четвертое из эгих неравенств просто устанавливают, что соответствующие
Дая точки наблюдения, расположенной в бесконечности на положительной полуоси
g
>словию
+ 2а >0
плоскостями, несущими верхнюю и нижнюю грани
z.
соответствующих
куба. Конкретно,
рассуждения.
/¦'1[-2, 0 -2 I] до Р2[2 О -2 1] лежит за этим
как показано на рис. 4.20. Снова имеем
неравенств,
0, по ошому на каждую из шести плоскостей, неслших грани
примеров, которые помогут пояснить приведенные рас-
Вновь рассмотрим
шесть
О
С
0
3/2
Рис. 4.21. Графическое решение приме-
2ь
L0
4.3. Алгоритм Робертса
примера 4.9.
и
В приведенном
Поэтому удается
результате
выше
примере получены два значения /. Поэто-
выбрать /maxmin и fminmax. Что же делать, если в резуль-
1=
2 1
1/2
=
0
t=l
t=l/2
решения уравнения получится только одно значение П Следу-
Следующие примеры
а-3/2
а=3/2
иллюстрируют эту проблему и способ ее решения.
Отрезок невидим
Пример 4.10. Решение с единственным
значением
в этой
/
а=1/2
Продочжая использовать модель единичного куба с центром в начаче координат, расI 1] до Р, [0 0 -1 I], как показано на рис. 4.22. Здесь:
рассмотрим отреюк от Л, [I 0
—
а=
области
1/2
—
/>(/)
=
=
[l
0 -1
S=
[
I
v
1] + Ы
1
0]
Рассматривается случай непрсобразованного куба, т. е. \УТ\
=
[У]. Величины/;, с/ и
Решение соответствующих уравнений для /;; = 0 дает значения / = 1 '2, i = 3/2,
=
1/2. Решение t = 3/2 следует отбросить, ибо оно выходи г за предеа = 3 2 и а
пределы
vi'
1.0
Рис. 4.23. Графическое решение примера 4.10
0 0]
d= [-1 0
g= [0 0
0 0 0J/
I]
0-1
t
°0
раины:
допустимого диапазона 0 ^ / ^
I. Следовательно, найдено только одно значе-
Графическое решение показано на рис. 4.23, а. Вновь штриховкой обозначена
та сторона линии, по которую мог>т лежать допустимые решения. Очевидно, что
значение I-
p
?
w
=
s-[VT]
11
3
-I]
=
d-[V7]= 12-200
0
0]
=
g-[VT]
0-2
2]
=
=
3
[-1
0
[ 0
0
результат не обращает ограниченную область. Однако в изложенном методе решерешения не испильювалпсь граничные условия, представленные прямыми г = 0 и i = 1.
Как показано на рис. 4.23, Ь, добавление этих прямых к решению, очевидно, образу-
Система неравенств, выражающих условия /;. > 0, такова:
©
-
©
требуемую ограниченную область. Поэтому /niaxmin
все ограничения
I + 2/
>0
3
>0
-
образует
2г
hj
/40) =[1
©
1
©
3
-la >0
(б)
-1
+2a>0
и
/injnmax
> 0 удовлетворяются при обоих этих значениях t.
но, отрезок видим при
>0
1 2
=
0 ^ / < 1/2,
0
т. е.
=
1. Далее,
Сле ювагель-
от
-1
!] + [-]
0 0 0]@)
0 -I
!] + [-!
0
=
0
[1
-1
1J
до
>0
/>A/2)
=
[1
0
0]A/2)
=
[1/2 0
-1
I]
Изменение паправаепия отрезка, т. е. перемена мест Р\ и Р2, лае1 ооласть решения
от f
=
0 до / = 1/2.
Следующий пример показывает, что граница а
должна
=
0 тоже долж-
быть учтена.
Pi[io-n]
Р2[0 0-1
Пример 4.11. Граница по параметру альфа
Невидимый участок
Рассмотрим непреобразованный куб и отрезок от PJ1 0 2 1]
—
t Точка
Направление —I
показано на рис.
X
ю
Р2\- I 0 -2 IJ. как
4.24. Этот отрезок протыкает тело. Здесь:
/»(/)= v= [1
0
2
11 +[-2 0
s=
[
1
0
2
1]
d
[-2 0
-4
0]
=
-4
0J/
..
Рис.
r
n1
*наолюдення I-О 0 10J
„
.
_
тгмялл
взгляда
270
Гл. 4. Удаление невидимых линий
4.22.
отрезка
с
Проверка
невидимым
экранирования
Снова точка наблюдения находится в бесконечности и g
концом.
*>ванного куба, т. с. при I VT\
4.3. Алгоритм Робсртса
и
поверхностен
=
[ У]
=
[0010]. Для непреобра-
!
P2[-10-21], }
t=0
t=
t=3/4
U
Невидимый
участок
-1
Отрезок невидим
,P,[IO21]
Направление взгляда—]
Точка ft) 0 1
в
отрезка,
случае
о
протыкающего
Рис. 4.25.
=
s-[VT]=
> 0
11
3
[-1
q=
d-[VT]= 14 -400
w=
g'[V71= [0
0
0
-3
Один из приемов заключается в запоминании всех точек проты-
8-81
0-2
протыкания
2]
для
и
в
добавлении
тел,
пары
остальными
к
сцене
точками
3
>
0
>
0
-4/
Видимые
отрезки
Примеры
А.
неравенствам
1
5 -8г
+ 2«
соотве гс гвуюшич
показывают,
>
область. Добавляя границы i
область между /
=
штриховка,
1
нужно добавить к множеству уравнений А
0
единственный
дает
(рис. 4.25,
=
0 и /
=
Ь). Однако,
Но решения не образу-
1, получаем ограниченную
как
показывает
штрихов> О
=
3/4. Следовательно, отрезок вилим при
О $ / ^ 3/8 и 3/4 < К I
от
от
Р@) = [1 0 2 1J до РC/8)
=
[1/4 0 1/2 1J
РC/4) =[-1/2 0-1 1] до Р(\) =[-10-21]
описывающие
ограничивающих
=
0 возникают в случае протыкания (объек-
(объектов).
272
эти
границы,
2)(у + 3)/2, где j
пределами
и
минимального
из
и
а
т. е.
—
/
=
=
Поэтому три уравне1
0 и а
0, /
0,
0. Теперь число реше-
количество
—
=
=
плоскостей, ограни-
выбор максимального из минимальных
максимальных
корректных решений указанной
значений
системы
/
среди
уравнений
возможных
является
пропростой задачей линейною программирования. Ее решение эквивалентэквивалентно определению
корректной ограниченной области, получающейся
в
результате графического решения, примеры которого были даны
на рис. 4.21, 4.23 и 4.25. Блок-схема, приведенная на рис. 4.26, сосодержит алгоритм решения указанной минимаксной задачи. ПредпоПредполагается, что этот алгоритм используется только для таких отрезотрезков, о которых известно, что они частично или полностью невиди-
Все
Удалены
нелицевые и все полностью видимые отрезки выявлены
до начала
поверхностей
273
4.3.
и
работы алгоритма. Алгоритм начинает работу
с такими
значениями / и а,
Гл. 4. Удаление невидимых линий
и
области,
выпуклый объем тела.
Как упоминалось ранее,
невидимы.
Решения на границе а
0.
0
2. Добавление границы « = 0 дает уже корректную ограниченную область
=
3/8 и / = 3/4. Именно эта область дает значения fmaxmjn
3/8 и
краями /
или
нера-
=
:>
=
=
удовлетворяющие
за
уравнения,
область некорректна, поскольку при t > 3/4 не выполняется условие hj
эта
для j
с
=
Види-
и
существовать
0
=
для
образуют ограниченную
/
могут
решения,
>
заштрихована та сторона прямой, по которую мог>г лежать решения.
и
0,
что
ограниченной условиями 0 ^ / ^ 1
результат
уравнений
А,/ = 3/4. Это решение показано в графическом виде на рис. 4.25, а. Вновь заштрихо-
3/4
телами.
отрезков данными
этих
образуют структуру протыкания.
решений равно (у +
Решение
всеми
протыкания для этой пары объектов. Затем
0
>
точки.
со
протыкания,
¦V
© -3 + 8/ -2а :
(б)
отношением
> 0
+ 4/
1
0
отрезков, связывающих эти
соединения каждой точки протыкания
связанных
проверяется экранирование
©
t
1.0
5}
имеют Bin:
-1
о
Графическое решение примера 4.11.
Отрезки образуются путем
Условия Л,
в этой области
—
тело.
наблюдения
/?
/
у
///л.
Рис. 4.24. Проверка экранирования
Алгоритм Робертга
которые являются решениями пары ли-
нейных уравнений с номерами еу
На этом этапе проверяются условия
и
минимальным
(текущими
е2, а также с tmin и /тах (текущи-
и
максимальным значениями
/) и с п (мощнос-
(мощностью множества уравнений). На первом этапе алгоритма проверяет-
п,>0
проверяется выполнение условий А- > 0. Если эти условия выполнены,
нет
этапе вычисляются значения
втором
и
являются значения fmaxmin
то на
/mjn и /тах. Результатом явля-
/minmax.
Метод решения, обсуждавшийся выше, требует больших затрат
машинного времени. Поэтому стоит поискать более быстрые спо-
ла
способы определения полностью видимых отрезков. Основная идея сосостоит в установлении того факта, что оба конца отрезка лежат
да
наблюдения
точкой
между
Напомним,
о:
При
при /
=
=
0
какой-нибудь
=
s 4-
видимой
плоскостью.
что
u
ла
и
значение и
0 и t
—
rd + ag
задает сам
отрезок.
Далее, если а
0, то
=
1 получаются концевые точки отрезка. Напомним
также, что
да
А,
[ УГ]
•
и
=
J
=
+ q.t +
р.
J
J
vva
J
нет
и
CjjL
+
ttWjX) J>
заметим,
концевой
что
при t
—
0
/?.
является
скалярным
произведением
ограничивающей тело.
Аналогично р. Л- # является скалярным произведением другой конконцевой точки отрезка и у-й плоскости, ограничивающей тело. НакоНаконец, напомним, что у'-я плоскость, ограничивающая тело, видима,
точки
и
отрезка
у-й
плоскости,
^ 0. Поэтому, если w. ^ Ои р. ^ 0, то один конец отрезка
лежит или на видимой плоскости или между видимой плоскостью и
точкой наблюдения. Если же
+ q. ^ 0, то другой конец отрезка
если w.
На этом этапе вычисляются
Pj
также лежит
либо
плоскостью и точкой
видим,
если для
на
видимой плоскости, либо между этой
наблюдения. Следовательно, отрезок полностью
любого у
0 и
0 и
Эти условия гарантируют,
что
выполнены
сх^О
часть
ни
отрезка
видим.
пло-
при
каких
0.
неравенства
1.
и
быть невидимой,
не может
hjj ^ 0 не могут быть
т. е.
Поэтому
никакая
отрезок полностью
Пример 4.12. Полностью видимые отрезки
единичного куба с центром в начале координат рассмотрим отрезок от
Рис. 4.26. Алгоритм нахождения
до
/maxmin и /minmax в методе Робертса.
Л>12 0 2
I], который,
как
Гл. 4. Удаление невидимых линий
и
поверхностей
на
рис.
Здесь
=
274
показано
275
s +
4.3. Алгоритм Робертса
dr=[-2 0
2
4.27, проходит
Pj[-2 0 2 I]
перед этим
[4 0 0 0]/
кубом.
и
с
учетом того, что точка наблюдения чежит в бесконечности на положительной
полуоси z. имеем:
1-2 0 2
s=
1|
на оси z, математически отрезок
0
0
()|
расположен между этой точкой и указанной видимой плоскостью.
g= [
0
0
I
0|
Диалогичное условие справедливо для нижней и двух боковых пло-
плоскостей.
К сожалению, нет простого теста для полностью невидимых
линий. Конечно, можно определить, что обе концевые точки отрезотрезка расположены позади невидимой плоскости. Однако, поскольку
плоскость простирается до бесконечности, невозможно определить,
будут ли при этом концы отрезка позади тела (рис. 4.22). Полнос-
[ V] и
=
[5-3
1
1
1-8
8
0
0
0
0
0
0
f
© ©
-3 5]
0 0]
-2
2]
Полностью
Заметим, что и'5
0, р^
<
Пополнительно
P4[l
I
-
в
1], который
I
< 0 и р5 +
качестве
<
г/5
0. Значит, этот отрезок полностью видим.
примера рассмотрим отрезок от
проходит по диагонали над кубом.
Р$[— I
1
1
1]
Эчо1 отрезок тоже пока
до
заы на рис. 4.27. Здесь
s=
1-1
I
1
d
=
| 2
0
-2
=
I
0
0
1
g
невидимые отрезки
p
</
И.
3
s-\VT\=
=
d-[V'7|
=
=
g-[V7]
=
|
[-4
[ 0
приходится
обнаруживать, используя об-
общий метод решения этой задачи. В этом случае невидимый участок
0 до /
1.
будет простираться от t
Ниже приводится эффективная реализация алгоритма Робертса.
=
=
Этот алгоритм делится на три этапа. На первом этапе каждое тело
I]
0]
01
анализируется индивидуально с целью удаления нелицевых
плоскостей.
На втором
каждом теле
этапе
-1
-1
3
-I
3]
4
0
П
4
-41
0
0
0-2
2]
проверяется экранирование
На третьем
полигональных
связаны с
—
оставшихся
этапе вычисляются
которые образуют новые ребра при протыкании
В данном алгоритме предполагается, что тела
ребра
плоско-
в
ребер всеми другими телами с целью обнаружения их
невидимых отрезков.
=
Р3Р4 в приведенном выше примере
4
=
s-[VT]
плоскость
d= I
Для непреобразованного куба [ УТ]
=
(плоскость 3) и лежит «под ребром»
при взгляде из точки наблюдения, расположенной в бесконечности
Хотя верхняя
отрезки,
телами
ко-
друг друга.
состоят из плоских
граней, которые в свою очередь состоят из ребер, а
из отдельных
конкретным
вершин. Все вершины,
ребра и грани связа-
телом.
Заметим, что
vr< <
Ho и-i
=
0 и p\ < 0 и p\
+
Qi
0 и
/75
< 0.
<
Удаление нелицевых плоскостей
0, но /?s 4- q5 > 0.
Этот отрезок также полностью видим.
Для каждого тела в сцене:
Сформировать многоугольники граней
и
ребра,
исходя
из
списка вершин тела.
Вычислить уравнение
плоскости
для
каждой полигональной
грани тела.
Проверить знак уравнения плоскости:
-2
-1
Взять любую точку внутри тела, например усреднив кооркоординаты его вершин.
Р3[11П]
Вычислить скалярное произведение уравнения
плоскости
и
точки внутри тела.
Р,[-2
0
Р2[2
Если
Точка
Направление взгляда
276
Рис.
4.27. Полностью
-^
Гл. 4. Удаление
наблюдения
[0 0 1 0J
невидимых линий
и
видимые
поверхностей
ви-
это
скалярное
произведение
уравнения этой плоскости.
отрезки.
4.3. Алгоритм Робертса
<
0,
то
изменить
знак
Сформировать матрицу тела.
Умножить ее слева на матрицу,
обратную матрице видового
Провести проверки экранирования для прямоугольных объобъемлющих оболочек пробного объекта и пробного тела:
Если ,vmjn
преобразования, включающего перспективу.
-vmax (пробное тело) < xmin (пробный объект) или
(пробное тело) > утйх (пробный объект) или
(пробное тело) < xmin (пробный объект),
габариты прямоугольной объемлюобъемлющей оболочки преобразованного объема: xmax, ,vmin, утах, ynin.
Вычислить
и
запомнить
Определить нелицевые плоскости:
это
скалярное произведение <
0, то плоскость неви-
невидима.
Удалить
весь
многоугольник, лежащий
Это избавляет
невидимые
невидимых
Удаление
от
необходимости
образуемые
линии,
в
остальными телами
отдельно рассматривать
пар
пересечением
невиди-
ребер, которые экранируются всеми
в сцене:
Если задано только
одно
телу. В противном случае:
Провести предварительные проверки протыкания, чтобы
увидеть, не протыкается ли пробное тело пробным объекобъектом
и
экранирования
первого последним.
этой плоскости.
плоскостей.
из каждого тела тех
пробное тело не может экранировать ни одного ребра
пробного объекта. Перейти к следующему пробному те-
то
Вычислить скалярное произведение пробной точки, лежалежащей в бесконечности, на преобразованную матрицу тела.
Если
тело, то алгоритм завершается.
существует
среди
будет
максимальных
то
тело,
значений z.
у
которого
минимальное
В используемой
правой си-
будет самым удаленным от точки
наблюдения, расположенной в бесконечности на оси z.
системе
координат
это тело
телу. В противном случае:
ниже приоритеты.
пробное
пробный объект
пробного тела.
может
Установить флаг
видимого протыкания для последу-
последующего использования.
список
Гл. 4. Удаление невидимых линий
проткнуть переднюю
грань
Занести проткнутое тело в спи-
протыканий.
Если х
(пробный объект) > л*
¦
(пробное тело) или
пробный объект
может
проткнуть бок
пробного
тела.
Установить флаг видимого протыкания для последупоследующего использования. Занести тело в список протыпротыканий.
Если утгл (пробный объект) > ут]п (пробное тело) или
Лшп (пробный объект) < утах (пробное тело),
то пробный объект может проткнуть верх или низ
пробного тела.
тело
принято
называть
экраном.
Установить флаг видимого протыкания для последу-
Прим. перев.
278
zmax (пробный объект) > zmax (пробное тело), то
•*min (пробный объект) < *тах (пробное тело),
Проверить экранирование всех лицевых ребер всеми другими
телами сцены. Тело, ребра которого проверяются, называется
пробным объектом, а тело, относительно которого в настоянастоящий момент производится проверка, называется пробным
телом1*. Естественно, что нужно проверять экранирование
пробного объекта только теми пробными телами, у которых
литературе
экранирова-
(пробный объект) < zmin (пробное тело), то
протыкание невозможно. Перейти к следующему те-
то
отечественной
частичного
Если zmax
Для каждого тела из приоритетного списка:
]) В
возможность
Сравнить максимальное значение z у пробного объекта с
минимальным значением z у пробного тела.
Если
Провести сортировку по z. Сортировка производится по макмаксимальным значениям координаты z вершин преобразованных
тел. Первым в упорядоченном списке и обладающим наибольприоритетом
ли
Проверить видимое протыкание.
Сформировать приоритетный список этих тел:
наибольшим
(пробное тело) > хтах (пробный объект) или
и
поверхностей
4.3. Алгоритм Роборгса
ющего использования.
Занести проткнутое тело в список
протыканий.
Если
протыканий
список
пуст,
то
флаг
устанавливать
не надо.
протыкания
Провести проверки экранирования ребер:
Вычислить s и d для ребра.
Вычислить р, q, w для каждой плоскости, несущей грань
пробного тела.
Рис. 4.28. Невидимые отрезки удалены
Проверка полной видимости. Если ребро полностью вивидимо, то перейти к следующему ребру.
0 и решить их, объединяя
Сформировать уравнения h.
метрической проекции
из
ди-
пересекающихся объек-
объектов.
=
попарно и включив в систему уравнения границ t
/
О и
систему надо включить и уравнение границы а
Запомнить точки
а
=
=
0. За-
протыкания. В противном случае грани-
0 не учитывать.
проверить выполнение условий 0 ^ / ^ 1, а ^ 0 и А- > 0
для всех других плоскостей. Если эти условия выполвыполнены, то найти rmaxmin и
/minmax.
Вычислить
видимые
Заметим, что этот алгоритм
списком
приоритетов.
С
участки
отрезков
и
сохранить
их
рис.
можно
реализовать и с
помощью изложенного
построена диметрическая
Для каждой пары (t, а), являющейся решением, про-
для
Визуализировать оставшиеся видимые отрезки ребер.
1. Если установлен флаг видимого протыкания, то в
=
границу
=
проекция
трех
протыкания:
к
Если точек протыкания не обнаружено, перейти к процедупроцедуре визуализации.
Сформировать все возможные ребра, соединяющие точпротыкания,
для
пар
тел,
связанных
отношением
протыкания.
Проверить экранирование всех соединяющих ребер обоиобоими телами, связанными отношением
протыкания.
Проверить экранирование оставшихся соединяющих реребер всеми прочими телами сцены. Запомнить видимые
рис. 4.29. Пробная сцена дпя алгоритма Робертса.
отрезки.
280
Гл. 4. Удаление
невидимых
линии
и
поверхностей
показанная
на
брусков рост, причем
Рои Мач [4-8] отметили аналогичный результат для алгоритма
бертса, реализованного с использованием метода разбиения кар-
Определить видимые отрезки, связывающие точки протыка-
точки
объектов,
была
Оценки по времени для сцен, аналогичных той, что показана на
почти линейно зависящий от числа
рис. 4.29, продемонстрировали
последнее число достигало 1152 [4-9]. Петти
приоритетами.
Если флаг видимого протыкания не установлен, перейти
процедуре визуализации.
алгоритма
4.28.
последующей проверки экранирования телами с бо-
более низкими
обратным
4.3. Алгоритм Робертса
тинной плоскости
Варнока (см. разд. 4.4). ПринципиальПринципиальным ограничением
алгоритма Робертса является требование выпувыпуклости объемов. Ниже приводится
подробный пример.
в
стиле
пар\
пересекающихся
описываются следующими
брусков,
показанною на рис. 4.30. Эти
таблицами коорлипат вершин:
Брусок
бруски
III
1,2,3.4
10
5
3,12.7.11
11
6
1,10,5.9
12
13, 14. 15. 16
15, 24. 19, 23
13, 22. 17, 21
Брусок 2
Теперь можно сформировать матрицы тел для этих брусков
в
заданной ориентации,
д
1
0
0
1
9
1
0
Олиако в данном примере используется другой подход, заключающийся в том. что
2
2
0
1
10
3
0
сначала преобразуется матрица вершин тела путем умножения ее справа на матрицу
3
2
0
3
11
3
2
4
4
0
0
3
12
1
1
4
5
0
13
1
4
0
2
6
6
1
6
1
14
3
4
0
7
2
6
3
15
4
4
8
0
6
3
16
1
4
4
Номер
вершины
-
показаны на
Брусок
какую-нибу [ь точку внутри, а затем преобвитового преобразования.
преобразовать, умножив слева на матрицу, обратную матрице
проверить корректность
.V
^
рис.
4.30, а. Списки ребер
I
преобразования, а затем определяются уравнения преобраюванных плоплоскостей и, следовательно, преобразованная матрица тела.
Здесь применяется видовое преобразование, состоящее из поворота на —30° во15°).
—30°), за которым следует поворот на 15° вокруг оси хF
вокруг оси \'(ф
Результирующее преобразование есть |1-1):
видового
1-2
13
2
2-3
14
3
3-4
15
4
4-1
16
5-6
17
6
6-7
18
7
19
8
7-8
8 5
20
9
1-5
21
10
2-6
22
11
3-7
4-8
23
24
полиiопальные грани
9-10
10-11
11 12
12- 9
13-14
14-15
15-16
16-13
9-13
ИМ 4
11-15
12-16
многоугольника Ребра
многоугольника Ребра
5, 6,7,8
Гл. 4. У la.ieiiiie
неииаимых
0
sirup
0
7
8
9
линии
sin0 sin в
-sin0 cos в
0
sin 0
0
СО5>0 cos в
0
0
cos#
—cos
ф sin в
0
0.866
-0.129
0.483
o"
0.0
0.966
0.259
0
-0.5
-0.224
0.837
0
0.0
0.0
0.0
1
Брусок 2
Номер
3
COS gO
вершины
Номер
4. 12,8,9
=
бросков:
Брусок I
2
[Rx]\Rv\
га ковы:
Ребро
5
2. 11,6. 10
=
Связанные им
1
1
=
"
вершины
Эти ребра образуют
жаков. взяв
Брусок 2
Ребро
12
их
=
(.'нязаинме им
282
Ребра
Номер
вершины
Номера вершин
I
MHOi оуг0.1ЫШК \
Ребра
4
\Т\
II
Номер
Номер
Miioi oyi о.1ышка
Пример 4.13. Полным алгоритм Робертса
Рассмофим
Брусок 2
Брусок I
и
поверхностей
14. 23, 18, 22
21. 20, 24, 16
17. 18, 19. 20
Рис. 4.30. Пересекающиеся бруски.
4.3. Алгоритм Робертса
1
Поеме преобразования матрицы вершины становятся
Поскольку точка иаблюления равна [0 0 1 0], то пробная
такими:
Поиск ire ншевых плоскостей
[ГГ\\
=
[Р\\\Г\
=
0.5
-0.224
0.837
1
1.232
-0.483
1.802
2
0.232
-0.933
3.475
3
1.5
-0.672
2.510
4
0.5
5.571
2.389
5
1.232
5.313
3.355
6
0.232
4.864
5.028
1
7
1.5
5.123
4.062
1
8
[E]-[VT]]= [0.483
Аналогично, для
[F]-[VT2\=
\Р2][Г]
=
можно
грань,
получить
методом
-0.837]
-0.483 0.259
-0.259 0.837
-0.837]
[0.483
(многоуюлышкн) 2, 4 и 6 в пер-
показывают, что плоскости
8, 10, 12 во втором
1.802
1.001
9
2.598
1.544
1.967
10
21
0.598
0.647
5.313
11
1.134
0.906
4.347
12
0.866
3.734
1.518
13
2.598
3.475
2.484
14
0.598
2.579
5.830
15
1.134
2.838
4.864
Ньюэла, который был
образованная многоугольником
-0.259 0.837
0.866
]
описан
телом 2
=
Проверка протыкания тела 1 те-
=
5-028 > Bmi»>vol.2
1.001
=
Следовательно, протыкание возможно. Далее, поскольку
С*таЛо1.1
орнеи га-
Например,
преобразован-
=
]-232 > (Wvol.2 = -1-134
то протыкание действительно имеет место.
Поэтому уравнение Гранины о
=
0 нуж-
нужно включить в систему.
Для оставшихся ребер тела 1 проводится проверка экранирования телом 2. В какачестве
11.593z + 48.001
-
поэтому не-
преобразованных вершин показывает, что:
с использованием
(--rnaxWi
преобразованным точкам, дает уравнение плоскости:
-20.791.V + З.Юбу
втором образованы пересечением пар нелицевых ппоскостеп и
Сначала проверяется возможность пересечения тел.
1, содержит четыре вершины с
номерами 2.
3. 7 и 6 (рис. 4.30, а). Метол Ныоэча (см.
пример 4.3), ирнмсисиныП к
во
нелицевые.
Оставшиеся линии в каждом теле проверяются на экранирование другим телом.
16
выше.
—
—
невидимы. Результат показан на рис. 4.30, Ь.
Уравнения ппоекостеп для кажлой из граней этих двух брусков при ланмом
ипн
-0.483 0.259
Пересечения этих многоугольников об4 и 9 в первом теле и 13, 16 и
образуют невидимые ребра. В частности, ребра I,
первом теле и
-
=
[1?] = [00—1 0].
второго тела:
Отрицательные знаки
\PTi\
точка
первом теле лает:
в
примера рассмотрим
ребро 2, соединяющее вершины 2 и Ч. Здесь
0
v
=
s +
dr
=
[1.232 -0.483
1
1.802
-1
-0.45
1.673
Перепишем это г результат гак, чтобы ом совпадал с результатом, получаемым преСкалярные произведения s и d на [УТ]2 равны:
преобразованием матрицы тела из исходного положения:
-0.866л- + 0.129v
Так преобразованная матрица
[VT]]
и
=
-
0.483г + 2
0
=
гсяа имеет вид:
0.866
0.866
0
0
0.129
-0.129
-0.966
0.483
0.483
2
0
0.5
-0.5
0.966
0.224
-0.224
-0.259
0.259
-0.837
0.837
6
0
<7
=
d-[VT2]
=
| 0
О
©
©
©
4
-2
1
О
0-2
1
3 1
Поскольку точка наблюдения нахолится в бесконечности на положительной попу оси
[0 0 1 0J, и
*. то g
=
ана.ю! ично:
[VT2j
=
©
(и)
0
0
0.5
-0.5
0.129
0.966
0.966
0.224
-0.224
0.483
¦0.259
0.25<>
-0.837
0.837
4
-2
4
0
0.866
0.866
0.129
0.483
3
284
Гл. 4. Удаление
невидимых .пиши
и
w
g-[VT2J
=
[-0.483 0.483 -0.259 0.259
-0.837 0.837]
Проверка полной видимости линии показывает, что условия:
w, ^ 0, р, ^ 0 и р/ + q} j? 0
4.3.
поверхностей
=
Алгоритм Робертса
не выполняются ни для одной и?
плоскостей. Это происходит потому, что бесконеч-
плоскость, несущая основание
(плоскость 4П) тела 2, может экранировать
ребро. Формирование условии невидимости ребра Л, дает систему неравенств:
бесконечная
©
®
1
-
1
зто
0.483а > 0
+ 0.483а > 0
0.259а
® 4
+ 0.259а
© -2
® 3 -2/ 0.837а
© I + 21 + 0.837а
-
-
>
0
>
О
>
>
о
0
1
О
О
V
Последовательное решение всех пар соответствующих уравнений показывает, что
условия hj ^ 0 не выполняются ни при каких у. Значит, ребро не имеет невидимою
участка, н оно полностью видимо. Подробности, связанные с решениями вопросов
об экранировании ребер тела I телом 2, даны в табл. 4.5 и 4.6. Заметим, что g н w
о
о
V
V
V
V
244
282
о
о
?¦
=¦
-
о
3
S
С
О
.
2
неизменны.
Графические решения для ребер 10 и 11 показаны на рис. 4.31, а и Ь. Оба этих
ребра протыкают тело 2. Ребро 10 невидимо при 0.244 < / < 0.667. Этот участок
соответствует отрезку от точки A.232, 0.815, 2.150) до точки A.232, З.ЗЫ, 2.837)
Ребро II невидимо при 0.282 < ( < 0.667. Это соответствует отрезку межчу точкаточками @.232. 0.703, 3.913) и @.232, 2.933. 4.510).
5
,
а
О
3 V
5
I
х
«л
-
5
о
о
if tJ
*
«J
s
&
x
i-
в
С
x
—
? V
С.
—
—
-J
D.
1—
r"
с
5
«;
=
Сь
S
=
о -3
Я
—
О
I
Таблица 4.5.
Соединяемые
Ребро
им
вершины
Г-J
п
I
d
S
о
О
О
О
о
О
с
о
о
о
О
О
О
-о
'О
О
I
-0.45
1.673
01
0.259
-0.966
01
1.732 -0.259
0.966
01
[-1.0
-0.448
1.673
OJ
[-1.732
0.259
-0.966
OJ
2
2-3
[
1.232 -0.483
1.802
11
[-1.0
3
3-4
[ 0.232 -0.931
3.46
1]
[-1.732
5
5-6
(-0.5
5.571
2.389
1]
[
6
6-7
[
1.232
5.313
3.355
I]
7
7-8
[ 0.232
4.864
5.028
1]
[
1.0
0.448
-1.673
01
1]
[
0.0
5.796
1.553
01
3.475
1]
[
0.0
5.796
1.553
OJ
2.510
1]
[
0.0
5.796
1.553
01
5.123
4.062
1]
[
1.232 -0.483
1.802
3-7
[
0.232 -0.931
4-8
[-1.5
-0.672
8
8-5
[-1.5
10
2-6
11
12
гч
см
г,
I i
I I
CS
<N
I
I
I
I
sO
ОС
in
ОС
I
I
ОС
т
з;
—
•>
Многоугольник
еп
соответствующий,
имеет
номер
Прим. перев.
10
в
обшем
о
г;
списке.
=
к
I
о.
286
Гл. 4. Утоление невидимых линий
и
поверхностей
I
Таблица 4.7.
Со&шиясмые
с
о
d
Ребро им вершины s
V
V
о
о
о
V
V
V
V
о
о
Vi
1Л
«а*
10-11
14
2.598
[
1.544
1
1.967
1
1--2.0
-0.897
3.346
Щ
V/
—
11-12
15
17
13-14
18
3.734
2.598
1
15-16
0.647
0.866
|
14-15
19
0.598
[
3.475
0.598
[
2.579
1 1
5.313
1.518
I
1
2.484
1
1
1 1
5.830
I--1.732
1
0.259
1.732
-0.966
-0.259
0.966
-0.897
[-2.0
1--1.732
0.259
3.346
-0.966
01
V.
о
о
о
о
V
V
V
V
Я
V
V
о
с
с
о
о"
V
V
с
V
V
i"
•*'
HI/
X
s
с
г
о
со
G
5
с;
«1
•л
V/
—f
0|
V
V
i"
«1
16-13
2.838
[-1.134
1
4.864
I
[
2.0
0.897
-3.346
10-14
2.60
[
1.544
I
1.967
1
[
0
0.518
1.932
Щ
0]
rt
Прн
23
11-15
[
0.598
0.647
5.313
1 1
1
0
1.932
0.518
Щ
24
12-16
1-1.134
0.906
4.347
1
1
0
1.932
0.518
01
1
при
—
в
22
о
о
с
20
—
1
НИ
S
х
о
О
Цели 1 Част
1
2
о
?
а
7
о
о
X
Z
2
1
Про
1
I
1
I
О
0 дает точки протыкания при /
0.333 н 0.667 для обоУравнение ipanmibi it
ребер. Эти значения / соответствуют четырем точкам: A.232, 1.449, 2.320) и
A.232, 3.381, 2.837) на ребре 10 и @.232, 1.001, 3.993) и @.232. 2.933, 4.510) на ребре,
II, которые запоминаются в списке точек протыкания.
Проверка экранирования гелом 1 лицевых ребер тела 2 дает результаты, приве=
обоих
приведенные в
табл. 4.7 н 4.8. Ребро 17 частично экранируется гелом 1
о
о
о
О
о
С
о
о
о
о
о
о
о
А именно, как по-
с
Г-1
гм
1
1
1
о
г>4
1
о
О
О
О
о
гл
о
о
о
О
1
4.31, с, ребро 17 невидимо при 0 ^ / < 0.211, что соответствует ототрезку между точками @.866, 3.734, 1.518) и A.232, 3.679, 1.722). Ребро 20 протыкает
показано на рис.
1
О*
переднюю грань (плоскость 5) тела 1 при t = 0.25. Поэтому она певичпма or
0.25 < t j$ 1.0, что соответствует отрезку от точки (-0.634, 3.062, 4.28) до @.866,
_^
,
_
гп"
3.734, 1.518). Область решения показана на рис. 4.31, d. Точка (-0.634, 3.062, 4.028)
занесена
в
список
точек
протыкания.
Графическое решение показывает,
0.75, а
0, также является точкой протыкания. Это
соответствует @.366, 3.511, 2.355).
Имеется шесть точек протыкания:
при
/
=
=
что
значение /
1
точка
соответ-
ГЛ
1
1
^—
—
=
1.232
1.449
2.320
1
1.232
3.381
2.837
1
0.232
1.001
3.993
I
0.232
2.933
4.510
1
-0.634
3.062
4.028
1
ГМ
1
•*•
0.366
3.511
2.355
I
00
Связывая каждую из этих точек со всеми остальными, получаем 30 возможных сое-
288
Нужно
проверить экранирование каждого
Гл. 4. Удаление невидимых линий
и
поверхностей
Г<~!
из
этих
П
«N
ю
я
«Л
I
I
о
о
—
=
я
Я
X
отрезков
—"•
It
иныЭ
о.
4>
а
—•
Ц
и
соединяющих отрезков.
^
II
(N
\РР}
О
=
I
оо
as
О
п
11
Г-1
JS>
О
кроме вазы
t=I
Нсвмлим
пластика, стекла, металла?
материала сделана: из дерева, керамики,
или яркий
Каков цвет вазы: красный, синий, серебристый; тусклый
в ней лежат: персики, виноград, груши, баи т. п.? Какие фрукты
этой
Невидим
области
в эч ой
зеленый? Есть
бананы, яблоки? Каков цвег яблок: красный, желтый,
В каждом случае, по мере сужения сферы инли у яблока хвостик?
обпасти
а=0
'¦ах~ t
Qf=O
0
о
фруктами. Для восприятия цвета, фактуры и других
всей поверхности стола много времени
аналогичных характеристик
В
внимание сосредоточивается на вазе с фруктами.
не нужно. Все
Велика ли она? Из какого макаком месте стола она расположена?
CD
в
с
если на
детализации. Далее,
интереса, возрастает уровень требуемой
на конкретный вопрос нельзя отопределенном уровне детализации
1.0
немедленно,
ответить
последующего рассмотрения.
t
=
Невидим
Y777X7777777777777777777-:
этой
т. е. смежные
области
тенденцию
оно,
к
области (пикселы) вдоль обеих осей хи^ имеют
решается вопрос о том, пусто ли
Есили его содержимое достаточно просто для визуализации.
Подавляющее большинство нх оказываются невидимыми.
Проверка
только отрезки, соединяющие точки 18
и 20,
20 и 21. Эти отрезки оказываются
целиком видимыми. Фактически именно
отрезками. В качестве упражнения
предлагается пропровести процесс решения целиком.
Окончательный результат показан на рис. 4.30. с.
обладают большой
способе обработки
человека.
на
и
разбивается на фрагменты до тех пор, пока
визуализации или его размер не достигнет требуемого предела разрешения.
В
последнем случае информация, содержащаяся в окне, усредняется,
и
изображается с одинаковой интенсивностью или цветом.
Устранение лестничного эффекта можно реализовать, доведя прона
процесс разбиения до размеров, меньших, чем разрешение экрана
чтобы определить
один пиксел, и усредняя атрибуты подпикселов,
атрибуты самих пикселов (см. разд. 2.25).
результат
от метода
Конкретная реализация алгоритма Варнока зависит
4.4. АЛГОРИТМ ВАРНОКА
Основные идеи,
окно
рассматривается
для визуализасодержимое подокна не станет достаточно простым
Рис. 4.31. Решение примера 4.13.
они и являются
соединяющими
тен-
однородности.
Если это не так, то окно
а также
на
работает
изображения
показывает, что потенциально видимы
откладывается
Поскольку алгоритм Варнока нацелен на обработку картинки,
в пространстве изображения. В пространстве изобраон
а=0
каждым те.юм.
он
что большие облапопытка извлечь преимущество из того факта,
стола в привеобласти изображения однородны, например поверхность
как когерентность,
приведенном выше примере. Такое свойство известно
l
в
время для последуюВ алгоритме Варнока и его вариантах делается
то
разбиения
которые опирается алгоритм
Варнока,
обла-
общностью. Они основываются на гипотезе о спосо-
информации, содержащейся в сцене, глазом и мозгом
Эта гипотеза заключается в том, что
тратится очень ма-
мало времени и
окна
и
от
деталей критерия, используемого
для
того,
чтобы решить, является ли содержимое окна достаточно простым.
В оригинальной версии алгоритма Варнока [4-10, 4-11] каждое окно
разбиваюсь на четыре одинаковых подокна. В данном разделе обобсуждаются эта версия алгоритма, а также общий вариант, позволя-
позволяющий разбивать окно на полигональные области. Другая разновид-
усилий на обработку тех областей, которые
содержат
мало информации. Большая часть
времени и труда затрачивается
на области с высоким
информационным
разновидность алгоритма, предложенная Вейлером и Азертоном [4-12], в ко-
примера рассмотрим поверхность стола,
обсуждается в следующем разделе.
содержимым. В
290
на
Гл. 4. Удаление невидимых линий и
поверхностей
которой
нет
качестве
ничего,
которой окно тоже разбивается на попигональные подокна, обсужда-
4.4. Алгоритм Варнока
Кэтмул [4-13, 4-14] применил основную
разбиения к визуализации криволинейных поверхноповерхностей. Этот метод обсуждается в
разд. 4.6.
идею
метода
На рис. 4.32 показан результат
простейшей реализации алгорит-
Варнока. Здесь окно, содержимое которого
алгоритма
слишком
сложно
изображать, разбито на четыре одинаковых подокна. Окно, в котокотором
что-то есть,
подразбивается далее то тех пор, пока не будет
достигнут предел разрешения экрана. На рис.
4.32, а показана сцепростых многоугольников. На рис. 4.32, b
состоящая из двух
сцена,
показан результат после
удаления невидимых линий.
Заметим, что
горизонтальный прямоугольник частично
экранирован вертикальвертикальным. На рис. 4.32, cud показан
процесс разбиения окон на экране
с разрешением 256 х 256.
Поскольку 256
28, требуется не более
=
восьми шагов
экрана.
разбиения для достижения предела разрешения
Пусть подокна рассматриваются в следующем
левое, нижнее правое, верхнее левое, верхнее
обозначать
цифрой
подокна
и
буквой,'цифра
—
255,0
экра-
порядке: нижнее
правое. Будем обозна-
это
номер шага разбиеномер квадранта. Тогда для окна 1а подокна 2а,
4а,
5Ь
4с, 5а,
оказываются пустыми и изображаются с
фоновой интенразбиения,
а
буква
интенсивностью
которого
в
—
процессе
не пусто на
разбиения. Первым подокном, содержимое
уровне пикселов, оказывается 8а.
необходимо решить вопрос о том, какой
Теперь неГ96,16
алгоритм желательно приудаления невидимых линий или удаления
невидимых поповерхностей. Если желательно применить
алгоритм удаления невиневидимых линий, то пиксел,
соответствующий подокну 8а,
применить:
активируактивируется, поскольку через него проходят видимые
В
ребра.
результате
получается изображение видимых
ребер многоугольников
последовательности точек размером с пиксел каждая
в
виде
(рис. 4.32, е).
Следующее рассмотрение окна, помеченного как 8d на
рис. 4.32, d,
лучше всего
проиллюстрирует различие между реализациями
алгоритмов удаления невидимых линий и
В
поверхностей.
удаления невидимых линий окно 8d
случае уда-
размером с пиксел не содержит ре-
ребер ни одного многоугольника сцены.
Следовательно, оно объявля-
объявляется
пустым
цветом.
Для алгоритма удаления невидимых
и
ал-
изображается с фоновой интенсивностью или цве-
поверхностей проверяетпроверяется охват этого окна каждым
многоугольником сцены. Если такой
охват обнаружен, то
среди охватывающих пиксел многоугольников
Рис. 4.32. Алгоритм разбиения Варнока.
выбирается ближайший к точке наблюдения на направлении наблюнаблюдения, проходящем через данный пиксел.
относительно
центра пиксела. Затем
интенсивностью или цветом
охватывающие
292
Проверка проводится от-
этот пиксел
изображается с ин-
ближайшего многоугольника. Если охва-
многоугольники не найдены, то окно
Гл. 4. Удаление невидимых линий и поверхностей
размером с пиксел
пусто.
Поэтому оно изображается с фоновым
интенсивностью.
цветом
или
интен-
Окно 8d охвачено вертикальным прямоугольником. По-
Поэтому оно изображается с цветом
или
интенсивностью этого мно-
многоугольника. Соответствующий результат показан
4.4. А.'норитм Варнокл
на
рис.
4.32, f.
Возвратившись к рассмотрению окна 8а на рис. 4.32, d, покакак включить в
алгоритм удаления невидимых поверхностей
устранение лестничного эффекта. Разбиение этого окна
покажем,
дает
подокна с размерами, меньшими,
одно
из
этих
подокон
—
четыре
чем
размеры пиксела. Только одправое верхнее
охвачено многоугольни—
многоугольником.
Три других пусты. Усреднение результатов для этих
четырех
подпикселов (см. разд. 2.25)
показывает, что окно 8а размером с
пиксел нужно изображать с
интенсивностью, равной одной
четверти
четвер-
интенсивности
высвечивать
с
прямоугольника. Аналогично пиксел 8Ь
следует
интенсивностью,
прямоугольника.
128,128,128
Id
0,128,128
lc
128.0,128
lb
0,0,128
la
равной
половине
интенсивности
Конечно, окна размером с пиксел можно разби0.0,64
2a
64,0,64
2b
0.64.64
2c
64,64,64
2d
64,0.32
96. 0, 32
3b
64,32.32
3c
96,32.32
3d
более одного раза, чтобы произвести взвешенное
усреднение
характеристик подпикселов, которое обсуждалось в
разд. 2.25.
разбивать
Процесс подразбиения порождает для подокон
структуру данданных, являющуюся деревом, которое показано на
рис. 4.33^. КорКорнем этого
дерева является визуализируемое окно. Каждый
узел изо-
изображен прямоугольником, содержащим координаты левого нижненижнего угла и
длину стороны подокна.
Предположим, что подокна об-
обрабатываются в следующем порядке: abed, т. е. слева
каждом уровне разбиения
в
путь по структуре данных дерева к
Активные узпы
на каждом уровне
Рассмотрение рис. 4.32
окна
слева
от
и
окну
на
8а размером с пиксел. Ак-
изображены толстой линией. Рас-
4.33 показывает,
активного
направо
дереве. На рис. 4.33 показан активный
чго на
каждом
уровне
80,16,16
4d
80, 0.16
4b
64, 0.16
4a
все
пусты. Поэтому они должны были
визуализироваться ранее с фоновым значением цвета или интенсив-
интенсивности.
узла
Все окна справа от активного
обработаны позднее,
узла на каждом
уровне будут
будут объявлены пустыми или будут
подразделены при обходе дерева в обратном
порядке.
При помощи изложенного алгоритма можно удалить либо невиневидимые линии,
т. е.
либо невидимые поверхности. Однако
критерия разбиения, а также негибкость способа
тому,
что количество
разбиения
и
простота криразбиения приводят к
80, 24, 4
6a
подразбиений оказывается велико. Можно
повысить эффективность этого
алгоритма, усложнив способ и крикритерий разбиения. На рис. 4.34, а показан
другой общий способ
способом,
84.28,4
6d
80. 28,4
6c
84 24.4
6b
раз-
дано
его
сравнение с изложенным
представленным на рис. 4.34, Ь.
ранее жестким спосо-
.
как
80, 24. 1
Гл. 4. Удаление невидимых линий
80. 26, 2
7c
82, 24.2
7b
80, 24,2
7a
8a
294
J, 24,8
5d
80.16,8
5a
81, 24, 1
8b
80, 25, 1
8c
Рис. 4.33. Дерево структуры подокон.
и
поверхностей
82, 26, 2
7d
81, 25, 1
8d
г
с
D
a
Рис. 4.35. Типы многоугольников: внешний (а), внутренний
J
(Ь), пересекающий (с),
охватывающий (d).
или
интенсивности
нием
а сам
цвета,
многоугольник
заполняется
соответствующим ему значением интенсивности или цвета.
Рис. 4.34. Сравнение двух способов
разбиения.
Если только один многоугольник пересекает окно, то площадь окна
Разбиение, показанное на рис. 4.34, а, получается с
использованием прямоугольной
Заметим,
что подокна
при этом могут быть
способ можно рекурсивно
неквадратными. Этот споприменить к любому
который полностью охвачен
окне
многоугольнику, кото-
каким-нибудь окном или подокном. Если в
содержится только один многоугольник и если
охвачен этим
использова-
объемлющей оболочки многоугольника. Заме-
окном, то его легко изобразить, не
он целиком ох-
проводя дальнейше-
разбиения. Такой способ разбиения
полезен, в частности, при
минимизации числа разбиений для
простых сцен (рис. 4.34). Однако
дальнейшего
с
ростом сложности сиены
его
Для рассмотрения более
преимущество сходит на нет.
сложных
критериев разбиения будет
полезно определить способы
расположения многоугольников отноотносительно
окна.
Назовем многоугольник:
соответствующей
ему интенсив-
интенсивностью или цветом.
Если окно охвачено только одним многоугольником
и если
в
окне
других многоугольников, то окно заполняется значением интен-
нет
интенсивности или
цвета, которое соответствует охватывающему много-
многоугольнику.
Если найден
и
многоугольник
точке
или
по
если
крайней мере один охватывающий
многоу-
многоугольник расположен ближе других
этот
наблюдения,
окно
то
окно
заполняется
значением
к
интенсивности
цвета, которое соответствует охватывающему многоугольни-
охватывающим, если окно находится целиком
всех этих типов
разбиение окна.
Первые четыре из этих критериев касаются ситуаций, в которых
пересекает границу окна;
На рис. 4.35 показаны
примеры
заполняется
попала внутрь окна,
интенсивно-
пересекающего многоугольника, которая
В противном случае проводится
внутри окна;
если он
цвета, а та часть
значением
многоугольнику.
внешним, если он находится целиком вне
окна;
внутренним, если он находится целиком
пересекающим,
интенсивности или
фоновым
заполняется
вне многоугольника
участвуют один прямоугольник
внутри него.
многоугольников.
сокращения
числа
решению
задачи
подразбиений.
удаления
и
окно.
Они используются для со-
Пятое правило
невидимых
является
поверхностей. В
ключом
нем
к
речь
Используя эти определения, можно предложить
следующие правиправила обработки окна.
Объединим их в алгоритм.
находился бы ближе .к точке наблюдения,
Для каждого окна:
многоугольники,
Если все многоугольники сцены
будет закрывать или экранировать все остальные многоумногоугольники, связанные с окном. Поэтому в сцене будут фигурировать
идет о поиске такого охватывающего многоугольника, который на-
связанные
с
этим
окном.
чем все остальные многоу-
Очевидно,
что
этот
многоу-
многоугольник
к
окну,
то это окно
интенсивностью или цветом
являются внешними по отношению
пусто. Оно изображается с фоновой интенсив-
без дальнейшего разбиения.
Если внутри окна находится
только один
площадь
296
окна
вне этого
Гп. 4. Удаление неиидимыч линий
и
поверхностей
его
визуальные характеристики.
Для реализации этих правил требуются
многоугольник, то пло-
многоугольника заполняется фоновым
именно
способа расположения многоугольника
случае прямоугольных
окон
значе-
4.4.
Алгоритм Варною
можно
методы
относительно
воспользоваться
определения
окна.
В слу-
минимаксными
У
Окно
Ут
ОкноПрямоугольная
оболочка
32
(*min
32
Ут
•
Прямоугольная
(>'min
г—тг-4*
24
=
8) > (Ал
0) И Umdx = 24) < (А-п = 32) И
=
'
=
4) > CVH
0) И O'mnx
=
24) < (Ув
=
Следовательно, этот многоугольник является внутренним
=
32)
по отношению к окну.
Можно воспользоваться простой подстановкой для проверки
16
пе-
вершин окна под-
пересечения окна многоугольником. Координаты
прямой, неподставляются в пробную функцию, заданную уравнением
3.16 и пример 3.23). Если
несушей ребро многоугольника (см. разд.
не зависит от выбора вершины окна,
знак этой пробной функции
8
Ун
0
О
8
16
24
32
40
48
56
16
24
32
то все его
указанной
Рис. 4.36.
Проверка с помощью прямоугольной оболочки для внешнего и
внутреннего многоугольников.
внутренне-
и на
вершины лежат по одну сторону от несущей прямой
прямой нет точек пересечения. Если же эти знаки различ-
окно. Если ни одно из ребер мноразличны, то многоугольник пересекает
то этот многоугольник либо являмногоугольника не пересекает окна,
его. Если
внешним по отношению к окну, либо охватывает
является
или
габаритными, с объемлющей прямоугольной оболочкой, теста-
тестами для
определения,
отношению к окну
является ли многоугольник внешним по отно-
(см. разд. 2.13 и 3.1). В частности, если
определяют четыре ребра окна,
a
*min, *max, ymin, ymax
прямоугольной объемлющей оболочки многоугольника,
royi ольник
любое
из
хД1 хп, уи, ув
—
то
и
прямой, проходящей через две вершины Р^х^ ух)
test
тх + Ь, то пробная функция (T.F.
Р2(х2, у2), имеет вид у
уравнение
—
=
function) такова:
ребра пряэтот
T.F.
внутренним
по
рис.
т
внутри этого окна,
к
окну,
его
рис.
0, 32, 0, 32. На рис. 4.36, а показаны два
0
и
с
вершинами
из спедуюших соотношений:
Первый из этих многоу-
C6,
Я3
E6,
4),
>'2->М
а
т
24_4
2()
=
=
*тах, ут-ю. утм, равными соответственно
(-vmm = 36) > (дп = 32), этот многоугольник
36,
56,
4,
24.
окну.
Аналогично прямоугольная оболочка для
-36
=
Поскольку
T.F.
является внешним по отношению к
=
-
v
тх
5
4
л'2-.ri
определяется величинами
лтщ.
8, 32, 8, 32, и
—
многоугольника, для которых
—
—
b
=
—
у
5х + 36
Подстановка координат каждой угловой точки окна в пробную функцию дает:
второго многоугольника
-vniin. A'm.»x' .^niini .Ушах» равными 8, 24, 4, 24, как показано
Гл. 4. Удаление
=
Рх (8, 4), Р2 A2, 24), и Я3 D0, 12) и
с вершинами Р, D, 4), Р2 D, 36), Я3 D0, 36) и Р4 C2, 4). Они показаны на
второй
рис. 4.37. Пробная функция ребра
Р\Р2 У многоугольника на рис. 4.37, а получается
пар> многоугольников, первый
хл, Хц, уи, >-в, равными соот-
8), Р2 D8, 24)
второй
вершинами Р{ (8, 4), Р2 A2, 24) и
Р3 B4, 12).
Прямоугольная оболочка для первого многоугольника
выполняются условия
xi
хг
Возьмем квадратное окно с А'л, Ар, .Vhi .^Bi равными соответственно
нужно иаПти способ их расположения
относительно окна.
задан
вершинами
298
-
T.F. =х- х\
Пример 4.15. Пересекающие многоугольники
4.36, Ь.
Я,
у\— тх\
У\\ И
Рассмотрим квадратное окно, заданное значениями
многоугольников
-
XI Ф 0
х\
оболочка содержится
Пример 4.14. Внутренний и внешннП многоугольники
соответственно
-
А-2
-
Продемонстрируем этот метод на примере.
И
на
Ь
т. е.. если
Amin
показано
если
Ъ
—
хг
4.36, а. Кроме того, многоугольник является
отношению
тх
У\
где
следующих условий:
как показано на
—
—
у
мно-
будет внешним по отношению к окну, если выполняется
<*min > АП> Атах < АЛ' Ут\п > ^В> Лшх < >Н
как
=
на рис.
определяется
4.36, Ь. Здесь выпол-
Г./г.(8,8)
=
8-5(8) + 36
7\F.(8.32)
=
32
невидимых линий и поверхностей
4.4.
Алгоритм Варнока
-
=
5(8) + 36
4
=
28
T.F.Q2.32)
v
У
=
32
7.F.C2.8) = 8
32
32
Ут
-
-
5C2) + 36
5C2) + 36
=
=
-92
-
116
>г
Поскольку знаки подстановок в пробную функцию различны,
24
24
многоугольника пересекает окно,
что
и
многоугольник является пересекающим.
16
16
8
8
Р.,
О
О
8
16
j
I
24
32
О
0
40
8
рис. 4.37, а. Значит, заданный многоуголь-
Проверять остальные ребра этого многоугольника нет
необходимости.
в
Результаты проверки многоугольника, изображенного на рис. 4.37, Ь, сведены
окна.
Следовательне пересекает
табч. 4.°. Ни одно из ребер этою многоугольника
На рис. 4.37 видно,
либо
охватываюшиП'>.
либо внешний,
Следовательно, этот многоугольник
Ув
Уы
показано на
это ребро многоуголь-
16
24
32
40
что он охватывающий.
Ь
а
оболочкой,
с
Рис. 4.37.
ко-
прямоугольной
Простым габаритным тестом
нельзя идентифицировать все виды
который рассматривался выше,
может служить многоугольвнешних многоугольников. Примером
окна (рис. 4.38, а). Для этого нужны более
многоугольник, огибающий угол
Проверка пересечения.
тест с бесконечной
сложные тесты. Особый интерес представляют
подсчетом угла. В обоих тестах предполагается,
уже были идентичто внутренние и пересекающие многоугольники
прямой
Таблица 4.9.
и
тест
с
идентифицированы. Оба теста могут
Пробная
Ребро
многоугольника функция
Координаты
Результат
окна
подстановки
Примечание
быть использованы для определения
внешних и охватывающих многоугольников.
бесконечной прямой проводится луч из любой точки
в бесконечность. Подсчитываете я число пеокна, например из угла
В тесте с
4
8)
(8,32)
C2,32)
C2. 8)
Р\Рг
(8,
Нет пересечения
Если это число
28
пересечений этого луча с заданным многоугольником.
если же оно нечетчетное (или нуль), то многоугольник внешний;
как показано на рис. 4.38, а.
нечетное, то многоугольник охватывает окно,
(8, 8)
(8,32)
-28
Если луч проходит через вершину многоугольника, как показано
Эта неопределенность устрис. 4.38, Ь, то результат неопределен.
C2,32)
C2, 8)
-4
на рис. 4.38, Ь),
устраняется, если считать касание за два пересечения (Р2
за одно (Р4 на рис. 4.38, Ь) (см. также разд. 2.17).
а протыкание
-28
Изменение угла наклона луча тоже позволяет устранить неопреде-
4
28
на
II
РгРъ
у-36
Нет пересечения
-4
—
неопределенность.
РъРа
24
||
РаР\
у-А
(8, 8)
(8,32)
100
C2,32)
C2, 8)
28
(8. 8)
4
(8.32)
C2,32)
C2, 8)
28
Тест
Пет пересечения
Совершим
124
с
подсчетом
обход
стрелки.
по
угла
ребрам
II
Гл. 4. Удаление невидимых
линии
многоугольника
по
или
против часовой
При этом просуммируем углы, образованные лучами,
на-
любой точке окна и проходящими через начало и
Как
конец проходимого в данный момент ребра многоугольника.
начинающимися
4
Her пересечения
показано
на
в
рис.
4.39, удобной точкой является центр окна. Полу-
Получаемая сумма углов интерпретируется следующим
образом:
28
4
])
—
Внутренние многоугольники к этому моменту уже определены.
рев.
300
проиллюстрирован на рис. 4.39. Совер-
и
поверхностей
4.4. Алгоритм Варнока
Прим.
пе-
Бесконечная
40
Бесконечная
прямая
прямая
Уц
32
Ру
24
24
16
16
8
8
0
р^
7
32
5
-^х О
8
О
16
24
32
40
^
0
48
8
16
32
24
а
Рис. 4.38.
40
48
х
54
Ь
Проверка охватывающего многоугольника.
Сумма
Сумма
Рис. 4.40. Угловой тест для охватывающего и внешнего многоугольников.
=
0, многоугольник, внешний по отношению к окну.
=
±
отсечении
360 пу многоугольник охватывает окно п раз]).
Практическое вычисление этой суммы значительно упрощается,
если
учесть,
i
что
точность
вычисления
каждого
угла
не
быть высокой. Фактически нужная точность получается,
против часовой стрелки. Число целых октантов, покрытых углом,
равно разности между номерами октантов, в которых лежат концы
его
обязана
если счи-
(см. разд. 3.1). Пронумеруем октанты числами от 0 до 7
ребер. Предлагается следующий алгоритм:
конец
лежит
в
второй
октанта,
котором
(номер
(номер октанта, в котором лежит первый конец ребра)
ребра)
Да
=
—
,
считать
только
целые
октанты
(приращения
отдельными углами, как показано на
напоминает
ту,
что
использовалась для
по
45°),
покрытые
от-
рис. 4.40. Техника здесь напоми-
кодирования
концов
отрезка при
if До: > 4
then До:
=
Да
if Да:
<
-4
then Да
=
До: + 8
if До:
=
0
then ребро многоугольника расщепляется ребром
окна,
Многоугольник
и
-
8
процесс повторяется с парой полученных
отрезков.
Суммируя вклады от отдельных ребер, получаем:
ЕДо:
многоугольник, внешний
по отношению к окну,
=
±8 /?, многоугольник охватывает
окно.
Пример 4.16. Угловой тест для охватывающего и внешнего многоугольников
Рассмотрим окно и многоугольники, показанные на рис. 4.40. Для многоугольника с
Рис.
Рис. 4.39. Проверка с подсчетом угла.
4.40, а получаем лая ребра РХР2:
Аап
=
2-7 = -5 <-4
=
-5 + 8
=
3
Аналогично, для друшх ребер многоугольника имеем:
Простой многоугольник (не имеющий самопересечений) может охватить точточку только один раз.
Прим. перев.
')
=3-2=1
—
302
Гл. 4. Удаление невидимых линии
и
поверхностей
303
4.4. Алгоритм Варнока
=
5-3
=
2
Д«41 =7-5
=
2
окон,
3+1+2 + 2 = 8
=
1 -7= -6< -4
=
-6 + 8
пустых окон и окон,
=
многоугольник.
Этот многоугольник
первого
Д«45 =6-0
=
6-8
=
=
7
=
Да5|
-
6
числа
пу-
6>4
же
шага
на
рис.
разбиения.
Провести проверку при
-2
и
внешних
1
изображается. Напри4.34, b был бы изображен после
и
отсекается
помощи
более
сложных
охватывающих многоугольников,
тестов
для
чтобы определить
дополнительные пустые окна и окна, охваченные единственным
многоугольником. Такие окна сразу
=
большего
определения окон, пересекающих единственный многоуголь-
0-2= -2
=
как можно
Провести проверку при помощи простого теста на пересечение
Например, многоугольник
Даз4
порядке.
содержащих единственный внутренний много-
1
=
в следующем
многоугольник. Такие окна сразу же изображаются.
для
Д«23 =2-1
каждого окна
прямоугольной оболочкой для определения
2
=
Более сложный алгоритм должен
визуализации.
Провести проверку при помощи простою теста с прямоуголь-
Поэтому данный многоугольник охватывает окно.
Для многоугольника, показанного на рис. 4.40, Ь, имеем:
Дет
к
реализовать тестирование
Сумма всех углов, опирающихся на ребра этого многоугольника, равна:
=
готовых
же
изображаются.
2+1-2-2+1=0
После реализации этих шагов проводится разбиение окна или деладелается попытка обнаружить такой охватывающий многоугольник,
который был бы ближе к точке наблюдения, чем любой другой
Поэтому данный мноюугольник является внешним по отношению к окну.
Иерархическое использование методов, основанных на изложенизложенных вычислительных приемах, дает дополнительный
выигрыш.
Ес-
Если
нет
многоугольник. Если проводится разбиение, то решение последнего
В любом
вопроса откладывается до достижения уровня пикселов.
определять внутренние или пересекающие многоугольники.
Разбиения будут постоянно превращать такие многоугольники во
случае требуется проводить тест глубины.
Тест глубины проводится путем сравнения глубин (координат z)
плоскостей, несущих многоугольники, в угловых точках окна. Если
Все нестандартные ситуации разреша-
глубина охватывающего многоугопьника больше, чем глубины всех
реализуется
только
простейший
алгоритм
Варнока,
то
смысла
внешние или охватывающие.
разрешаются на уровне пикселов.
определения
В этом простом алгоритме для определе-
пустых окон достаточно пользоваться только тестом с прямоу-
остальных
многоугольников
в
углах окна,
то
охватывающий
многоугольник экранирует все остальные многоугольники
мно-
в этом окне.
объемлющей оболочкой. Если этот простой тест дает от-
Следовательно, данное окно можно визуализировать с тем значени-
отрицательный результат, то алгоритм разбивает окно вплоть до до-
значением интенсивности или цвета, которое соответствует охватывающе-
достижения
охватывающему многоугольнику.
прямоугольной
той
уровня
форме,
пикселов.
Поскольку
внешний многоугольник
в
которая показана на рис.
4.40, Ь, может встретиться
даже на уровне пикселов, то необходимо применить более мощный
алгоритм для определения пустоты окна или охвата его одним или
более многоугольниками.
Более сложный алгоритм, обсуждавшийся выше, делает попытпопытку определить
окна
способ расположения многоугольника относительно
больших размеров, чтобы избежать его подразбиения. Такие
тесты
требуют больших
Следовательно,
существует зависимость между затратами, связанными с процессом
разбиения окон,
304
и
вычислительных затрат.
затратами,
связанными с ранним
Гл. 4. Удаление невидимых линий
и
опредепением
Заметим, что приведенное условие по глубине
является достаточным, но не
охватывающий многоугольник
необходимым для того, чтобы охва-
экранировал
все остальные многоуголь-
На рис. 4.41 показано, что проведение теста глубины в
Углах окна для несущих грани плоскостей может привести к неудаче
многоугольники в окне.
при
определении
охватывающего
окно
многоугольника,
который
экранирует все остальные многоугольники в этом окне.
В частности, если плоскость, несущая многоугольник, экранируэкранируется охватывающим многоугольником в углах окна, то сам много-
многоугольник тоже экранируется последним
на рис.
в
углах
окна
(как показано
4.41). Если же несущая плоскость не экранируется охватыохватывающим окно многоугольником, то не очевидно, будет или нет
поверхностей
305
4.4.
Алгоритм Варнока
но
а на рис. 4.41, больше можно не учитывать,
помеченные буквой
нужно.
многоугольник, помеченный буквой Ь, учитывать
для каждого
Длину списка многоугольников, обрабатываемых
можно сократить, если воспользоваться информацией, полу-
окна,
В
если
многоугольник
частности,
полученной этим алгоритмом ранее.
что он охватывает и
охватывает окно, то очевидно,
этого окна и его
Охватывающий
многоугольник
для
охватывающих
много-
Учитывать далее следует
рассматривать при обработке этих подокон.
только пересекающие и внутренние многоугольники.
(см. разд. 4.3 и пример 4.3). Например, если
уравнение этой плоскости имеет вид
а
=
координаты угловой точки окна равны
z
равно искомой
Всюду
с
0
(xw, yw), то значение
—(d + axw + byj/c
с т^
предполагалось,
окном.
все
О
многоугольники следует
неэффективно. Эффективность можно повысить, проведя сортировку по
значению
z
координаты
ближе других
многоугольник
к
точке
с
той
z). Сортировка проводится по
вершины
многоугольника,
наблюдения. В правой
максимальным
значением
системе
такой
будет ближайшим к точке наблюдения. В списке
которая
координат
координаты
z
отсортированных
многоугольников он появится первым.
При обработке каждого окна алгоритм ищет охватывающие его
многоугольники.
После обнаружения такого многоугольника запо-
запоминается величина z у его самой
удаленной от наблюдателя верши-
вершины
zsmin. При рассмотрении каждого очередного многоугольника в
списке сравнивается
координата z его ближайшей к наблюдателю
вершины
-
с
zimin. Если
zpmax
ZpmM < Z,min, то очевидно, что очеочередной многоугольник экранируется охватывающим и не должен
больше учитываться. Из рис. 4.41
видно, что это условие является
достаточным, но не необходимым; например, многоугольники, по-
306
чтобы найти ближайший
того,
Для сложных сцен это весьма неэф-
приоритету глубины (сортировку по
Гл. 4. Удаление невидимых
линий и поверхностей
внешних
и
для
применяют
три
пересекающих
и
По ходу процесса разбиения
внутренних многоугольников [4-11].
список или удалямногоугольники включаются в соответствующий
и уровень (шаг разбиения), на
удаляются из него. Запоминается также
такого типа.
что
информацией,
этой
охватывающих, для
для
списка:
Затем
к
наблюдателю многоугольник та-
обрабатывается список пересекающих и внутрен-
ли все
многоугольников, чтобы проверить, не экранируются
охватывающим
многоугольником. Список внешних многоу-
внутренних
каждым
воспользоваться
в тот или иной список.
котором многоугольник впервые попадает
Эта информация используется при обходе дерева, изображенного
шаге разбиения перна рис. 4.33, в обратном порядке. На каждом
для
первым обрабатывается список охватывающих многоугольников
глубине.
выше
сравнивать
=
будет внешним и для всех его подокон,
Чтобы
by + cz + d
и его можно не рас-
то он
плоскости (случай b
Этот
4.41).
конфликт разрешается путем разбиения окна
Глубину несущей плоскости в углу окна можно вычислить с по-
ах +
окну,
глубин
на рис.
помощью ее уравнения
к
4.41. Сравнение
этой
в
Кроме то-
отношению
по
подокна
Рис.
многоугольников.
экранирован многоугольник, лежащий
можно больше не тестировать для них.
многоугольник является внешним
если
того,
все
они
многоугольников
игнорируется.
Итак, были обсуждены
основные
идеи
и
улучшений алгоритма Варнока. Важно подчеркнуть,
единого
алгоритма
различаются
этого
в
Варнока. Конкретные реализации
деталях. Запись наиболее
алгоритма
на
псевдоязыке
дана
возможных
методы
что нет едино-
этого
алгоритма
фундаментальной версии
ниже.
Если
размер
окна
больше разрешающей способности дисплея и если оно еще содервсегда будет раз-
представляющее интерес, то алгоритм
разбивать окно. Чтобы идентифицировать внешние многоугольники
содержит нечто,
Для
окон,
простой
пикселов, проводится
размер которых больше размера
габаритный тест с прямоугольной оболочкой.
размером с пиксел выполняется более сложный тест,
в
А для окон
котором ви-
z
многоугольник определяется путем сравнения координат
всех многоугольников в центре пиксела. Однако здесь не использудаиспользуется сортировка по приоритету вдоль оси z, а также выигрыш,
даваемый ранее накопленной информацией об относительном распомакрасположении многоугольников и окон. Алгоритм использует стек,
видимый
-07
4.4.
Алгоритм
Варнока
простая реализация алгоритма Варнока
симальная длина которого равна
3
•
(разрешение экрана в битах
1) +
—
5
Этот простой алгоритм предназначен для
демонстрации основных
идей без подробностей реализации структур данных. Для
выпуклых
многогранников до начала работы данного алгоритма проводится
устранение нелицевых
граней (см. разд. 4.2). Блок-схема показана
на рис. 4.42.
если
разобьет это окно
алгоритм
у
значения
все
что
предполагается
заданы
в
системе
координат
экрана (пространстве изображения)
предполагается, что устранение нелицевых граней проведено
работы алгоритма
начала
массив
размером
т х
3,
в
котором запоминаются
координаты вершин всех многоугольников
размером
с экран в стек с параметрами
m
Стек пуст?
—
общее
вершин многоугольников
число
Предполагается,
что эти вершины перечислены в
обхода
по
в
сцене.
Предпола-
порядке их
часовой стрелке
многоугольников в сцене
в
информация об отдельных многоугольниках запоминается
N
пег
—
число
массиве
Извлечь окно из стека с
(Хиач.
то
есть,
разбивается на четыре одинаковых подокна
окном
каждый многоугольник сравнивается с каждым
Вершина
<^"
дисплея квадратный
экран у
окно
—
I
что-то
окне
в
до
Поместить окно
что
предполагается,
параметрами
Упач, Pajvicp)
Многоугольник размером N х 11
Многоугольник
,1)
(
—
указатель
на
многоугольника
Список
многоугольников
пуст? i > N?
И юбразить
Многоугольник (
Многоугольник (
,2)
,3)
Многоугольник (
,4—7)
—
—
число
в
вершин
первую вершину мно-
Вершина
массиве
многоугольника
интенсивность света
или
цвет мно-
пустое окно
многоугольника
нет
—
да
Многоугольник
-j Размер
внешний?
—
коэффициенты а, Ь,
уравнения плоскости,
Размер/2
с,
d уравне-
несущей много-
многоугольник
Поместить и
сгск четыре окна:
Унач+ Размер, Размер
Хнач, Унач + Размер. Размер
Хнач+ Размер, Уиач, Размер
Хнач. У нач. Размер
Хиач+ Размер,
Провести сложный
тест на внешность
по отношению к
окну
Push
Wmax
с пиксел
нет
размеромЧ яа
У
пусто?
—
—
—
Изобразить пустое
¦
окно размером
с пиксел
I
Окно
—
многоугольников
точке
@, 0)
массив
размером 1x3,
координат
окна
Внешность
интенсивностью
или цветом
многоугольника,
у которого 7 = гтм
Рис. 4.42. Блок-схема простого алгоритма
Варнока.
=
Гл. 4. Удаление невидимых линий и поверхностей
флаг
его
размер
в
коор-
форме (Хнач, Унач, Размер)
0 для пустого окна,
^7 для непустого окна
=
цвет
или
0
поместить окно размером с экран в стек
4.4.
308
—
и
который содержит начало
инициализировать черный фоновый
Фон
многоугольника
функция, заносящая окна в стек
функция, извлекающая окна из стека
максимальные габариты окна по х и у. Предполав
Предполагается, что начало координат экрана находится
Вычислить z для всех
Изобразить пиксел с
габариты хт\п, xmax, j>mi,,, jw
прямоугольной объемлющей обооболочки
Pop
Окно
,8—11)
Многоугольник (
—
Алгоритм Варнока
интенсивность
Push Окно@, 0 Wmax)
подпрограмма реализации простого габаритного
while (стек не пуст)
взять
окно
Pop Окно(Хнач, Унач, Размер)
i
=
пря-
прямоугольной оболочкой
subroutine ГабаритA, Многоугольник, Окно; Внешность)
из стека
инициализировать
с
теста
габаритов окна: Хлев, Управ, Хниз, Уверх
ОкноA, 1)
Хлев
1
ОкноA, 1) + ОкноA,3)
Хправ
ОкноA, 2)
Униз
1
ОкноA, 2) + ОкноA, 3)
Уверх
оболочкой
реализация тестов с прямоугольной
вычисление
счетчик многоугольников
=
1
-
=
Внешность
=
О
=
Выполнить для каждого многоугольника
габаритный тест с
прямоугольной оболочкой, чтобы найти внешние
многомногоугольники
while (i ^ N and
внешность
Внешность
0)
call Габарит(д, Многоугольник,
Окно, Внешность)
i
=
=
Многоугольник^, 8)
if Многоугольник^, 9)
if Многоугольник^, 10)
if Многоугольник^, 11)
end while
бы один многоугольник
разбить
окно
или
не является
внешним,
изобразить пиксел
if
размер окна больше пиксела,
то
разбить
Размер > 1 then
Размер
Размер/2
Push Окно(Хнач + Размер, Унач +
Разхмер, Размер)
Push Окно(Хнач, Унач +
Размер, Размер)
Push Окно(Хнач + Размер,
Унач, Размер)
Push Окно(Хнач, Унач,
Размер)
else
окно
размером
с
пиксел,
то вычислить его
if Номер > 0 then
call Визуализация(Окно,
else
Изобразить пустое окно
0
=
0
then Внешность =0
< Униз
окна
Setpixel(x, у, I)
—
функция визуализации пиксела, координаты
(х, у), с интенсивностью I
1
ОкноA, 2) to ОкноA, 2) + ОкноA, 3)
forj
fori
ОкноA, 1) to ОкноA, 1) + ОкноA, 3)
которого
-
=
1
-
=
Setpixel(i, j, Интенсивность)
next i
j
подпрограмма,
центр
проверяющая, покрывает
ли
многоугольник
окна
subroutine Покрытие(Вершина, N, Многоугольник, Окно; Но-
Многоугольник (Номер, 3))
Визуализация(Окно, Фон)
Номер)
считается,
что
пиксел,
если
центр
этого
окна
окно
с
размером
находится внутри много-
поскольку вершины многоугольника перечисляются
данный
его
внутренность
алгоритм использует
описанную
Фон)
многоугольник покрывает
многоугольника
стрелке,
Гл. 4. Удаление невидимых линии и
then Внешность
> Уверх
=
return
Номер)
end if
end if
else
call Визуализация(Окно,
end if
end while
finish
Хлев then Внешность
ат-
атрибуты
call Покрытие(Вершина, N,
Многоугольник, Окно;
call
<
return
next
если
Хправ then Внешностью 0
subroutine Визуализация(окно, Интенсивность)
окно
=
310
то
>
подпрограмма визуализации
if Внешность > 0 then:
если
1
=
if
i + 1
если хотя
-
=
в
лежит
справа
от
по
часовой
контура
подпрограмму Видимость,
опи-
разд. 3.16
если покрывающие многоугольники
Номер 0
не
обнаружатся,
то
=
же
поверхностей
найден
хотя
бы один
4.4. Алгоритм Впрнока
покрывающий многоугольник,
¦•
II
то
будет равен номеру того
Номер
присвоить Zmax начальное значение,
предполагается,
них,
все многоугольники расположены
что
в
положи-
полупространстве Z ^ О
положительном
Zmax
который видим
равное нулю. Тут пред-
из
предположим,
вначале
что
покрывающих многоугольников
Номер
Точкау
наблюдения для этого пиксела
—
обозначение функции, вычисляющей максимум
координат х и у центра пиксела
ОкноA, 1) + ОкноA, 3)/2
ОкноA, 2) + ОкноA, 3)/2
Уцентр
в центре пиксела
определение координаты i многоугольника
пиксела
поиск ребра многоугольника, проходящего через центр
=
3)/2
=
ОкноA, 2) + ОкноA, 3)/2
для каждого многоугольника
for i
1 to N
что
заметим,
=
многоугольник
такого
типа может совершен-
отсутствовать или появиться в качестве набора
например, в результате ступенчатости
несвязанных точек
0 then
if Многоугольник^, 6)
несвя-
совершенно
МногоугольникA, 1)
=
=
Хцентр
=
Индекс
который находится ближе других
вычисление
О
=
установить центр окна
Точках
ОкноA, 1) + ОкноA,
I
многоугольника,
Мах
нет
пиксела1^
Окно; z)
subroutine Вычислить(Вершина, i, Многоугольник,
используется для вычислеуравнение плоскости многоугольника
к точке
вычисления
О
=
подпрограмма вычисления интенсивности
—
для каждого ребра многоугольника
for j
1 to
=
Tlx
=
Tly
=
Т2х
Т2у
=
=
Многоугольник^, 2)
Вершина(Индекс, 1)
Вершина(Индекс, 2)
Вершина(Индекс + 1, 1)
Вершина(Индекс +1,2)
что
заметим,
Точка, Tl, T2
—
=
1
for
j
z
—
это
сокращения
вычисление г по
для
A
=
В
=
if Твидимость < 0 then 1
С
=
Индекс
D
=
next
Индекс + 1
j
z
проверка относительно последнего
Tlx
Вершина(Индекс, 1)
Т2х
=
=
Всршина(Индекс, 2)
Вершина(Многоугольник (i, 1), 1)
=
уравнению
плоскости
многоугольника
Многоугольник^, 4)
Многоугольник^, 5)
Многоугольник^, 6)
Многоугольник^, 7)
-
(А
*
Хцентр + В * Уцентр + D)/C
end if
ребра многоугольника
=
Tly
=
2 to
next j
else
идентификаторов Точках, Точкау и т. п.
call Видимость(Точка, Tl, T2; Твидимость),
=
Многоугольник^, 2)
Мах(ВершинаО, 3), Bepmmia(j —1, 3))
=
return
Для иллюстрации работы этого алгоритма приведем
Т2у
Вершина(Многоугольник (i, 1), 2)
call Видимость(Точка, Tl, T2, Твидимость)
if Твидимость ^ 0 then
один пример.
=
call
if
Пример 4.17. Алгоритм Варнока
Рассмотрим три многоугольника:
Вычислить(Вершина, i, Многоугольник, Окно; z)
z. >
Zmax then
Zmax
=
Номер
1 :
2:
3:
z
=
i
A0, 3. 20), B0. 28, 20). B2, 28, 20), B2, 3, 20)
E, 12, 10), E, 20, 10), B7, 20, 10), B7. 12, 20)
A5. 15.25). B5,25,5), C0, 10,5)
end if
end if
1
next i
|}
return
312
Гл. 4. Удаление невидимых линий
и
поверхностей
313
Точнее
глубины многоугольника, покрывающего
4.4. Алгоритм Варнока
пиксел.
—
Прим. перев.
на экране с разрешением 32x32 пиксела, используя прокоторые нужно изобразить
описанный выше. Два первых многоугольника яыяются
простои алгоритм Варнока,
=
20 и z = 10.
оси z соответственно при z
прямоуюльниками, перпендикулярными
как показано на
треугольник, протыкающий оба прямоугольника,
пежащей в бесконеч4.43, а. На рис. 4.43, b показан вид на эту сиену из точки,
—
Третий
рис.
бесконечности
A
на
это
положительной полуоси z\
невидимые
линии
удалены
с
рисунка.
На
содержимое буфера кадра после завершения работы алгоритма.
Алгоритм работает,
Цифры в ячейках соответствуют номерам многоугольников.
показывают габаячейки
начиная с левого нижнего угла, направо и вверх. Крупные
рис. 4.43,
с показано
каждом шаге
алгоритма.
в результате разбиения экрана на
габариты окон, полученных
нижнем
углу
окно (8x8) в левом
Обратим, например, внимание на большое пустое
-».
.\
экрана. Это
окно
изображено без дальнейшего подразбиения. На рисунках показано,
затем протыкает
чго треугольник частично экранирован вторым прямоугольником,
потом экранируется первым прямоугольником,
его, становится частично видимым,
и его, так что делается видимой вершина этого Tpeyi ольиика.
и, наконец, протыкает
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
30
0 0 0 0 0 0
0 0 0
0 0 0
0 0 0
4.5. АЛГОРИТМ ВЕЙЛЕРА— АЗЕРТОНА
Вейлер
и
Азертон [4-12]
попытались
минимизировать количество
разбиения типа алгоритма Варнока путем раз-
шагов в алгоритме
разбиения окна вдоль границ многоугольника.
Основой этого алгорит-
Азертона, используемый для отв разд. 3.17. Выотсечения многоугольников и обсуждавшийся ранее
алгоритма послужил другой
Выходными данными
необходимой
Вейлера
—
—
неалгоритма, который для достижения
работает в пространстве объекта, служат
этого
точности
многоугольники. Поскольку выходом являются многоугольники,
то
использовать для удаления как невидимых
алгоритм можно легко
линий, так и невидимых поверхностей. Алгоритм удаления
невидимых
невиди-
поверхностей состоит из четырех шагов.
Предварительная сортировка по глубине.
Отсечение по границе ближайшего к наблюдателю многоугольна плоскости.
многоугольника, называемое сортировкой многоугольников
0 0
0 0
0
00000"
0 0 0 0 0
0 0 0 0 0
2 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0 0 0 0
3456789
Рис. 4.43.
Пример многоугольников для
314
4. Удаление невидимых линий
Гл.
простого алгоритма
и
поверхностей
Варнока.
Удаление многоугольников, экранированных многоугольником,
ближайшим к точке наблюдения.
подразбиение и окончательная
сортировка для устранения всех неопределенностей.
Если требуется,
то
рекурсивное
Предварительная сортировка по глубине нужна для формирования
что
точка
приблизительных приоритетов. Предположим,
наблюдения расположена в бесконечности на положительной полумногополуоси z, тогда ближайшим к ней и первым в списке будет тот
списка
максимальной координамногоугольник, который обладает вершиной с
координатой z.
4.5. Алгоритм Веилсра—Азертона
Внешний список
Внутренний список
80
60
/z=757
40
/1
zHOO
\
3
20
4
¦з
z = 50
z = 25
0
О
2 0
40
a
hi)
80
100
120
Рис. 4.45 Внутренний
и
внешний списки многоугольников.
b
Рис. 4.44. Отсечение многоугольников по
приоритетам для алгоритма уда 1ения нешыимых поверхностей Вейлера
Азертона.
списка
окажется
больше,
чем
то
zc min,
такой многоугольник
по
—
В
качестве
отсекающего
первого многоугольника
по
предварительного
глубине. Отсекаться будут
многоугольники, включая и
внутренний
—
Вейлера
из
многоугольника
и
остающиеся
используется
списка
в этом
копия
приоритетов
списке
много-
первый многоугольник. Вводятся два списка:
внешний.
С помощью алгоритма отсечения
отсекающего многоугольника. Фактически это
двумерная операция ототсечения проекций отсекающего и
отсекаемого многоугольников. Та
часть каждого отсекаемого
многоугольника, которая оказывается
внутри отсекающего, если она имеется, попадает во
внутренний
Оставшаяся часть, если таковая есть, попадает во внешний
список. Этот этап алгоритма является
сортировкой на плоскости
или
л^-сортировкой. Пример приведен на рис. 4.44. На рис. 4.45
показаны внутренний и внешний списки
для сцены на рис. 4.44. ТеТеперь сравниваются глубины каждого многоугольника из
из
многоугольника. Отсечению подлежат многоугольники
тевнутреннего списка, причем старый отсекающий многоугольник
отсекающего
Вейле-
Азертона все многоугольники отсекаются по границам отсе-
список.
На
крайней мере частично экранирует отсекающий многоугольник.
как это может произойти. В подобном случае
рис. 4.46 показано,
по глубине ошибочен. Порезультат предварительной сортировки
испольПоэтому алгоритм рекурсивно подразделяет плоскость (х,^),
в качестве нового отсекаиспользуя многоугольник, нарушивший порядок,
много-
будет подвергнут отсечению новым отсекающим
многоугольником. Подчеркнем, что новый отсекающий многоугольник
теперь сам
является
копией исходного многоугольника,
первого
отсечения.
Использование
копии
многоугольника позволяет минимизировать
число
а не его остатка после
неотсеченного
много-
разбиений.
Более полной иллюстрацией этого алгоритма послужит следуюследующий простой пример.
внутренне-
внутреннего списка с
глубиной отсекающего многоугольника. С использоваиспользованием координат ( х, у) вершин отсекаемых
многоугольников и уравуравнений несущих плоскостей вычисляются
глубины (координаты z)
каждой вершины. Затем они сравниваются с минимальной
коордикоординатой z(
для отсекающего
zcmin)
многоугольника. Если
одной из этих вершин не будет больше
многоугольники из
глубина ни
zc m5n, то все многоугольни-
внутреннего списка экранируются отсекающим
многоугольни-
(рис. 4.44). Эти многоугольники удаляются, и изображается
внутренний список. Заметим, что во внутреннем списке остался
многоугольником
лишь
отсекающий многоугольник. Работа алгоритма
затем
про-
Рис.
продолжается с внешним списком.
316
Гл. 4. Удаление невидимых линий и
Условие
возникновения
ошибочного результата
Если координата z какого-либо многоугольника из
внутреннего
И
4.46.
max
поверхностей
317
4.5. Алгоритм Вейлера—Азертона
предварительной сортировке по
в
z.
предвари-
Пример 4.18. Алгоритм удаления невидимых поверхностей
Вейлера
Азертона
Тдолииа 4.10.
—
Возьмем два прямоугольника (рис. 4.46).
Вершинами прямоугольника А являются
E, 0, 25), D0, 0, 5), D0. 40, 5) и E, 40, 25).
Прямоугольник В имеет вершины
B5, 0, 20), E5, 0, 20), E5, 30, 20) и B5,
30, 20). На рис. 4.47, а показана эта сцена ло
отсечения из точки
наблюдения, расположенной в бесконечности на положитепьноп
Начальный
Отсекающим Отсекаемый Внутрснмногоуголь- мкоюуголь- иий список внешний
||НК
Рекурсия
В
Продолжение
работы с
полуоси z- Хотя В экранирует часть А,
предварительная сортировка по глубине поА перед В в упорядоченном списке
приоритетов. Копия А используется в какачестве первого огескаюшего
многоугольника. Первоначальный список отсекаемых
внешним
содержит
А,
В, как показано в табл. 4.10. В табл. 4.10 и на
4.47, b показан результат отсечения содержимого этого списка
относительно
многоугольника А. Теперь внутренний список
содержит многоугольники А и С, а
внешний список
и
Примечание
А
поставит
многоугольников
Изображлется
список
список
ник
Конечный
внешний
и
списком
рис.
содержит В'.
Сравнение глубин
многоугопьника показывает, что
А
и
С с глубиной отсекающею
С находится перед отсекаюшим
Да пес алгоритм рекурсивно разбивает
многоугольник
многоугольников
В'
В'
—
Участок, обозначенный D,
С и
В'
В'
мноюугольником.
плоскость, используя в качестве отсекающего
В, частью которого является
С, а в качестве списка отсекаемых
внутренний список.
табл. 4.10. Участок, обозначенный А
многоугольников
А'
А'
Результат
показан
на
рис.
4.47,
с
и
', отсекается и помешается во внешний список.
помешается во внутренний список.
Сравнение многоD из внутреннего списка с
отсекаюшим многоугольником В пока-
D экранирован. Следовательно, он уааляется. Поскольку С совпадает с
В, он остается во внутреннем списке. Рекурсия не
отсекающим многоугольником
зывает, что
нужна.
многоугольниками
в
В'
и
А
Заслуживает
До отсечения
многоугольником А
20
извлекаемыми из внешнего списка.
внимание
алгоритма. Когда
Отсечение В
,
табл. 4.10. Окончательный результат
У
40
С изображается. Апгоритм продолжает работу с
Многоугольник
перекрывается с
еще
показан на рис.
одна
много-
Подробности приведены
4.47, d.
дополнительная
деталь
этого
некоторый многоугольник циклически перекры-
отсекающим, т. е. когда он лежит как впереди, так и поза-
(рис. 4.48, а), то в рекурсивном разбиении необхонеобходимости нет. Дело в том, что все экранируемое циклическим мно-
позади отсекающего
многоугольником уже было удалено на предыдущем шаге отсечения.
Необходимо лишь произвести отсечение исходного многоугольника
В
по границам циклического
0
0
20
40
60
многоугольника и изобразить результат.
Ненужное рекурсивное разбиение можно предотвратить, если со-
а
создать
список
многоугольников,
которые уже использовались
У
Отсечение А
40
Окончательная
многоугольником В
картинка
20
А'
0
0
20
40
60
0
20
с
Гл. 4. Удаление невидимых пиний
60
d
Рис. 4.47. Рекурсивное
разбиение для алгоритма Вейлера
318
40
и
поверхностей
—
Азертона.
Рис. 4.48. Циклически перекрывающиеся многоугольники.
4.5. Алгоритм Вейлерл—Азертона
как
отсекающие.
Тогда, если при рекурсивном разбиении текущий отсе-
отсекающий многоугольник появляется в этом
списке, значит,
обнаружен
цикпически
требуется
не
перекрывающийся многоугольник.
никакого дополнительного
данный
алгоритм непосредственно
на рис.
4.48, Ь.
обнару-
Следовательно,
разбиения. Заметим,
что
обрабатывает случаи цикличециклического перекрытия сразу нескольких
многоугольников, как показано
4.6. АЛГОРИТМ РАЗБИЕНИЯ
элемента поверхности
пиксела —v
КРИВОЛИНЕЙНЫХ
Ь
Проекция
Центр
ПОВЕРХНОСТЕЙ
Как в основной версии алгоритма
разбиения Варнока,
так и в
вер-
криволинейной поверхности.
Разбиение
Вейлера
Азертона, предполагается, что сцена состоит из наплоских
набора
многоугольников. Однако многие объекты описыва-
Рис. 4.49.
описываются
криволинейными поверхностями, например самолеты,
корабкорабли, автомобили, мебель и т. п. Полигональные
та-
поверхности, которые проецируются
таких
окна видимости,
версии
—
аппроксимации
поверхностей не всегда дают адекватные
представления, напри-
например силуэтные линии выглядят не как непрерывные
состоящие из отдельных
коротких отрезков прямых.
кривые,
а как
типа
бикубическими
разбиения Варнока. Хотя сам Кэтмул исалгоритм для поверхностей, заданных бикубически-
алгоритма
использовал этот
элементами, он обладает общностью,
видимости,
разбиваются дальше до тех пор, пока не станет
окна.
очевидным вопрос об их расположении относительно
Эффективность этого алгоритма зависит от эффективности
Кэтмул предложил
метода разбиения криволинейной поверхности.
Лнч и
один метод для разбиения бикубических элементов. Коэн,
Ризенфельд [4-15] предложили более обший метод для поверхноповерхностей, заданных
изображения,
4.7.
Кэтмула рекурсивно
окна
ребра
разумеется отбрасываются. Элементы, которые пересекают
достаточной для примеприменения его к любым криволинейным
поверхностям. В отличие от алалгоритма Варнока, который рекурсивно разбивал
изо-
алгоритм
пределы
ме-
Кэтмул [4-13,
4-14] предложил для визуализации криволинейных поверхностей алалгоритм
за
пространство
разбивает поверхность.
Простейшее описание этого алгоритма таково:
Рекурсивно разбивать поверхность на элементы до тех пор, попока
проекция каждого элемента на пространство
изображения
будет покрывать не более одного центра пиксела.
не
Вычислить атрибуты поверхности в этом пикселе и
изобразить
^-сплайнами.
АЛГОРИТМ, ИСПОЛЬЗУЮЩИЙ z-БУФЕР
Это один из простейших алгоритмов удаления невидимых поверхповерхностей.
Впервые
он
был предложен
Кэтмулом
[4-14]. Работает
Идея ^-буфера являет-
алгоритм в пространстве изображения.
является простым обобщением идеи о буфере кадра.
этот
Буфер кадра исполь-
атрибутов (интенсивности) каждого пиксеэто отдельный буфер
пиксела в пространстве изображения, г-буфер
используется для запоминания
—
его.
z или
На рис. 4.49, а показан элемент
более мелкие элементы
что
если
размером
поверхности и его разбиение на бос
пиксел.
Чтобы убедиться в том,
криволинейный элемент покрывает ровно один
поверхность
достаточно
его
не
слишком
полигональной
разбиения завершается,
искривлена, обычно бывает доста-
аппроксимации
когда
центр пиксела,
появляются
(рис. 4.49, Ь). Процесс
элементы,
которые
не
покрывают ни
одного центра
присваиваются
ближайшим к ним центрам пикселов. Те элементы
320
пиксела.
Атрибуты этих элементов
Гл. 4. Удаление невидимых линий и поверхностей
глуби-
глубины, используемый для запоминания координаты
В проглубины каждого видимого пиксела в пространстве изображения.
нового пиксела, ко-
работы глубина или значение z каждого
с глубиной того
который нужно занести в буфер кадра, сравнивается
Если это сравнение покапиксела, который уже занесен в г-буфер.
процессе
расположен впереди пиксела, находящев этот буфер и,
находящегося в буфере кадра, то новый пиксеп заносится
новым значеникроме того, производится корректировка ^-буфера
показывает,
321
что
новый
пиксел
4.7. Алгоритм, использующий г-буфер
Если же сравнение дает противоположный
ем z.
результат, то нидействий не производится. По сути,
алгоритм является поиспоиском подг и у наибольшего значения
функции z (х,
никаких
Главное преимущество алгоритма
этот
и
у).
—
его простота.
алгоритм решает задачу об удалении невидимых
делает
тривиальной визуализацию пересечений
поверхностей. Сцены могут быть любой сложности.
Кроме того,
поверхностей
сложных
поверх-
Поскольку габариты
пространства
изображения фиксированы,
оценка
вычислительной
трудоемкости алгоритма не более чем линейна.
элементы
z
сцены
-буфер
в
или
картинки
произвольном
можно
заносить
порядке,
их
не
в
Поскольку элеменбуфер кадра или в
нужно
предварительно
сортировать по приоритету
глубины. Поэтому экономится вычисвычислительное время, затрачиваемое на
сортировку по глубине.
Основной недостаток алгоритма
большой объем требуемой
—
памяти.
отсекается
Если сцена подвергается видовому
преобразованию и отсе-
фиксированного диапазона координат z значений, то
можно использовать z
-буфер с фиксированной точностью. ИнфорИнформацию о глубине нужно
обрабатывать с большей точностью, чем
координатную информацию на плоскости (х, у)\ обычно бывает
достаточно 20 бит. Буфер
кадра размером 512x512x24 бит в комкомбинации с z -буфером размером 512x512x20 бит
требует почти
до
1.5 мегабайт памяти. Однако снижение
цен на память делает экоэкономически
оправданным создание специализированных запоминаю-
запоминающих устройств для z-буфера
и
связанной с
ним
аппаратуры.
Альтернативой созданию специальной памяти для z
является
памяти.
использование для
-буфера яв-
этой цели оперативной или массовой
па-
Уменьшение требуемой памяти достигается
пространства изображения на 4,
разбиением про16 или больше квадратов или полос. В
предельном варианте можно использовать z
-буфер размером в одну
строку развертки. Для последнего случая имеется
интересный алго-
алгоритм построчного сканирования (см.
разд. 4.9).
Поскольку каждый
обрабатывается много раз, то сегментирование
z -буфера, вообще
говоря, приводит к увеличению времени, необхонеобходимого для обработки сцены. Однако
сортировка на плоскости, попозволяющая не обрабатывать все
многоугольники в каждом из кваэлемент
сцены
квадратов или полос, может значительно
сократить этот рост.
Другой недостаток алгоритма г-буфера состоит в
трудоемкотрудоемкости и высокой стоимости
устранения лестничного эффекта, а тактакже
реализации
эффектов
прозрачности
и
просвечивания. ПоПоскольку алгоритм заносит пикселы в
буфер кадра в произвольпроизвольном порядке, то нелегко
получить информацию, необходимую
322
Гл. 4. Удаление невидимых линий
и
поверхностей
эффекта, основывающихся на
предварительной фильтрации (см. разд. 2.27). При реализации
пиксеэффектов прозрачности и просвечивания (см. разд. 5.9),
что
заноситься в буфер кадра в некорректном порядке,
пикселы могут
для методов устранения
ведет
к локальным
лестничного
ошибкам.
Хотя реализация методов устранения лестничного эффекта,
[4-13], прак-
возможна
основывающихся на префильтрации, в принципе
относительно
практически это сделать трудно. Однако
осно-
легко
реали-
постфильтрации (усреднение подпикселов) (см.
в методах устранения лестничного эфразд. 2.26). Напомним, что
сцена вычисляется в
эффекта, основывающихся на постфильтрации,
методы
реализуются
разрешающая способность котовозразрешающая способность экрана. Поэтому
таком пространстве изображения,
которого выше,
возможны
два
чем
подхода
к
устранению летничного
эффекта на основе
постфильтрации. В первом используется буфер кадра, заданный
в
выше, чем у экрапространстве изображения, разрешение которого
совпадает с разрешением экраэкрана, и z -буфер, разрешение которого
Глубина изображения вычисляется только в центре
той группы
Если для имитации
подпикселов, которая усредняется.
расстояния
экрана.
от
наблюдателя используется масштабирование интенсивности,
то
этот метод может оказаться неадекватным.
Во втором методе оба буфера, заданные в пространстве изобраспособность. При визуаизображения, имеют повышенную разрешающую
так и глубина усвизуализации изображения как пикселная информация,
очень большие объемы
усредняются. В этом методе требуются
памя-
Например, изображение размером 512x512x24 бита, использупоиспользующее z -буфер размером 20 бит на пиксел, разрешение которого
памяти.
повышено в
2 раза по
ступенчатость методом
почти
осям*
и .у
и
на
котором устранена ступенча-
равномерного усреднения (см. рис. 2.53, а), требует
6 мегабайт
памяти.
Более формальное описание алгоритма
г-буфера таково:
Заполнить буфер кадра фоновым значением интенсивности
или
цвета.
Заполнить z -буфер минимальным значением z.
Преобразовать каждый
многоугольник
в
растровую форму
в
произвольном порядке.
Для каждого Пиксел(х, у) в многоугольнике вычислить
его глу-
глубину z{x, у).
Сравнить глубину z(x} у) со значением Zбyфep(*, у), храня-
4.7. Алгоритм, использующий ^-буфер
щимся в
z -буфере в этой же позиции.
Если z (х> У) >
Пример 4.19. Алгоритм, испопьзуюшиЛ г-буфер
Z
буфер (х, у), то записать атрибут этого мномногоугольника (интенсивность, цвет и т.
п.) в буфер кадра и замезаменить Zбуфер(х,
у) на z (х, у).
В противном случае никаких
действий не
В
качестве предварительного шага
там, где это
целесообразно,
применяется удаление нелицевых граней
(см. разд. 4.2).
Если известно уравнение
плоскости, несущей каждый многомногоугольник, то вычисление глубины каждого пиксела на
сканирующей
строке
¦I
можно
проделать
пошаговым
способом.
'
Напомним,
что
уравнение плоскости имеет вид
z
=
10. 5). Треугольник протыкает прямоугольник,
/>,A5, 15, 15), РвB5, 25, 5), J°7CO,
с разрена
этой строке, у
=
которогохj
-i-z
=
const.
х
+
Поэтому глубина пиксела на
z\
=
положитечьной
на
1, поэтомуz,
=
=
z
-
z
-
а{х~х\)/с
развертки прямоугольника содержимое
о
о
о
о
о
о
о
о
о
о
о
о
о
о
о
о
о
о
о
(а/с).
послужит
о
о
о
0
000
0
000000000
0
0000
О
0
00
0
0
00
00
0
0
0
0
0
0
0
0
0
0
о
о
о
о
о
о
о
оо
о
о
о
о
о
о
о
о
о
о
0
00
и
00
0
00
о
о
о
о
0
00
о
о
о
о
о
следующий
о
о
о
о
0
0
000000001111111
0000000
0
о
о
о
о
о
о
о
о
11111100 0 0000
1
11
1
1
10
0
00000
1
11
1
1
10
0
0
0
0
0
0
111110000000
001111111
00000000001111111
1
1
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
10
0
0
0
0
0
0
1
10
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0000000000111111
0
0
0
0
0
0
0
0
0
0
1
1
I
1
1
1
1
0
0
0
0
0
0
0
И
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
I
0
0
0
0
0
0
0
1
1
1
1111
110
0
0
0
0
0
0
OOOOOU00001
00000000001
I
1
1
1111
110
0
0
0
0
0
0
000001111
1111
110
0
0
0
0
0
0
0000
ь
о
о
000000000
00
о
о
о
о
и
о
оооооооооо
0
00000000001
1
1
1
1111
1
10
0
0
0
0
0
0
00000000001
1
1
1
1111
110
0
0
0
0
0
0
оооооооооооооооооооооооооооооооо
оооооооооооооооооооооооооооооооо
оооооооооооооооооооооооооооооооо
оооооооооооооооооооооооооооооооо
о
и
о
о
о
о
о
о
оооооооооо
невидимых линий
и
о
о
о
о
оооооооооо
Гл. 4. Удаление
на
показано
о
и
о
о
о
о
оооооооооо
324
как
о
с
н
оооооооооо
Протыкающий треугольник.
z,
полуоси
о о
00000000001111111
00000000001 1 1 1 1 1 1
пример.
Рис. 4.50.
через 1,
буфера кадра будет иметь следуюшии вид:
U0000000001111111
00000000001111111
(а /с)Ах
Дальнейшей иллюстрацией алгоритма
—
Ь.
рис. 4.50,
Вначале и в буфере кадра, и в ^-буфере содержатся нули. После растровой раз-
-
или
Но Да-
бесконечности
в
расположена
00
Ах, равна
=
—
а
треугольник
бит. Таким
32x32
плоскости
4
битовых
размером
отводится
через 2. Пол <т-буфер
16.
Точка
наблюдения
окажется в диапазоне от 0 до
образом, содержимое ^-буфера
о
=
экране
двумя битовыми плоскостями.
Эгн многоугольники нужно изобразить
оооооооооооооооооооооооооооооооо
оооооооооооооооооооооооооооооооо
-{ах+ by + с!)/с^0
Для сканирующей строки^
4.50.
с
разрешением 32x32, используя простой буфер кадра
В этом буфере фон обозначен через 0, прямоугольник
о
ах 4- by -r cz + d = О
равны
которого
10), Р2(\0. 25, 10), Я3B5« 25> 10>> Ра№* 5, 10) и треугольник с вершинами
р A0, 5,
как показано на рис.
производить.
точек
уповых
координаты
мноюуголышк,
рассмотрим
о
о
о
о
о
о
о
о
о
о
о
о
о
но
о
о
поверхностей
4.7.
Алгоритм, используюший г-буфер
у
о
о
о
оооооооооо
Содержи Mot: .--буфера
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
с
0
0
0
0
0
0
0
0
0
0
0
(
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
II
0
0
0
0
0
0
0
0
0
0
0
0
1
1)
()
0
0
0
0
0
п
и
0
(J
f)
(э
и
0
0
0
0
и
о
f]
с
()
(>
0
()
Г)
()
0
0
0
0
0
0
о
11
ь
с
0
1)
1)
0
(}
1)
1)
0
0
0
0
0
(J
и
fl
VJ
0
0
с)
1}
0 ()
t)
()
0
0
(»
0
0
0
(]
A
11
с
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
t)
С
0 1)
С)
(»
0
0
0
0
0
0
и
0
о
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
г
с
о
с
()
0
и
0
0
и
0
о
и
0
0
0
0
0
0
0
и
0
0
0
0
0
0
м
и
°
0
0
0
0
0
0
0
0
0 10 10 10 10 10 10 10 10 10 10 10 10 10 10
10
0 10 10 10 10 10 10 10 К) 10 !(] 10 10 10 10
10
и
0
0
0
0
()
{)
0
0
0
n
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1)
0
0
0
0
0
0
0
0
0
0
0
0
1
°
0
0
0
0
0
0
0
0
0
0
0
°
0
0
0
°
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
и
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
и
0
0
0
0
0
0
0
0
0
0
0
0
и
0
0
0
0
0
0
0
0
0
0
0
(J
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
A
о
0
0
0
0
0
п
(J
0 10 10 10 10 10 10 10 10 10 10 10 10 К) 10 10
0
и
0
0
1)
и
о
0 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
0
0
0
0
0
и
о
0 10 10 10 10 10 10 10 10 ш 10 10 !0 10 10 К)
0
0
0
0
A
а
0
0 10 10 10 11) 10 10 III 10 10 10 10 10 10 10 ш
0
0
0
0
0
и
0
0
0
0
0
0
A
fl
0
0
0
0
0
0
и
0
0
0
0
0
0
0
A
0
0
0
0 to 10 10 10 10 10 10 10 1С) 10 10 10 ш 10
10
0 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
0 10 10 10 10 10 10 10 10 10 10 10 10 10 10
10
0 К) 10 10 10 10 ю 10 10 10 10 10 10 10 10
10
0 10 10 11) 10 И) 10 10 10 10 10 10 10 10 10
10
0
0
0
0
(J
1)
и
0
0
0
и
1>
0
A
0
0
0 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
0
0
0
0
0
1)
0
0
0
0 10 10 10 К) 10 10 10 10 10 10 10 10 10 10 ш
0
0
0
0
и
и
0
0
0
0
0
0
0
0
0
0 10 10 1С) 10 10 10 10 10 10 10 10 10 10 10 10
0 10 10 10 10 10 10 10 10 10 10 10 10 10 К) К)
0 10 10 10 10 10 10 10 10 10 10 10 10 10
10 10
0 10
0 10 10 10 10 10 10 10 10 10 10 10 10 10
0
0
0
0
0
A
0
и
0
0
0
0
и
о
0
0
0
A
0
0
0
0
0
0
0
0
A
0
0 10
0 10 К) 10 10 10 10 10 10 10 10 10 10 10
0
0
0
0
0
0
0
0
0
и
0
и
0
0
0
0
0
0
и
0
о
и
0
0
0
0
0
и
0
0
0
I)
0
0
0
0
0
С)
0
0
0
0
0
0
о
и
0
0
0
0
0
и
0
A
0
(J
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1)
0
0
0
0
0
0
0
и
0
0
0
0
0
0
0
и
и
0
0
0
0
0 0
0
0
0
0
0
0
0
п
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
и
0
С
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
с
0
с
0
0
0
0
0
0
0
0
0
С
0
с
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
с
с
0
с
0
0
0
0
0
0
0
0
0
t
0
0
0
0
0
0
0
0
0
С)
0
0
0
0
0
0
0
0
с
с
0
с
0
0
0
0
0
0
0
0
0
f1
0
0
0
0
0
0
0-
0
0
0
0
0
0
0
0
0
0
0
(j
с
0
с
0
0
0
0
0
0
0
0
0
С1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
t
t
0
с
0
0
с
0
0
0
0
0
0
С)
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
с
с
0
1
0
0
с
с
0
0
0
0
0
С)
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
!
1
1
1
1
1
1
1
1
1
2
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
!
1
2
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
2
2
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
2
1
1
1
2
2
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
2
2
1
1
1
2
2
0
0
0
0
0
2
л
1
1
2
2
2
0
0
0
0
1
1
2
2
2
0
0
0
0
-
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
2
z=
—
Cjc H- >*
Дчя последовательных пикселов, лежашпх на
rj
326
сканирующей строке,
=2-3/4
Гл. 4. Удаление невидимых линий
и
уравнением
120)/4
—
поверхностей
2
.
.
2
.
i
.
1
1
-
0
0
и
0
0
0
0
0
0
1
2
1
1
2
.
2
2
1
1
1
2
2
2
0
0
0
0
2
1
1
2
2
2
2
0
0
0
2
2
2
2
0
0
0
J
0
0
0
0
0
0
0
0
0
0
1
1
]
1
\
2
»
1
!
2
0
0
0
0
0
0
0
0
0
0
1
1
1
2
!
2
1
!
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
2
2
2
2
0
0
и
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
2
2
2
2
2
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
I
1
1
1
1
1
1
1
0
0
0
2
2
0
0
1
1
1
1
1
1
0
0
0
0
0
0
0
1
1
1
1
1
0
0
0
0
0
0
0
1
1
1
1
1
0
0
0
0
0
и
0
¦
0
0
0
0
0
0
0
0
0
1
1
1
:1
1
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
1
1
1
1
1
1
0
0
0
0
0
0
0
¦
Зх + y + 4z- 120 = 0
на
внутри
и
0
Tpeyi ол ьника:
Значит, глуоина треугольника в любой его точке задается
центр лежит
¦
получаем уравнение пло-
плоскости
которого
и
т. е. при
х^ < \ < х2- Преобразование в растровую форму
границе треугольника,
состояние
новое
бупиксела со значением с-буфера дает
сравнение глубины каждого
буфера кадра:
0
Напомним, чго в левом нижнем углу находится пиксел @. 0).
Использ\я метоа Ныоэла (см. разд. 4.3, пример 4.3).
у
пиксел,
л
0
0
тот
чго активируется
Напомним,
0
0
0
B5.5, 23.5), B5.8, 22.5),
строками дает спедуюшие пары коорлинат B5.2, 24.5),
19.5), B7.2, 18.5), B7.5, 17.5). B7.8. 16.5), B8.2, 15.5),
B6.2, 21.5), B6.5, 20.5). B6.8,
11.5), B9.8, 10.5) для строк от 24 до 10.
B8.5, 14.5), B8.8, 13.5), B9.2, 12.5), B9.5,
или
о
0 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
0 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
0
0
с
с учетом соглашения о половине интервала между соседними сканирующими
развертки
0
0
0
0
()
0
С)
0
0
С
(}
()
(.1
0
()
0
'1
0
(1
с
(]
0
(1
0
0
0
с)
0
0
11
С
0
1
1
0
с1
0
i
!
1
Вычисление пересечений сторон треугольника со сканирующими строками раз-
0
i
0
гакежо:
0
0
0
0
0
0
и
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
[)
0
0
0
0
0
0
0
0
0
0
0
0
D
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
J
0
0
<Э
(3
0
(3
0
0
0
0
0
0
0
0
0
0
0
D
0
0
0
0
(J
I)
0
<)
0
и
0
0
0
0
0
0
0
0
0
D
0
0
0
0
0
1J
1
0
(¦)
о
0
0
0
0
0
0
0
0
0
0
и
D
0
0
0
0
0
1J
[)
0
1J
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
D
D
0
1D
0
0
0
0
0
0
0
0
0
0
0
1
имеет место
После обработки треугопьника состояние 7-буфера таково:
4.7. Алгоритм, использующий с-
1
If
1
1
1
0
I
1
0
,
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0 1Э
1[)
(Э
0
0
0
0
0
0
0
(]
0
0
0
0
0
0
()
(Э
(1
0
0
0
0
0
0
0
о
0
0
с
f)
0
0
()
()
0
0 0
()
()
0
0
0
0
0
0
0
о
V
°
0
0
0
0
0
0
0
0
0
0
0
0
0
сI
0
0
С)
()
0
0 ()
()
()
0
0
0
0
0
0
0
о
0
0
0
0
0
0
0
0
0
0
0
с
0
0
С)
С
0
0 ()
()
()
0
0
0
0
0
0
0
о
0
0
0
0
о
для построения сечений поверхностей.
0 0 0 0 С с 0 0 С) () f) 0 0 0 0
0 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 0 0 0
0 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 5 0 0
0 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 5 0 0
0 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 6 0 0
0
0
0
о
сравнения:
0
0
0
о
0
0
0
о
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
о
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
с
0
С1
0
С
0
0 С)
С)
()
0
0
0
0
0
0
0
0
0
0
о
0
0
0
0
0
0
0
о
0
0
0
0
0
0
0
0
0 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
°
0
0
0
0
0
0
0
0
6
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0 10 10 10 10 10 10 10 10 10 11 10 10 10 10 10
0 !0 10 10 10 10 10 10 10 12 11 10 10 10 10 10
6
6
0
0
0
0
0
0
0
0
0
0
0
0
0
0 10 10 10 10 10 10 10 13 12 И 10 10 10 ш 10
7
6
5
0
0
0
0
6
5
0
0
0
0
0
0
0
0
0
0
0 10 10 10 10 10 10 14 13 12 11 11 10 10 10 10
7
6
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0 10 10 10 10 10 15 14 13 12 12 11 10 10 10 10
7
6
6
0
0
0
0
°
0
0
0
0
0
0
0
0
7
7
6
5
0
0
0
°
0
0
0
0
0
0
0
0
8
7
6
5
0
0
0
0
0
0
0
0
0
0
0
0
0 10 10 10 10 10 10 14 13 13 12 11 10 10 10 10
0 10 10 10 10 10 10 10 10 10 12 11 11 10 10 10
0 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
8
7
6
6
0
0
0
z(x, у)
где 7сечения
том,
что
лежат
—
?-буфер,
видимым, хоро-
также
можно
и
применить
Изменится только оператор
Z6y<J)ep(x, у) and z(x, у) ^ гсечения
в
глубина искомого сечения. Эффект заключается
>
остаются только такие элементы
поверхности, которые
на самом сечении или позади него.
СПИСОК
4.8. АЛГОРИТМЫ, ИСПОЛЬЗУЮЩИЕ
ПРИОРИТЕТОВ
обсуждавшихся алгоритмов удаления невидит. е. глуневидимых линий и поверхностей устанавливались приоритеты,
При реализации
всех
0
0
0
0
0
0
0
0
0
0 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
8
7
7
6
5
0
0
°
0
0
0
0
0
0
0
0
0
0
6
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
°
0
0
0
0
0
0
0
0
0 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
0 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
0 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
0
0
0
0
0
0
0
наблюдения. Алглубины объектов сцены или их расстояния от точки
пытаются получить
Алгоритмы, использующие список приоритетов,
по глубипреимущество посредством предварительной сортировки
состоит в том, чтобы
глубине или приоритету. Цель такой сортировки
получить окончательный список элементов сцены, упорядоченных
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0 10 10 10 1 0 10 10
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0 0
0
0
0
0
0
0
0
0
0
0
! i1
°
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0 0
0
0
0
0
0
0
0
0
0
0
i
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0 0
0
0
0
0
0
0
0
0
0
0
о
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0 0
0
0
0
0
0
0
0
0
0
0
о
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
использующий
Алгоритм,
W
0
i
Линия пересечения, на которой треугольник становится
в буфере кадра.
хорошо отражена
B2.5, 12.5).
0
0
U
ребрами треугольника происходят в точках B0, 20)
0
0 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
0 10 10 10 0 1С 10 10 10 10 10 10 10 10 10 10
1'1
с
0
0
'
Пересечения этой прямой
0
1
1
(3
0
°
1
()
()
0
V
1
с
0
0
'
I
0
С
0
°
II
1
0
()
0
1
1
0
с
0
о
ill
0
С
0
°
|
0
°
1
;
0
0
0
0
0
0
0
по
0
0
0
0
0
0
0
наблюдения. Если такой список окончателен,
0 10 10 10 10 10 10 10 10
0
0
0
0
0
0
0
будут взаимно перекрывать друг друга. Тогда можно
с элемента, наибовсе элементы в буфер кадра поочередно, начиная
Для примера рассмотрим пиксел B0, 15). Оценка z
Z
-
-[C), B0.5) +
15.5
-
на расстоянии от точки набприоритету глубины, основанному
0
I20J/4
в
=
43/4
=
записать
не
iee
удаленного
наблюдателю элементы
центре этого пиксела дает
10.75
то никакие два элемента
элементах
в
от
точки
наблюдения. Более близкие к наблюдате-
будут затирать информацию о более далеких
буфере кадра.
элемен-
Поэтому задача об удалении невидимых
по-
можно
поверхностей решается тривиально. Эффекты прозрачности
включить в состав алгоритма путем не полной, а частичной коррек-
корректировки содержимого буфера кадра
прозрачных элементов
с
учетом
атрибутов прозрач-
(см. [4-16] и разд. 5.8).
Сравнивая его со значением г-буфера в точке B0, 15) после обработки
прямоуголь-
Для простых элементов сцены, например для многоугольников,
прямоугольника, видим, что треугольник здесь расположен
перед прямоугольником. Поэтому
значение буфера кадра в точке B0, 15) заменяется на 2.
Поскольку в нашем примере
этот метод иногда называют алгоритмом художника, поскольку
которым художник создает картину.
аналогичен тому способу,
г-буфер состоит лишь из 4 битовых тоскостей, он может содержать числа только в
0 до 15. Поэтому значение z
округляется до ближайшего целого числа.
диапазоне от
В результате в ячейку B0, 15)
г-буфера заносится число 11.
Линия пересечения треугольника с прямоугольником
получается
подстановке z
=
10 в уравнение плоскости, несушей
треугольник. Результат
Зх + у
328
Гл. 4. Удаление невидимых линии
-
и
80
=
О
поверхностей
при подстановтаков:
он
Сначала художник рисует фон, затем предметы, лежащие на средсреднем расстоянии, и, наконец, передний план. Тем самым художник
решает задачу об удалении невидимых поверхностей, или задачу
приовидимости, путем построения картины в порядке обратного
приоритета.
4.8. Алгоритмы, используюшие список приоритетов
R
a
b
b
a
Рис. 4.51. Установление приоритетов для многоугольников.
Рис. 4.52. Цитически перекрывающиеся многоугочьники.
Для простой сцены, вроде той,
что показана на рис.
4.51, а,
список приоритетов можно получить
непосредстНапример, эти многоугольники можно упорядочить по их
окончательный
состав алгоритма Ньюэла
непосредственно.
ниже.
максимальному или минимальному значению координаты z. ОднаОднако уже для сцены, показанной на
рис. 4.51, Ь, окончательный списписок приоритетов по глубине невозможно
получить простой сортисортировкой по z. Если Р и Q с рис. 4.51, b упорядочены по минимальминимальному значению координатыz
(?min), окажется, что/5 в списке приоприоритетов
по
глубине будет стоять перед Q. Если их записать в бу-
буфер кадра в таком порядке, то получится, что Q частично экраниэкранирует Р. Однако фактически Р частично экранирует Q.
Правильный
порядок в списке приоритетов будет тогда, когда Р и Q поменя-
—
Ньюэла
—
Санча, который излагается
В ачгоритме динамически вычисляется новый список приори-
обработкой каждого кадра сцены. Не накладывается
и на тип многоугольниникаких ограничений на сложность сцены
сцены. Первоначальный
многоугольников, используемых для описания элементов
Санча был предназначен для обраНьюэла
алгоритм Ньюэла
приоритетов перед
—
—
обработки трехмерных тел. Это расширение
многогранников. Оно может, кроме того,
смешанных типов в рамках одной сцены.
Алгоритм Ньюэла
—
Ньюэла
—
не
ограничено рамками
обрабатывать тела сме-
Санча для случая многоугольни-
многоугольников
поменяются местами.
Другие трудности показаны на рис. 4.52. Здесь многоугольники
циклически перекрывают друг друга. На
рис. 4.52, а Р находится
впереди Q, который лежит впереди R, который в свою
очередь нанаходится впереди Р. На рис. 4.52, b P
экранирует Q, a Q экранируэкранирует Р. Аналогичное циклическое
экранирование возникает при пропротыкании многоугольников;
например, на рис. 4.50 показано, как
треугольник протыкает прямоугольник. Там прямоугольник
экраэкранируется треугольником, и наоборот. В обоих примерах окончаокончательный список
из
положения
многоугольников
по
приоритетов невозможно установить сразу. Выход
заключается
линиям,
тех пор, пока не
в
циклическом
разрезании многоуголь-
образованным пересечениями их пчоскостей до
будет получен окончательный список приоритетов.
Такие линии показаны пунктиром на
рис. 4.52.
Ньюэл М., Ньюэл Р.и Санча
[4-16] предложили специальный
метод сортировки для разрешения конфликтов, возникающих
при
создании списка приоритетов по
глубине. Этот метод включен в
330
и
Гл. 4. V деление
невилимы*
линий
понерхноетей
Сформировать предварительный
используя
в
качестве
многоугольника.
ключа
Первым
в
список
приоритетов
сортировки значение zmiri
списке
по
глубине,
для каждого
будет многоугольник
с
мини-
лежит дальше всех
zmin. Этот многоугольник
на положиот точки наблюдения, расположенной в бесконечности
положительной полуоси z. Обозначим его через Р, а следующий в списке
минимальным
значением
многоугольник
—
через
Q.
Для каждого многоугольника Р из списка надо проверить его отноотношение с Q.
ближайшая вершина Р {PZmax) будет дальше от точки
т. е.
наблюдения, чем самая удаленная вершина Q (QZmin),
За^ ^zmax' т0 никакая часть Р не может экранировать Q.
Если
femin
Занести Р в
буфер кадра (рис. 4.51, а).
Если QZmin < P,max, то Р потенциальное экранирует не только Q,
но также и любой другой многоугольник типа Q из списка, для
4.8. Алшритмы,
использующие список приоритетов
которого QZmin
<
Q, значит, обнаруобнаружена
циклического
экранирования (рис. 4.52).
ситуация
В этом случае Р разрезается плоскостью, несущей Q, исход-
Если сделана
Л:™*- Тем самым образуется множество [Q].
Однако Р может фактически и не экранировать ни один из этих
многоугольников. Если последнее верно, тоР
можно заносить в
следующих
по
возрастанию
их
вычислительной
вопросов. Если отположительным, то Р не может
любой вопрос будет
экранировать [Q]. Поэтому Р сразу же заносится в буфер кадра.
ответ
на
Вот
заносятся в список. Затем тесты повторяются для нового списка.
сложно-
Эти тесты ниже формулируются в виде
сложности.
эти тесты:
Верно ли, что прямоугольные объемлющие оболочки Р и Q
не
перекрываются по*?
что
Р
целиком лежит
по ту
сторону плоскости,
несущей Q, которая расположена дальше от точки наблюденаблюдения
Этот шаг предотвращает зацикливание алгоритма.
Взятые вместе, первые два из приведенных выше вопросов образуобразуют обычный габаритный тест для прямоугочьных оболочек (см.
разд. 2.13 и 3.1). Поскольку многие сцены не являются квадратнывеквадратными, то прямоугольные объемлющие оболочки будут с большей
вероятностью перекрываться в одном из двух возможных направче-
Верно ли, что прямоугольные оболочки Р и Q не перекрываперекрываются по .у?
Верно ли,
ний. Когда многоугольники преимущественно горизонтальны
оказы-
записан выше,
предполагается,
Верно ли,
значения.
Каждый
из
этих
тестов
Q
не
перекрываются?
применяется
к
каждому
элемен-
[Q]. Если ни один из них не дает положительного ответа
и не заносит Р в буфер
кадра, то Р может закрывать Q.
элементу
Поменять Р
и
Q
местами,
пометив позицию
Q
в
списке.
поменять местами. Если
то
же сцена
является
квадратной или ее струк-
порядок применения этих тестов не имеет зна-
Третий и четвертый тесты можно реализовать с использованииспользованием
некоторых из ранее обсуждавшихся тестов видимости (см.
разд. 3.16 и пример 3.23). Поскольку уравнение несущей плоскости
нормаль к ней часто известны для каждого многоугольника, то
удобно применить простой тест подстановки. Если исследуется отили
Повторить тесты с новым списком. Это дает положитель-
отношение
положительный результат для сцены с
рис.
вершин
4.51, Ь.
ширина сцены больше ее высо-
многоугольники преимущественно являются горизонтальгоризонтальными. Если высота сцены больше ее ширины, то тесты следует по-
структура изоморфна,
и
что
т. е.
Верно ли, что Q целиком лежит по ту сторону плоскости,
несущей Р, которая ближе к точке наблюдения (рис. 4.53,
Ь)?
проекции Р
или
вертикальны, то использование одного из этих двух тестов
он
оказывается более эффективным. В алгоритме в той форме, в которой
высоты,
(рис. 4.53, а)?
что
переставить
исходный многоугольник Р удаляется из списка, а его части зано-
буфер кадра. Для ответа на этот вопрос используется серия тетестов,
попытка вновь
то координаты
подставляются в уравнение плоскости, несущей Р. Если
многоугольника
Q
все знаки
Q к многоугольнику Р,
результатов подстановки совпадают,
то
Q целиком ле-
Здесь, так же как и в других алгоритмах
удаления невидимых поверхностей, обсуждавшихся ранее, если это
лежит по одну сторону от Р.
х
нужно, производится
граней. Более полно эти
предварительное
удаление
нелицевых
гра-
соображения проиллюстрирует пример 4.20
для случая многоугольников, конфликтующих в пространстве.
Пример 4.20. Проверка отношений между многоугольниками,
конфликтующими в пространстве
Рассмотрим три треугольника: Р, Qx и Q2 (рис. 4.54). Вершины этих треугольников
таковы:
7.
Р:
a
Q\ :
Рис. 4.53.
Тесты лля перекрывающихся
многоугольников.
332
4. Удаление невм шмы\
Гл.
линий и
поверхностей
Q2 :
4.8. Алгоритмы,
A. 1, 1). D, 5. 2), E. 2,5)
B, 2. 0.5), C. 3. 1.75). F. 1, 0.5)
@.5. 2, 5.5). B. 5, 3). D, 4. 5)
использующие список приоритетов
r.F5
=
15B)
T.F.h
=
15D)
-
8E)
-
6
13C)
8D)
13E) + 6
=
-43
=
-31 < О
^
0
Вновь знаки всех пробных санкций совпали; поэтом} трем ельник Q2 целиком лежит
по оану сторону от Р.
На рис.
4.54, d хорошо видно, что <2Л
4.54.d
также хорошо видно,
лежит по ту сторону от плоскости треда
«ьше
от
точки
наб
Р,
которая
нодения, расположенной в бесконечности
треугольника
на положительной полуоси -. Сле юьатсльно,
частично экраиируе1ся Р. На
Q}
Q, лежит по т> сторону от плоскости iреближе
к
Р,
которая
указанном гочке наблюдения. Поэтому Q, частично
угольника
рис.
что
экранирует Р.
I
о
0
I
I
I
I
I
4
2
0
6
4
6
u
2
О
Из приведенного примера следует, что
b
a
Если
6
0
0
знаки
совпадают
многоугольника
этот
пробной функции для
знаки
вершин
некоего много-
или
нулю,
положительны
многоугольник находится
от плоскости
Если
и
всех
дальней
с
равны
то
(невидимой) стороны
Р.
пробной функции для всех
вершин
некоего много-
многоугольника совпадают и отрицательны или равны нулю, то этот
многоугольник
значения
d
Рис. 4.54. Многоугольники, конфликтующие в
плоскости
стороны
пробной функции для каждой вершины
равны нулю,
многоугольника
с
(видимой)
от
Р.
плоскости
Если
ближней
с
расположен
то
этот
многоугольник
лежит
многона
пло-
Р.
Последний тест из приведенной серии особенно сложен с вычисли-
пространстве.
вычислительной точки
треоуется определить, верно ли. что ?), и Q, целиком лежат по одну сторону от Р.
тгг ортогональные проекшш,
показанные
"на рис. 4.54,
пс дают
ясного ответа.
Уравнение плоскости треугольника Р имеет вид
l5.Y-8v- 13г + 6
факта,
задачи уже обсуждался ранее в рамках описания алгоритма
ка
=
многоугольников вдоль линии пересечения несущих эти многоугольмногоугольники
T.F.=
15\-8у- 137 + 6
=
|5{2>
-
8B)
-
13@.5) + 6
можно
воспользоваться
алгоритмом
отсечения
Ходжмена (см. разд. 3.16). Здесь
плоскость, несущая Q, используется как секущая. Каждое ребро Р
отсекается плоскостью Q, при этом формируются два- новых мно13.5 > О
=
r.F.2= 15C)-8C)- 13A.75) +6
плоскостей
многоугольников Сазерленда
?, в пробную функцию дает:
r.F.i
Варно-
(см. разд. 4.4).
Если имеет место циклическое экранирование, то для разбиения
0
11робпая функция Т. F. равна
1одсгаиовка вершин
зрения, поскольку требует точного определения того
что проекции Р и Q не пересекаются. Метод
решения этой
=
многоугольника.
Для
—
ребра Р с плоскоплоскостью Q можно воспользоваться
алгоритмом отсечения Кируса
Бека (см. разд. 3.11).
4.2^ >()
поиска
пересечения
каждого
—
r.F.3= 15Fj
-
8(lj
-
13@.5)+ 6
=
81.5 > 0
Поскольку знаки всех пробных функций положительны, то треугольник
лежит по одну сторону от Р.
Подставляя вершины
T.F.a
324
15@.5)
Гл. 4. Учаленис невидимых
-
8B)
шний
-
и
13E.5) + 6
=
поверхностей
В алгоритме Ньюэла
—
Ньюэла
решить задачу удаления невидимых
Q2 в пробную функцию, имеем:
=
Q ' целиком
—
Санча делается попытка ре-
поверхностей динамически путем
обработки всех многоугольников сцены для каждого искомого
-74 < 0
Если же сцена сложна,
4.8.
Алгоритмы,
а частота
мспм.чыилщие
«ni
-
пч
кадров велика,
приоритетов
как
у
кад-
систем
=
О
<7\F.)i
=\
л- =
О
<r.F.J
=
v
а:
v
Точка наблюдения, лежащая
С
D
/
+
а
3,2,1
1.2,3
на
-
прямой 2у
х
=
0. например B0, 10), дает:
(Г.Г.)|
=
10 > 0
U'.F.h
=
10-20= -10 < 0
Значит, эта точка наблюдения тежиг
2.1.3
—
v-.v
в
области D. Из рис. 4.55, b видно, что список
кластерных приоритетов таков: 3, 1,2.
Простейшим клаКластеры могут
Рис. 4.55. Кластерные приоритеты.
Кластеры используются для разбиения сцены.
кластером является единственный многоугольник.
моделирования в реальном времени, то вычислительной мощности
полигональные или неполигональные
представлять собой сложные
свои
поверхности и тела, для каждого типа которых существуют
обычных универсальных ЭВМ может не хватить (см. [4-18]). Одна-
методы
Однако во
многих
случаях моделирования
только точка
наблюдения. Шумейкер и др. [4-19] удачно предложи-
предложили предварительно вычислять в автономном режиме
более
общие приоритетные характеристики, такие,
некоторые бо-
как
список
прио-
как показано
Ньюэлом
[4-17].
приоритеты отдельных
не зависят от положения точки наблюдения [4-19,
В рамках кластеров некоторых
в
реальном времени, наприимитации
посадки самолета, сцена статична, а меняется
например при
удаления невидимых линий,
типов
многоугольников
4-20]. Это обстоятельство является одним из основных достоинств
Шумейкера. Оно позволяет заранее вычислять полный
кластер,
приоритетов. На рис. 4.56, а показан двумерный
алгоритма
список
приоритетов для моделирования упомянутых выше статическях сцен.
В алгоритме Шумейкера в сцене допустимы только выпуклые
многоугольники. Такие многоугольники группируются в кластеры,
для которого можно заранее вычислить индивидуальные приорите-
которые являются линейно разделимыми.
многоугольником любого другого многоугольника для
линейно
разделимыми,
если
существует
Кластеры считаются ли-
такая
разделяющая плоплоскость, которая проходит между ними, не пересекая их. Несколько
двумерных кластеров
плоскости
4.55, а. Разделяющие плобуквами а и C. Они разбивают сцену на четыре
помечены
области А у
показано
на
рис.
В, Су D. Точка наблюдения может располагаться в лю-
любой из этих областей. На рис. 4.55, b показана древовидная
струкструктура, устанавливающая приоритеты кластеров в сцене. Эти прио-
приоритеты
можно
вычислить
приоритеты
многоугольников.
устанавливается
в
произвольной точки
Приоритет каждого многоугольника устанав-
зависимости
от
возможности
наблюдения. Чем большее
экранирования данным
число
произволь-
многоугольников
мо-
выше его приоритет.
экранировать данный многоугольник, тем
в рамках кластера
При установлении приоритетов многоугольников
может
заданной точки наблюдения прежде всего удаляются нелицевые
затем
многоугольники. Оставшиеся многоугольники располагаются
для
в
приоритетном порядке,
как показано на
рис. 4.56, b
и
с.
заранее для любой* точки
наблюдения в
двумерной плоскости. Подстановка координат точки наблюдения в
уравнения разделяющих плоскостей порождает
узел дерева кластерных приоритетов. Затем для каждого кластера в
обратном порядке приоритетов решается задача удаления невидиневидимых
1
соответствующий
поверхностей.
3
7
1
1
2
1
3
Точка
Пример 4.21. Кластерные приоритеты
наблюдения
Предположим, что разделяющие плоскости а п 0, показанные на рис. 4.55, пересекапересекаются в начале координат.
плоскость у
=
этих плоскостей
336
xi
обе
Далее предположим, что а
m ос кости
перпендикулярны
и соответствующие им
—
это тоскость у
плоскости
чертежа.
пробные функции таковы:
Гл. 4. Удаление невидимых линий
и
поверхностей
=
0, а /3
—
Уравнения
Рис. 4.56. Приоритеты в рамках кнастера.
4.8. Алгоритмы, использующие список приоритетов
Алгоритмы, использующие список приоритетов, работают как в
пространстве
объекта, так и в пространстве изображения. В част-
формирование списка приоритетов ведется в пространстве
объекта, а результат заносится в буфер кадра в терминах пропространства изображения. Использование буфера кадра является кричастности,
критическим для данного алгоритма.
Экран
Поскольку подобно алгоритмам Варнока и z -буфера в алгориталгоритмах, строящих
обрабатываются
в
список
приоритетов, многоугольники
произвольном
порядке,
применение
обрабатыва-
методов
устранения
лестничного эффекта к результирующему изображению затруднено.
Плоскость
Однако для этой цели здесь применим метод постфильтрации (см.
2.25), используемый также в алгоритмах Варнока и z -буфера.
Алгоритмы, строящие список приоритетов, использующие
Z -буфер и относящиеся к типу Варнока, могут также применяться и
для удаления невидимых линий. При их использовании в этом какачестве ребра каждого многоугольника заносятся в
буфер кадра с
сканирования
Плоскость сканирования
разд.
одним
атрибутом,
при
многоугольника заносится в
подходе
внутренняя область каждого
чем
много-
буфер кадра с атрибутом фона. При таком
многоугольники, которые находятся ближе к точке наблю-
наблюдения, «заслоняют» ребра многоугольников, которые расположены
дальше от нее.
плоскость.
Рис. 4.57. Сканирующая
лах этого окна,
На рис.
плоскости с много-
4.57, b представлено пересечение сканирующей
что задача удаления невимногоугольниками. Этот рисунок показывает,
к задаче о том, какой отрезок видим
невидимых поверхностей сводится
для каждой точки сканирующей строки.
что здесь можно неповзгляд может показаться,
первый
На
непосредственно
4.9. АЛГОРИТМЫ ПОСТРОЧНОГО СКАНИРОВАНИЯ
образованного сканирующей плоскостью.
формирования упорядоченного
применить алгоритм
ребер, обсуждавшийся в разд. 2.19. Однако
списка
из
рис.
4.57, b
Наприприведет к некорректным результатам.
сканирующей строки, показанной на рис. 4.57, существу-
ясно видно, что это
Алгоритмы Варнока, z -буфера и строящий список приоритетов об-
Например,
обрабатывают элементы сцены
существуют
четыре активных
Пересечения
этих
или
многоугольники в порядке, корый не связан с процессом визуализации. В то же время алгоритмы
построчного
сканирования,
впервые
предложенные
Уайли
и
др.
[4-21], Букнайтом [4-22, 4-23, 4-24] и Уоткинсом [4-25], обрабатываобрабатывают
сцену в порядке прохождения сканирующей прямой. Эти
алгоритмы оперируют в пространстве изображения.
алго-
для
ребер
По4.57, Ь; список упорядоченных ребер обозначен цифрами.
к тому, что пикселы между
Попарная выборка пересечений приводит
4 активируются. В то же
точками 1 и 2, а также между точками 3 и
рис.
2
время пикселы между точками
образом,
построчным сканированием являются обобщением изложенных там
методов. Эти алгоритмы сводят трехмерную задачу
удаления неви-
многоугольника.
том
3
не
активируются. Таким об«Дыра»
образовалась
пересекла
месте, где сканирующая строка фактически
в
два мно-
двух разделах обсуждаются два коркорректных алгоритма построчного сканирования.
В
следующих
линий и поверхностей к двумерной. Сканирующая плоскость
определяется точкой
наблюдения, расположенной в бесконечности
положительной полуоси z, и сканирующей строкой так, как попоказано на рис. 4.57. Пересечение сканирующей плоскости и
на
трех-
трехмерной
сцены
определяет
окно
в
размером
одну сканирующую
строку. Задача удаления невидимых поверхностей решается в преде-
4.10. АЛГОРИТМ ПОСТРОЧНОГО СКАНИРОВАНИЯ,
ИСПОЛЬЗУЮЩИЙ s-БУФЕР
ко-
Одним из простейших алгоритмов построчного сканирования,
является
который решает задачу удаления невидимых поверхностей,
специальный
338
и
получается неверный результат.
Растровая развертка отдельных многоугольников обсуждалась в
гл. 2. Алгоритмы удаления невидимых линий и
поверхностей с по-
невидимых
со
ребра в списке активных ребер. Пересечена
сканирующей строкой показаны точками
Гл.
4. Удаление невидимых линий
и
случай алгоритма ^-буфера, который обсуждался
поверхностей
4.10.
Алюритм,
используюший z-буфер
в
предыдущем разделе. Будем называть его
сканирования
с
окно
алгоритмом построчного
г-буфером [4-26]. Используемое в этом алгоритме
визуализации имеет высоту в одну
сканирующую строку и
ширину во весь экран. Как для
буфера кадра, так и для г-буфера
требуется память высотой в 1 бит, шириной в
горизонтальное разразрешение экрана и глубиной в зависимости от
требуемой точности.
Обеспечиваемая точность по глубине зависит от
значений, которые может принимать
иметь
размер 1x512x24 бит,
Концептуально
сканирующей
z.
Например, буфер кадра может
г-буфер
1x512x20 бит.
строки
алгоритм достаточно прост. Для каждой
буфер кадра инициализируется с фоновым
—
двукаждого многоугольника
если
они
сцены,
супересечения образуют пары, как указывалось
проекцией
существуют.
Эти
^-буфером формулируется следующим образом:
Подготовка информации:
Для каждого многоугольника определить самую верхнюю
ска-
сканирующую строку, которую он пересекает.
Занести
многоугольник
в
группу
у,
соответствующую
этой
сканирующей строке.
—
интенсивности, а г-буфер
с минимальным
значениЗатем определяется пересечение
сканирующей строки с
двумерной
сканирования с
z.
этот
значением
значением
а
диапазона значе-
С использованием этих методов алгоритм построчного сканиро-
Запомнить для каждого многоугольника,
списке,
как
минимум
следующую
например
в
информацию: Ау
связном
—
число
этим многоугольсканирующих строк, которые пересекаются
многоугольником; список ребер многоугольника; коэффициенты (а, Ь, с, d)
уравнения
плоскости
многоугольника;
визуальные
атрибуты
многоугольника.
в
разд.
2.19.
При рассмотрении
каждого пиксела на
сканирующей
строке в интервале между концами
его
пар
глубина сравнивается с
глубиной, содержащейся
Если глубина этого
в
соответствующем элементе г-буфера.
пиксела больше глубины из
z-буфера, то
рассматриваемый отрезок
рас-
будет текущим видимым отрезком. И сле-
следовательно, атрибуты многоугольника,
соответствующего данному
отрезку, заносятся в буфер кадра в позиции данного
пиксела; соот-
соответственно
обработки
всех
корректируется и г-буфер в этой позиции. После
обрамногоугольников
сцены
буфер кадра размером в одну
сканирующую строку содержит решение задачи
удаления невидиневидимых
поверхностей для данной сканирующей
на экран
т. е.
сканированием,
дисплея в порядке, определяемом
слева
растровым сканировани-
направо. В этом алгоритме можно использовать ме-
методы устранения
и на
строки. Он выводится
ступенчатости, основывающиеся как на пре-, так
постфильтрации.
Однако практически сравнение каждого
Решение задачи удаления невидимых поверхностей:
Инициализировать буфер кадра дисплея.
Для каждой сканирующей строки:
Инициализировать буфер кадра размером с одну сканируюсканирующую строку, заполнив его фоновым значением.
Инициализировать г-буфер размером с одну сканирующую
строку значением гт|п.
Проверить появление в группе у сканирующей строки ноновых многоугольников. Добавить все новые многоугольники
к
списку активных многоугольников.
ак-
Проверить появление новых многоугольников в списке
новых
активных многоугольников. Добавить все пары ребер
многоугольников
многоугольника
с
каж-
к списку активных
ребер.
каждой сканирующей строкой оказывается
неэффективным. Поэтому
используется некоторая разновидность списка
упорядоченных реребер, которая обсуждалась в разд. 2.19. В
частности, для повыше-
ребер многоугольника
удаляется из списка активных ребер, то надо определить,
эффективности этого алгоритма применяются
групповая
сортировка1) по оси у, список активных многоугольников и список
активных ребер.
активных
повышения
|}
Групповая сортировка является одной из
Мир, 1978).— Прим. ред.
Гл. 4. Удаление невидимых линий
и
сохранился
поверхностей
ли
соответствующий многоугольник
в
списке
многоугольников. Если сохранился, то укомплек-
укомплектовать пару активных
ребер этого многоугольника в списке
ребер. В противном случае удалить и второй элеэлемент пары ребер из списка активных ребер.
активных
ребер содержится следующая информаинформация для каждой пары ребер многоугольника, которые пере-
В
разновидностей
распределяющей
сортировки (см. Кнут Д. Искусство
программирования для ЭВМ. Том 3. СортировСортировка и поиск.— М:
340
Если какой-нибудь элемент из пары
списке активных
пересекаются
сканирующей строкой:
4.10. Алгоритм, использующий z-буфер
—
пересечение левого ребра из пары с текущей скани-
л'л
1/2, у + 1/2) > 2буфер(лО, то занедля одной
занести атрибуты многоугольника в буфер кадра
строки. Если z(x +
сканирующей строкой.
—
приращение хп
в
интервале между соседними ска-
сканирующей
z(x + 1/2, у
сканирующими строками.
—
число
сканирующих строк, пересекаемых левой
стороной.
X..
—
пересечение правого ребра из
пары с
текущей ска-
z,,
многоугольника
в
центре пиксела,
Az- приращение по z вдоль сканирующей
равно а/с при с
и
активных
соответствующий
соот-
списке и
строками. Оно равно b/с при с
Ф
0.
то
Инициализировать z со значением гп.
Для каждого пиксела, такого,'что
хп ^ х 4- 1/2 ^ хп,
вычислить глубину z( х + 1/2,
у + 1/2) в его центре,
используя уравнение плоскости многоугольника. Для
сканирующей строки это сведется к вычислению прира-
у
=
у
-4-
А у
ллстар
v
лпстар
Дх
п
используя
плоскости
уравнение
этого
многоугольника.
Между сканирующими строками это сведется
вычислению
ис-
к вычисле-
приращения:
Если
Сократить список активных многоугольников.
то удалить
Д>> < 0 для какого-нибудь многоугольника,
Azx.
его из списка.
нелицевых
раньше используется предварительное удаление
плоскостей. Следующий пример послужит более полной иллюстра-
Как
и
иллюстрацией
этого
алгоритма.
Пример 4.22. Алгоритм построчного сканирования
с г-буфером
Вновь возьмем прямоугольник и треугольник, ранее рассмотренные в примере 4.19.
Напомним
прямоугольника:
углов
координаты
Р, A0, 5, 10), Р2A0, 25, 10),
^зB5. 25, 10), Р4B5, 5, 10) и
^7C0, 10, 5), показанных на
вершин
треугольника:
РсA5, 15, 15),
/>6B5, 25, 5),
Сравнить глубину z(x + 1/2, у + 1/2) с величиной Z6y-
Разрешение экрана осталось равным
32x32x2 бита. Как и раньше, атрибут видимости фона будет равен 0, прямоуголь-
фер(л-), хранящейся в г-буфере для одной сканирующей
прямоугольника
рис.
4.50.
2. Точка наблюдения находится в бесконечности
I, а треугольника
сканиположительной попуоси z. Используя соглашение о половине интервала между
сканирующими строками, видим, что самая верхняя сканирующая строка, пересекающая
оба многоугольника, имеет у
24. Поэтому только группа с у = 24 содержит
—
на по-
—
=
* В
силу его невыпуклости.—
Г.1.
обоих ребер в
пары
Извлечь эту пару ребер из списка активных ребер.
342
удалить соответствую-
Вычислить глубину многоугольника на левом ребре,
Для каждой пары ребер многоугольника из списка активактивных ребер:
-
=
лпнов
ребер!).
zx
у
Ллноп
ребер многоугольников заносятся в соот-
=
буфер
породивший их многоугольник.
0.
список в
zx+Ax
в
Вычислить новые абсциссы пересечений:
строки. Оно
одного многоугольника может оказаться более
одной
приращения:
строки
соответствующее ребро из списка. Пометить положение
произвольном порядке. В пределах
одной пары пересечения упорядочены слева
направо. Для
активных
сканирующей
Ауп. Если Аул или Ауп < 0,
приращение по z в интервале между соседними ска-
сканирующими
Пары
Ф
для
Для каждой пары ребер многоугольника определить Ауя
число
соответствующего левому ребру,
—
произво-
Скорректировать список активных ребер:
приращение хп в интервале между соседними ска-
глубина
не
на
кадра дисплея.
сканирующих строк, пересекаемых правой
стороной.
—
В противном случае
1/2).
Записать буфер кадра
сканирующими строками.
—
+
Zбуферах)
заменить
производить никаких действий.
сканирующей строкой.
—
и
строки
Прим. перев.
4. У паление неви шмых линии
и
поверхностей
какую-то
информацию. Все остальные ipvnnbi пусты.
4.10. Алюритм. использующий г-буфер
i
i
30
—r
развертки треуюлышка
p2
20
Pi
Буфер кадра для строки
/V
-
ТО O0OO000011112222222I1112200
Ска1
г-буфер для строки
сгрока
jfO
10
P7"
p.
P4
Рис. 4.58. Многоугольники
10
20
12 12 11 10 10 10 10 10 бТО 0 0 0 0
0 0 0 0 0 0 0 0 10 10 10 10 15 14 13
4.22.
30
Тот
памяти.
из
примера
Ау\
=
24 содержит
для
прямо>гольник<1
в
примере 4.19. Для визуализации буфер
корректируется
Теперь
Список активных многоу!ольников при у
экономии
=
—
прямоугольник: 19, 2, Р,/3,, Р3Р4, 0,0, I, -10, 1;
треугольник: 14, 3, Я5Я~,
Р6Ру, Я?Р5, 3, 1, 4, -120, 2.
+
IIНОП
Д\п
ребра игнорируются.
Для сканирующей строки 15 (рис. 4.58) в списке активных
тапьные
многоугольников.
цикл
вставит
=
28'/2
ребер сокращается
ребро
остается
в
этом
список
списке,
Р$Р7 в список активных ребер
=
=
?л
-[ах +• by + d]/c
=
-[C)A6.5) + A)A4.5)
-
в
активных
то
мно-
следующий
помеченной
по-
Р^Р-, дает новое
120)/4
Оконча^тьный список активных ребер дня сканирующей строки
прямоуюльник: 10, 0.
10, 0, 19, 25, 0, 19, 10, 0, 0
треуюлышк: 244. -1, 9, 25г/б, ]з, 14, 514, Уа, V*.
ирммо\тольник:
=
14
14 таков:
9, 25, 0, 9, 10, 0. 0
треугольник: Ifc'/i, 3, 4. 25'/2, 4,
Полные результаты приведены
.vJ(,
281* + •»
14.5) с ребром
Пересечение сканирующей строки 14 (>•
16 1 2. Глубина треугольника равна:
значение v;i
дня треугольника:
Элементы этого списка суть соответственно
ребер, а тре-
ПНОЯ
Поскольку прямоугольник
алгоритма
=
лшии.
многоугольников со-
—
—
активных
сокращения
=
содержатся оба многоугольника. Для прямоугольника
Ау = II. Для треугольника
Ау = 5. Вначале список активных ребер содержит две
пары пересечений; первую
для прямоугольника и
вторую
его
-1=5-1=4
Ду
=
-
номер Miioroyi ольника. Заме1им, что для прямоугольника этот список
содержит только два ребра. Горизон-
В результате
ребер.
Р6Р5 удаляется из списка
После корректировки списка активных
коэффициенты уравнений несущей плоскости (а, Ь, с. d) и
в
правого ребра |реугольника лает:
треугольник помечается. Корректировка
А
ребер, список ребер, коэф-
и
кадра копируется слева направо.
активных
список
< 0. Поэтому ребро
1
(многоугольник I) и треу! ельника (многоугочышк 2)
следующую информацию:
Эпементы этого списка суть соответственно
Ау, число
памя-
с-буфере округлены до ближайших целых для
строки
же результат получился для соответствующей сканирующей
значения
Здесь
0
0
таковы:
в
14. У*, '/<
примере 4.19.
Д.\'л, Ауп, хп, Дл'п, А_уп, <;л, Azx.
Azy. Непосредственно иерел обработкой сканирующей строки 15 список активных
ребер содержит:
4.11.
прямоугольник: 10, 0, 10, 25, 0, 10, 10, 0, 0
треугольник
:
I5!/i, -1,0, 28]/б,
'
з,
ИНТЕРВАЛЬНЫЙ АЛГОРИТМ ПОСТРОЧНОГО
СКАНИРОВАНИЯ
5, W/i, 3Л,
V*
В алгоритме построчного сканирования с использованием z-буфера
После первою обнуления
буфера кадра и z-буфера дня одной строки и последующей
растровой развертки прямоугольника эти буферы будут
содержать:
Буфер кадра для строки
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 Л
СИП)
глубина многоугольника вычисляется для каждого пиксела
сканирующей строке. Количество вычислений глубины
задачи удаления невидимых
0 0 0 0 0 0 0 0 0 0 10 К) 10 10 10 10 10 10 10 10 10 10
10 1С) 10 0 0 0 0 0 0 0
Рассмотрим теперь треугольник. На левом ребре z
2буферA5)
корректируется
344
и
=
=
14.5,
10. Поэтому атрибуты треугольника заносятся в
г-буфер
для
что
буфер кадра, коррекпосле растровой
сканирующей строки. Эти результаты
Гл. 4. Удаление невидимых линий
и
поверхностей
больше значения
можно умень-
введенных в
уменьшить, если использовать понятие интервалов, впервые
а показано пересечение
алгоритме Ваткинса [4-25]. На рис. 4.59,
двух многоугольников со сканирующей плоскостью.
¦г-буфер для строки
на ска-
Решение зада-
поверхностей сводится к выбору видимых
ска-
интервалов, полученных путем деления
сканирующей строки проекциями точек пересечения ребер (рис.
4-59, а). Из этого рисунка видно, что возможны только три варианотрезков
в каждом
из
варианта:
4.11. Интервальный
алгоритм построчного сканирования
—X
12
3
4
5
Интервал
а
Рис. 4.59. Интервалы для построчного
сканирования.
Интервал
пуст,
как,
например,
Друюй интервальный метод.
Рис. 4.60.
1
интервал
на
рис.
В этом случае изображается
фон.
4.59, а.
точкой.
Пропредложил простой метод разбиения отрезка средней
и cd, изобраПростым сравнением глубин концевых точек отрезков ab
изображенных на рис.
видим.
Интервал содержит несколько отрезков, как, например,
интеринтервал 3 на рис. 4.59, а. В этом
случае вычисляется глубина каж-
куска cd видимы.
отрезка в интервале. Видимым будет отрезок с максимальмаксимальным значением z. В этом
интервале будут
изображаться атрибу-
атрибуты
видимого
отрезка.
протыкать друг друга, то достаточ-
глубину каждого отрезка в интервале на одном из его
концов.
Если два отрезка касаются,
интервала,
то вычисление
но не
проникают
в
концы ин-
глубины производится в середине интерваинтервала, как показано на рис. 4.59, Ь. Для
интервала 3 вычисление глубиглубины, проведенное на его левом конце, не позволяет
принять опредеопределенное решение.
интервала дает
Реализация вычисления глубины в центре интерва-
уже корректный результат, как показано на
рис.
Если многоугольники могут
протыкать друг друга,
Однако случай, изображенный
Далее,
Ромни
и
иногда
то
4.59, Ь.
сканиру-
пересечения, как показано на рис. 4.59, с. Вычисление глубины
глубины
в
интервалов
будет давать неопределенные
Поэтому здесь достаточно проводить вычисление глу-
середине каждого интервала,
как показано для оси
х
на
показали,
изменяется
как
можно
сократить
их
сложные
число,
методы
порождения
а
интервалов,
346
к удивительным
Гл. 4. Удаление
невидимых
приоритет
можно
поддерживать приоритет
порядок следования
кога
точек
Например,
поверхностей
пересечения
ребер изменяется.
Основная структура алгоритма построчного сканирования с z-бу-
фером
применима
в
также
сканирования
случае интервального
типа
Уоткинса.
алгоритма
Необходимо
по-
изменить
внутренний цикл, т. е. способ обработки отдельной скани-
сканирующей строки и содержимое списка активных ребер. Здесь не нужнужно следить за
парностью пересечений ребер многоугольника со ска-
сканирующей строкой. Ребра заносятся в список активных ребер индииндивидуально. Этот
список
упорядочивается
по
возрастанию
х.
Для
ребер из пары здесь используются
идентификатор многоугольника и флаг активности многоугольнилевого
и
правого
и
результатам.
линий и
и
глубины даже тогда,
следовательно,
вычислительную
трудоемкость. Однако применение простых средств также может
привести
текущая сканирующая строка пересе-
если
при некоторых условиях
определения
4.59, с.
Используя более
могут
глубины отрезков в пределах каждого
интервала. Значит, не нужно вычислять приоритет глубины отрезотрезков для новой сканирующей строки. Хэмлин и Джир [4-28] показа-
не
только
результаты.
и
не
порядок следования точек пересечения ребер при этом не изменится, то
ребер со сканирующей плоскостью, но и проекциями точек их попарточках таких
рис.
показали, что если многоугольники
протыкать друг друга
построчного
в концевых
на
вообще избежать вычислений глубины.
удается
[4-27]
др.
сканирующая строка делится не только
проекциями точек пересечения репопарного
ви-
пересекает те же самые многоугольники, что и предыдущая, и если поря-
Если многоугольники не могут
достаточно вычислять
отрезок cd целиком
что
4.60, Ь, показывает,
что так бывает не всегда1*. Деление этой сцены прямой, проходячто оба
проходящей через середину отрезка cd, сразу делает очевидным,
каждого
рис.
4.60, а, убеждаемся,
Интервал содержит лишь один отрезок, как, например, интерваинтервалы 2 и 4 на рис.
4.59, а. В этом случае изображаются атрибуты
многоугольника, соответствующего отрезку.
!)
Ваткинс [4-25]
347
Поскольку глубины точек b и d здесь равны.— Прим. перев.
4.11. Интервальный
алггг»
м
построчного екяшшопдния
ка.
В начале сканирующей строки значение
многоугольника
равно
и
нулю,
оно
флага активности мно-
модифицируется
обработке
при
Занести многоугольник в группу у, соответствующую этой сканирусканирующей строке.
каждого очередного
ребра соответствующего многоугольника. Поребра многоугольника приведет к тому, что этот
флаг станет равным единице, а встреча правого ребра вернет
ему
Появление
левого
значение нуль.
Пример 4.23, который приводится ниже, более под-
подробно проиллюстрирует использование этого флага.
Интервалы, занимаемые каждым многоугольником,
определять
по
многоугольники не
ребра
мере
обработки сканирующих
строк.
указывалось выше,
активных
Если
интервала определяет способ
многоугольников
в
которые пересекаются
много-
и в
пределах интервала, определенного пересечением
ребер, имеетимеется более чем один активный
многоугольник, то необходимо провепроверить возможность пересечения отрезков внутри эгого
интервала
точках
отрезков
в
Проверить
г,
'
[I
ребер
много-
Z.T
поверхностей:
в
группе у
сканирующей строки
новых
Добавить все новые многоугольники к списку
активных многоугольников.
Проверить появление новых многоугольников в списке активных
многоугольников. Добавить все ребра новых активных ребер.
Для каждого ребра многоугольника, которое пересекается со
сканирующей строкой, содержится следующая информация:
х
абсцисса пересечения ребра с текущей сканирующей стро-
—
пар отрезков в
ТО
появление
многоугольников.
строкой.
интервала. Необходимо проверить каждую пару
таком интервале.
Например, если глубины двух от-
отрезков на левом и правом концах интервала равны
строк, ко-
Для каждой сканирующей строки:
(рис. 4.59, с). Для осуществления этой проверки удобен метод, законцевых
многоугольником; список
этим
Решение задачи удаления невидимых
пределах
проводится только тогда, когда в интервале
содержится более ододного активного многоугольника. Если же
протыкание допустимо
заключающийся в сравнении знаков разностей глубин
число сканирующих
многоугольника; коэффициенты уравнения несущей его плоскости (а, Ь, с,
обработки. Вычисление глубины
его
—
d)\ визуальные атрибуты многоугольника.
ребер определяет границу интервала. Как
число
минимум следующую информацию: &у
можно
могут протыкать друг друга, то пересечение каждого
из списка активных
Запомнить в связном списке для каждого многоугольника как мини-
A.v
л*
между
соседними
сканирующих
строк,
пересекаемых данным
приращение
—
по
сканирующими
строками.
Ау
-il
—
число
реб-
ребром.
if sign (г,
-
л
z2j) ф slgn(z,n
-
z2j
Р
D.9)
—
Флаг
значит,
эти
отрезки пересекаются. Если отрезки
пересекаются, то
интервал подразбивается точкой пересечения. Этот процесс повтоповторяется с левым подынтервалом до тех пор, пока он не станет сво-
свободным
от
пересечений. Для свободных интервалов
вычисления
глубин производятся в их серединах.
Если один из знаков равен нулю, то
конце
интервала.
В таком
отрезки пересекаются в кон-
случае достаточно определить
глубину на
противоположном конце интервала вместо
того, чтобы проводить
его разбиение.
идентификатор многоугольника.
—
признак, показывающий
многоугольника на
активность данного
много-
текущей сканирующей строке.
Упорядочить список активных ребер по возрастанию л\
Обработать список активных ребер. Подробности обработки даданы на блок-схеме, приведенной на рис. 4.61, и ее модификациях
на рис.
4.62 и 4.63.
Скорректировать список активных ребер:
Для каждого пересечения ребра определить Ау. Если Ау < О,
то удалить это ребро из списка активных ребер.
Структура интервального алгоритма построчного сканирования
такова:
Вычислить новую
Подготовка данных:
абсциссу пересечения:
*нов
=
АА'
нов
Определить для каждого многоугольника самую верхнюю сканирусканирующую строку,
Сократить список активных многоугольников:
пересекающую его.
Гл. 4. Удя пенис
невидимых
линий
Для каждого многоугольника уменьшить Аур. Если Аур
и
поверхностей
349
4.11. Интервальным алгоритм построчного сканирования
<
О
i
да
касаются/
Хлев
О
-
Счетчик многоугольников
—
1
нет
нет
О
<При
нет
нет
при
да
списка активных
Хправ-х11ИХ
Видимый отрезок
ребер
I
—
х = Хлев
каждого
активного
многоугольника
вычислить
ла
Извлечь ребро из
Хправ
Для
многоугольника вычислить z
Хлев <
при
—
Хлёв?>
j да
Для каждого активного
<^ Есть активные ребра?^>
х =
z
х= Хправ
Фон
Визуализировать
видимый отрезок
Хребро
<^Счетчик многоугольников
=
Рис. 4.62. Модификация блока вычисления пубины для блок-схемы с рис. 4.61.
О?
нет
ла
нет
Счетчик многоугольников > 1?
ла
Видимый отрезок
нет
Вычислить 7 лля
—
Активный многоугольник
активного многоугольника
в левом
Счетчик многоугольников > 1
каждого
Видимый отрезок
—
Фон
да
конце интервала
нет
<^ Отрезки пересекаются?
\
Видимый отрезок
—
Активный
Вычислить
многоугольник с z,nJ4
да
абциссу х;
точки пересечения
Вычислить z в центре
интервала для всех
активных многоугольников
I
Разбить интервал
точкой пересечения
Изменить признак активности
многоугольника в правом конце интервача
нет
(
подынтервал в стек
пересечений
Счетчик многоугольников уменьшить
I
1
Изобразить видимый отрезок
—
да
Стек пересечений пуст?
нет
на
Обработать левый
Хлев
I
Занести правый
в правом конце интервала = 0?
1
—
МНОГОУГОЛЬНИК С Z^au
Признак активности многоугольника
Счетчик mhoi оугольников увеличить на
Видимый отрезок
Изобразить видимый отрезок
подынтервал.
Хправ
—
х,
Хнрав
\ Хлев —Хправ
Извлечь интервал
из стека пересечений
J
Рис. 4.61. Блок-схема интервального анчэритма лля непротыкающих
Хправ
—
значение из стека
многоугольников.
J
для
какого-то
многоугольник из
В данном
многоугольника,
то
удалить этот
многоуголь-
списка.
алгоритме
не используются
преимущества, обеспечиваеглубине, которая была пред-
обеспечиваемые
когерентностью приоритетов по
предложена Ромни. Если многоугольники не могут
протыкать друг дру-
350
"..
4. Удаление нсвишмых линии
и
поверхностей
Рис. 4.63. Модификация блок-схемы с рис. 4.61 для протыкающих многоугольников.
4.11.
Интервальный алгоритм
построчного сканирования
га, то
глубине интервалов, содержащих точки пересечения от-
модификация этого алгоритма, построенная с учетом когекогерентности по глубине, приводит к значительному его улучшению.
тировку по
В простом интервальном алгоритме, приведенном на рис.
4.61,
предполагается, что отрезки многоугольников в пределах одного
разбиение интервала. Эта модификация пои повысить эффекпозволяет сократить количество подынтервалов
повышения эффекэффективность алгоритма. Если необходимо, то для
интервала не пересекаются. Если же отрезки пересекаются
концевых
точках
интервала, то, как
указывалось
ранее,
в конце-
вычисление
глу-
глубины для этих отрезков производится в противоположных им конконцевых точках данного
вычисления
на
интервала.
отрезков, чтобы определить
прежде,
чем
производить
граней.
Простая модификация блока вы-
рис. 4.62.
Если отрезки пересекаются внутри интервала,
Пример 4.23. Интервальный алгоритм построчного сканирования
т. е.
если
много-
более сложный алгоритм разбиения на интервалы, либо точки пересепересечения нужно вставлять в упорядоченный список
ребер. Интервальна рис.
протыкающий его треугольник, которые уже
15. Будем испримерах 4.19 и 4.22. Возьмем сканирующую строку
Рассмотрим опять прямоугочьник
многоугольники протыкают друг друга, то либо нужно использовать бо-
4.61, можно применять и в слу-
случае допустимости пересечения многоугольников, если включить эти
ребер, пометить каждое пересечение
флагом, изменить порядок модификации флага активности многомногоугольника и выполнять вычисления глубин в центре интервала.
На рис. 4.63 показана модификация алгоритма, приведенного на
рис. 4.61. В модифицированном алгоритме предполагается, что
список активных ребер не содержит пересечения.
Пересекающиеся
отрезки нужно обнаруживать и обрабатывать сразу же по ходу ал-
обсуждались в
Пересечение сканирующей
интервале ищутся пересекающиеся отрез-
обнаруживаются, что вычисляется точка пересечения
и интервал разбивается в этой точке.
Правый подынтервал занозаносится в стек. Алгоритм рекурсивно применяется к
левому подынподынтервалу до тех пор, пока не обнаруживается такой подынтервал, в
котором уже нет пересечений. Этот подынтервал изображается, и
новый подынтервал извлекается из стека. Процесс продолжается до
тех
пор,
плоскости при у
=
рис. 4.64. На рис. 4.58 показана проекция
15.5 с многоугольниками изображено на
этих многоугольников на плоскость ху.
Непосредственно перед началом обработки сканирующей строки
15 список активных
величины:
ребер, упорядоченный по возрастанию значения х, содержит следующие
10,0. 10, 1.0, 15 1/2, -1,0,2,0, 25,0, 10. 1.0, 28 1/6. 1/3. 5,2, 0
1ле
числа
сгруппированы
в
А
.у, Р,
пятерки, соответствующие значениям (д\ Дл\
показаны пять
в алгоритме выше. На рис. 4.64
Флаг), которые были определены
активных
точками
ребер со скани-
пересечения
интервалов, порожденных четырьмя
что отрезки, соответствующие многосканирующей строкой. Из этого же рисунка видно,
интервала.
многоугольникам, пересекаются внутри третьего
слева
направо в порядке, определяемом
Сканирующая строка обрабатывается
нет многоугольников. Он изображарастровым сканированием. В первом интервале
Во втором интервале стаизображается (пикселы от 0 до 9) с фоновым значением атрибутов.
пока стек не
опустеет. Этот метод аналогичен тому,
кото-
на 1: Флаг
прямоугольник. Его флаг изменяется
он
В этом интервале нет других многоугольников. Слеловательно,
-Флаг +
становится активны-^
алгоритма Ваткинса.
Для простоты в модифицированной версии алгоритма (рис. 4.63)
Поскольку отрезки могут касаться в концевых точках интерваинтервала, то вычисление глубины проводится в его центре. МодифицироМодифицированный блок вычисления глубины, показанный на рис. 4.62, можно
подставить в схему на рис.
4.63, чтобы сократить объем вычисле-
вычислений.
Дополнительная модификация этого алгоритма реализует сор-
352
Гл. 4. Удаление невидимых линий и поверхности
изображается
=
=
(А"прав) становится 25. Поскольку значение счетчика многоугольников
единицы,
то
больше еди-
на пересечение (рис. 4.63).
соответствующие им отрезки проверяются
Уравнение плоскости треугольника (см. пример 4.19)
Злту t4z- 120
Для сканирующей строки 15 значение у
пиксела с абсциссой .V равна
предполагается, что пересечения отрезков лежат внутри каждого из
них.
1.
(пикселы от 10 до 14) с атрибутами прямоугольника.
15.5. Становится активным треугольник, и
Третий интервал начинается при х
до двух, значением
его флаг изменяется на 1, счетчик многоугольников возрастает
25
и следующее ребро при х
левой абсциссы интервала (А" лев) становится 15.5,
Значением правой абсциссы интервала
выбирается из списка активных ребер.
который предлагался Джексоном [4-29]. Заслуживает упоминания тот
факт, что фотографии на вклейке A2 и 13) были получены с попомощью
Пеинтервала между сканирующими строками.
=
каждом
Если они
отрезки.
и
использовать соглашение о половине
пересечения в список активных
алгоритма. Здесь в
предварительное удаление нелицевых
также
эффективности используется
гпубины в блок-схеме, показанной на рис. 4.61, привезена
Интервальный алгоритм, показанный
видимость пересекающихся отрезков пре-
z
A20
=
-
-
>•
Зл)/4
=
A20
-
—
=
таково:
0
15.5; а глубина треугольника для пик-
15.5
2х)/4
-
=
A04.5
-
Зл)/4
на концах интервала:
Поэтому в центрах пикселов, т. е. при .v + 1/2,
Z0
=
[Ю4.5
-
C) A5.5K/4-14.5; z2
=
[104.5
-
C) B5.5)]/4-7.0
Поскольку глубина прямоугольника постоянна, то
=
•л
353
4.11.
10;
г,
=
10
Интервальный алгоритм построчного сканирования
о
10
20
о
1
1
1
1
1
1
1
25 до 27). В правом
"
Г
ю Ь
1
=
.
.
„
у
J
1
/
^—
-
]
=
I
1
завершается.
Окончательный результат совпадает с тем, чго показан
11 ря моу гол ы 1 и к
1
z
1
1
1
1
1
\У
т
у
у
20
0.
неактивен. Счетчик многоугольников становится равным
32, поэтому Хлев <
и последний интервал (пикселы от 28 до
< л'Пшл Значит, Хправ заменяется на .vmiiv
(Пил
Затем Хлев заменяется на Хправ. Опять
31) изображается с фоновыми атрибутами.
строки завершаетА лев
нет активных ребер, но
*niax, и обработка сканирующей
1
к.
треугольник. Его флаг становится
равным 0, н он теперь
т. е. на 26'/й.
Хлев заменяется на Хправ,
Л'
Теперь в списке активных ребер ничего нет. Здесь
А.—1Тре>гольник
>
конце интервала находится
2
Рис. 4.64. Сканирующая
5
4
3
на рис. 4.19.
тоскость для
Алгоритмы построчного сканирования
примера 4.23.
можно
реапизовать и как
Например, Арчулета
удаления невидимых линий.
Ваткинса, которая за[4-30] предложит такую версию алгоритма
линий.
занимается удалением невидимых
алгоритмы
Из уравнения D.9)
имеем:
Signfc,
-
Sign(?,
Поскольку SignU,
на ты точки
-
z.j ) *
z2 )
-
SignA0
=
z-y )
SignA0
-
SIgn(r,
14.5) <
-
-
О.
7) > О
4.12. АЛГОРИТМЫ ПОСТРОЧНОГО СКАНИРОВАНИЯ
ДЛЯ КРИВОЛИНЕЙНЫХ ПОВЕРХНОСТЕЙ
), эти отрезки пересекаются. Коорди-
-
*?
пересечения таковы:
z
=
v,
=
A20- 15.5- 3i)/4
=
10
Хотя
Интервал разбивается ючкои с абсциссой л
в
21.5. Значение Хправ заносится в
не
гг
=
больше, чем Z\
изображается треугольник
A04.5
=
-
Зл)/4
при
=
=
v
18.5, равна:
[104.5
10 для треугольника.
C)(I8.5)J/4
Значением Хправ
т. е. а*
25. В подынтервале от v
=
треугольника в
стека.
=
I2.25
Поэтому в этом подынтервале изобра-
Затем значением Хлев становится значение
из
Хправ, и правый подынтервал из-
становится
ветчина,
извлеченная
из
стека,
21.5 до х = 25 нет пересечений, Глубина трецентре этого подынтервала, т. с. при д- = 23.25 равна
г2= A04.5
-
Зл)/4
=
=
|104.5
-
C)B3.25)]/4
=
неудобно для растровых
аппроксимировать многогранником
выше алгоритмов построчвоспользоваться одним из изложенных
поверхность
меньше, чем с, = 10 для прямоугольника. Поэтому в этом подынтервале (пиксепы от 21 до 24) виаимым является прямоугольник.
Стек пересечении теперь пуст.
Процедура, приведенная на рис. 4.63, передаст
управление процедуре, изображенной на рис. 4.61. В правом конце интервала нахоОн и перестает быть активным. Его флаг становится
равным
к уменьшению счетчика
многоугольников на 1. Сегмент изобража-
находится прямоугольник.
атрибутами прямоугольника. Хлев опять заменяется на Хправ.
Следующим ребром, извлеченным из списка активных ребер, будет ребро третреугольника со значением .v
281Л. Четвертый интервал простирается от д- = 25 до
=
=
28 U.
Счетчик многоугольников
треугольник.
354
Поэтом*
отрезок
разумеется,
интерполяционные
контурные
будет выглядеть состоящим из граней. В любом случае
выглядеть как лоребра окажутся кусочно-линейными, т. е. будут
ломаные, состоящие из коротких прямолинейных отрезков.
Алгоритм
зпесь равен
1.
Активен в этом интервале только тре-
визуализации
параметрических
А заалгоритмы Блинна и Уиттеда.
Карпентера и Кларка,
рассмотрены алгоритмы Лейна
обсуждаются похожие друг на друга
—
затем
будут
которые также похожи друг на друга.
сцена рассекаетТо, что в алгоритме построчного сканирования
наблюдения
рассекается сканирующей плоскостью, проходящей через точку
и
сканирующую строку, сразу демонстрирует различие
изображается с атрибутами треугольника (пикселы от
Гл. 4. Удтение невщимых линий
и
поверхностей
биполиномиальных
по описанию
(обычно бикубических) поверхностей непосредственно
сканироэтих поверхностей в порядке, определяемом построчным
Уиттедом [4-32], Лейсканированием, были разработаны Блинном [4-31],
обсужном и Карпентером [4-33, 4-34] и Кларком [4-35]. Первыми
изображается с
л-
можно,
высокой точности чисто
сканирования. Однако для получения
описания достаточно
граней многоугольника, необходимых для
использовать при
сложной сцены, огромно. Кроме того, если не
методы закраски (см. гл. 5), то результат
этом
8.69
что
0, что приводит
Это несканирования строк развертки.
устройств вывода. Криволинейную поверх-
по ходу
построчного
-
(пикселы от 15 до 20).
извлекается
упорядочен
он выда-
и
15.5 долг = 21.5 нет пересечений. Глубина треугольника
=
центре этого подынтервал, т. е.
что
=
Теперь значением Хправ становится х[Л т. е. 21.5.
В подынтервале от v
разбиения криволинейных поверхностей Кэтмула
(см. разд. 4.6) прост и элегантен, но результат, который
21.5
выдает,
сгек.
алгоритм
355
4.12. Алгоритмы для
криволинейных поверхностей
между поли-
тональной
и
криволинейной
(скульптурной) параметрическими по-
Для
поверхностями.
полигональной поверхности все пересечения со
сканирующей плоскостью являются прямолинейными
отрезками.
Эти прямолинейные отрезки легко описать их
концевыми точками.
Для криволинейной параметрической поверхности ее
пересечение со
сканирующей плоскостью задается уравнением
у (и,
где и и w
получается
—
w)
=
>-скан
=
или
контур любого уровня
может
мало найти кривую
=
x(u,w),
=
у
содержать несколько кривых. Нако-
(или кривые), образованные пересечением
=
х(и, w), и уметь вычислять глубину кривой при этом значении
абсциссы, т. е. z
z(u, w), чтобы определять ее видимость.
Математически последнее требование можно
сформулировать
так. Дана ордината
у сканирующей строки и абсцисса Л'
ле-
=
Вычислить глубину поверхности: z
=
=
Необходимо вычислить значения парамет-
w, т. е. найти
и{х> у) и
w
=
сканирующую плоскость».
по формуле z
=
атрибуты видимости
-сожалению,
и
В частности, использовался
глубина вычисляется
строке. К
уравнений не известно. И Блинн,
получения решения.
итерационный метод Ньютона
—
Раф-
локальных максимумах и
минимумах
эти
для
граней и ребер.
не обяДля криволинейных поверхностей локальные экстремумы
списков активных
обязательно
совладают
с
такого начального
приб-
приближения и сокращения числа
итераций на один пиксел. К сожалеитерационный процесс в методе Ньютона
Рафсона может
—
Кадзия
[4-37]
предложил более
более сложный метод, основанный на идеях
устойчивый,
хотя
и
алгебраической геомет-
геометрии.
Кратко, в контексте структуры алгоритма построчного
сканирования, внутренний
цикл
алгоритмов Блинна
и
сканиро-
Уиттеда таков:
Параметрическая поверхность задана списком активных элементов,
356
Гл. 4. Удаление невидимых линий
и
лежащее
вершинами.
Часто
внутри поверхности, определяется
они
располагаются
Контурное ребро, ле-
обнулением компоненты
z у вектора нормали к поверхности. Несколько примеров приведено
криволинейной поверхности ее грань можно
добавить в список активных граней или удалить из него при обрасканирующей строки
Эта задача ремогут начинаться и заканчиваться на таких ребрах.
решается в алгоритмах Блинна и Уиттеда путем эффективного разби-
ребер,
а
интервалы вдоль
поверхности вдоль контурных ребер.
Алгоритмы визуализации параметрических
разбиения
криволинейных поКарпентеру и Кларку, осноповерхностей, принадлежащие Лейну
Однаосновываются прежде всего на методах разбиения поверхностей.
Однако в отличие от первого из алгоритмов подразбиения, предложенв произпредложенного Кэтмулом, в котором поверхность обрабатывается
—
произвольном порядке, в этих алгоритмах результат упорядочен по ходу
357
поверхностей
их
внутри поверхности вдоль контурных ребер.
обработке контурных
когерент-
расходиться.
поверхностей. Для полигональных
локальные
когерентности
сожалению,
пересекающих их
экстремумы всегда совпадают с их
В алгоритмах построчного сканирования эти вершины
поверхностей
на рис. 4.65. В случае
—
сканирующих строк для получения
из
возникают на локальсканирующих плоскостей. Эти пересечения
[4-36]. Метод Ньютона
Рафсона нуждается в начальном
приближении. В обоих алгоритмах используется свойство
сона
самой низшей
решения
соединяющие их ребра многогранника используются
или удалить из спивопросов о том, когда грань следует добавить
исходной точки, лежащей на сканирующей
Уиттед использовали численные методы для
и неактивными на
самой верхней
z(u, w). Следовательно, можно вычислить атрибу-
точное решение этих
и .у, и изо-
Поверхности становятся активными на са-
и
w(.v, у)
Если значения этих параметров известны, то
а*
отличие много-
вершинами.
-
(xty).
z (м, w ).
w
Данный алгоритм иллюстрирует еще одно важное
В алгомногогранника от криволинейной параметрической поверхности.
эту скаалгоритме говорится: «Для каждой поверхности, пересекающей
=
точки,
и
Определить поверхность, видимую при заданных
изобразить пиксел с ее атрибутами.
функцией. Более того,
строку,
и
z(u,w)
=
(х,у), w
Решить уравнения: и
контуром. Эта кри-
=
параметров w,
z
плоскость при данном х:
поверхности со сканирующей плоскостью, нужно, кроме
того, найнайти проекции каждой ее точки на
т. е. х
сканирующую
лежащей на этой строке.
у (и, w),
Для каждой сканирующей строки (ее ордината равна у):
Для каждого пиксела на этой строке (его абсцисса равна х):
Для каждой поверхности, пересекающей эту сканирующую
параметры, задающие поверхность. В результате полу-
кривая, называемая линией уровня
параметрическими уравнениями:
х
const
кривая не обязательно описывается
однозначной
Наконец,
описанных
4.12.
Алгоритмы для криволинейных поверхностей
Рис.
4.66.
Чайник,
за-
заданный 28 бикубически-
кусками и изобраизображенный с помошью албикубическими
i ори гма
Рис.
4.65.
Примеры
максимальных значениях
Л.
ординаты каждого из этих элементов. Для каж-
каждой сканирующей строки те элементы из списка
активных элеменэлементов, которые пересекаются соответствующей
сканирующей плоплоскостью, подразделяются до тех пор, пока каждый новый
элемент
не станет
удовлетворять критерию пологости или не перестанет пепересекаться со
которые
заносятся
больше не пересекаются со сканирующей
в
рассмотрения.
сканирующей плоскостью. Те части элементов, кото-
список
неактивных
элементов
Те же части элементов,
пологости,
плоскостью, заносят-
—
—
осуществляет больше разбиений. Рис. 4.66 построен с использованием
Карпентера.
алгоритма Лейна
В контексте алгоритма построчного сканирования внутренний
—
цикл
алгоритма Лейна
—
Карпентера кратко записывается так:
Для каждой сканирующей строки с ординатой у.
Для каждого
элемента из списка активных элементов:
if элемент плоский then
преобразовываться в растровую форму с помощью алгоритма по-
занести этот элемент
сканирования
плоскими
для многоугольников.
Однако каждый
из
таких
приближенно плоских многоугольников остается параметри-
параметрическим
элементом.
элемента
поверхности, используется
атрибутов
Вся
отдельных
информация, имеющаяся для подобного эле-
пикселов
многоугольника
в
позволяет
произвести
растровую
в
для определения визуальных ат-
преобразования многоформу. Использование этой информации
гладкое
процессе
сопряжение
этих
элементов.
Если
плоским считать
пиксела,
элемент, размеры которого меньше одного пиксето полученный
контур будет гладким. Далее, задние или нели-
нелицевые многоугольники
нормали к поверхности
сторону
удаляется.
можно удалить простым вычислением
нор-
(см. разд. 4.3). Если нормаль направлена не в
набподателя, то соответствующая часть элемента удаля-
Это позволяет сэкономить большой объем
Хотя оба алгоритма Лейна
вычислений.
Карпентера и Кларка используют
изложенную идею, в алгоритме Кларка элементы
проходят до рас358
Карпентера.)
тровой развертки предварительную обработку, в то время как в алКарпентера элементы динамически подразделяалгоритме Лейна
Карпентера
подразделяются в процессе обработки кадра. Алгоритм Лейна
требует значительно меньше памяти, чем алгоритм Кларка, но осу-
многоугольниками и
построчного
Кар-
для
последующего рассмотрекоторые удовлетворяют критерию по-
далее начинают считаться
—
Карпентера. (С разрешения
контурных
ребер.
сканирования строк развертки. Алгоритмы выполняют
групповую
сортировку по у элементов поверхности, основываясь на макси-
Лейна
—
Гл. 4. Удаление невидимых линий и поверхностей
в список
многоугольников
else
разбить этот элемент на подэлементы
if подэлсмент еще пересекается со сканирующей плоскостью
then
занести его в список активных элементов
else
занести его в список неактивных элементов
end if
end if
Произвести растровую развертку многоугольников из списка
мно-
многоугольников.
Оценка обеих алгоритмов Лейна
от свойств конкретных
—
Карпентера и Кларка зависит
базисных функций, используемых для гене-
генерации параметрических элементов с целью их эффективного разбие-
4.12. Алгоритмы л.ш криволинейных поверхностей
Эти алгоритмы применимы к любым
параметрическим элеэлементам поверхности, для
которых имеется эффективный алгоритм
ния.
0
разбиения. Единственный недостаток этих алгоритмов адаптивного
разбиения заключается в том, что из-за несоответствия
между
приближенными полигональными элементами и точными параметпараметрическими элементами могут образовываться
разрывы
или
Объект
/
дыры в
Л
ё
поверхности.
Квадратные поверхности, вообще говоря, в чем-то проще, чем
параметрические элементы поверхности.
поверхности
задаются
.1\ч
вращения. Если все
коэффициенты от я,
квадратичное уравнение сводится
к
до
Наблюдатель
О
=
Типичными примерами квадратичных
поверхностей являются
сферы, конусы, цилиндры, а также эллипсоиды и
гиперболоиды
вра-
аь равны нулю, то квад-
рой ведется поиск ее видимых участков.
представляют
как
в основе этого
метода,
грубой силы1*. Главная идея, лежав том,
заключается
что
наблюдатель
уравнению плоскости многоуголь-
лежащая
квадратичных поверхностей,
любой объект посредством испускаемого неким источником
и затем каким-то путем досвета, который падает на этот объект
подмножество
пред-
особый интерес в задачах молекулярного
Разработано
несколько
алгоритмов
моделирования.
построчного сканирования
специально для сфер. В частности, алгоритмы
Портера [4-38, 4-39]
Стодхаммера [4-40] являются примерами алгоритмов построчнопострочного сканирования с использованием
z-буфера, которые ориентироваи
сферы. Ограничиваясь
случаем
ортогональных
проекций,
Портер эффективно использовал алгоритм Брезенхема для окруж-
(см. разд. 2.6), чтобы формировать контур сферы. Более то-
того, поскольку пересечение
является
окружностью,
сканирующей плоскости со сферой тоже
то
можно
воспользоваться
алгоритмом
Брезенхема для окружностей, чтобы инкрементально вычислять
глубину каждой сферы на сканирующей строке. Наконец, алгоритм
Брезенхема используется для устранения ступенчатости контурных
ребер (см. разд. 2.26) путем поддержания списка приоритетов сфер,
основанных на глубинах их
центров. Сортировка по приоритету
позволяет также учесть эффекты
прозрачности.
4.13. АЛГОРИТМ
ОПРЕДЕЛЕНИЯ ВИДИМЫХ
ПОВЕРХНОСТЕЙ ПУТЕМ ТРАССИРОВКИ ЛУЧЕЙ
доходит до наблюдателя. Свет может достичь наблюдателя, отразивотразившись
Оценки эффективности
поверхностей,
всех
обсуждавшихся
алгоритмов удаления
в
предыдущих
невидимых
по-
зависят
от
разделах,
определенных характеристик когерентности той сцены, для
Гл. 4. Удаление невидимых линий
и
поверхностей
кото-
от
поверхности, преломившись
или
пройдя через
нее.
Если
то можно
проследить за лучами света, выпущенными источником,
убедиться,
чго
весьма
немногие
из
них
дойдут
до
наблюдателя.
Следовательно, этот процесс был бы вычислительно неэффективен.
[4-41] первым предложил отслеживать (трассировать) лучи
как покав обратном направлении, т. е. от наблюдателя к объекту,
Аппель
показано
на
был с успехом реализован в рамках
В савизуализации твердых тел MAGI [4-42].
рис. 4.67. Этот
метод
дисплейной
системы
самой системе
MAGI трассировка прекращалась, как только луч пере-
пересекал поверхность видимого непрозрачного
объекта;
т. е.
луч
ис-
обработки скрытых или видимых поверхповерхностей. Впоследствии Кэй [4-43, 4-44] и Уиттед [4-45] реализовали
использовался
только для
осалгоритмы трассировки лучей с использованием общих моделей
одного
освещения. Эти алгоритмы учитывают эффекты отражения
объекта от поверхности другого, преломления, прозрачности и заАлгозатенения.
Производится также устранение ступенчатости.
в разд. 5.12. НаАлгоритм, учитывающий эти эффекты, обсуждается
Настоящее же обсуждение ограничено применением метода трассировтрассировки
360
является методом
трассировка лучей
В отличие от них трасси-
видит
Сферы,
окружностей
Рис. 4.67. Простая трассировка л>ча.
сфе-
многоугольника а.
на
Растровая сетка
обшим уравнением второго порядка:
а\х2 + сцу1 + aiz2 + ецху + a$yz + a^zx + ajx + а%у + a^z + o\q
ориентированы
7
Квадратичные поверхно-
лучей для определения видимых или скрытых поверхностей.
1)
ipyooii сичы принято называть метод, не учитывающий специфику
обрабатываемого объекта.— Прим. перев.
361
Методом
4.13. Алгоритм определения
видимых
поверхностей
Рис. 4.67 служит иллюстрацией алгоритма трассировки лучей.
В
преобразована в
пространство изображения. Перспективное преобразование не исиспользуется. Считается, что точка зрения или наблюдатель находитнаходится в бесконечности на положительной полуоси z. Поэтому все свеэтом алгоритме
предполагается,
чго сцена
уже
1
Объект
I
•
f
лучи параллельны оси z. Каждый луч, исходящий от наблю-
световые
1
"Г
наблюдателя, проходит через центр пиксела на растре до сцены. Траекто-
Растровая сетка
i
Траектория каждого луча отслеживается, чтобы определить, какие именно
объекты сцены,
если таковые
существуют, пересекаются с данным
точки
и
пересечения луча
Эти пересечения упорядочиваются
данного пиксела.
по
глубине. Пересечение с
представляет видимую поверхность для
максимальным значением z
Атрибуты этого объекта используются для опре-
определения характеристик пиксела.
Если
точка
зрения
трассировки лучей
что
предполагается,
как
лишь незначительно
бесконечности,
усложняется. Здесь предпо-
Картинная
плоскость,
показано на рис
т. е.
растр, перпендикулярна
4.68. Задача состоит в том, чтобы по-
построить одноточечную центральную проекцию
плоскость
важным
элементом
которого
можно
Объекты сцены
создать
с
лучом.
прямоугольный
В
качестве
параллелепипед
является
или
можно
использовать
Хотя,
сферу.
в качестве
как
прямо-
показано,
на
оболочки может оказать-
со сферой
неэффективным, факт пересечения трехмерного луча
если расстояние от центра
определяется очень просто. В частности,
этой сферы, то
сферической оболочки до луча превосходит радиус
оказаться
он
луч не пересекает оболочки. Следовательно,
пересечься
и
не может
пересечь-
обьектом.
с
Поэтому
тест
со
сферической оболочкой сводится к определеБудем
расстояния от точки до трехмерной прямой,
проходящей
использовать параметрическое представление прямой,
определению
точки
P,U,, ух, zx) и Р2(х2, у2, z2),
P(t)
=
т. е.
луча.
4.69.
Сферическая
т. е.:
Р\ +(P2-P\)t
процедура опреде-
процедуру построения
пересечений.
с
компонентами
А
=
=
набора плоских многоугольни-
у
многогранников или тел, ограниченных или определяемых ква-
2
могут состоять из
оболочки
рис. 4.69, использование сферы
алгоритма определения видимых
пересечений. В состав сцены можно включать любой объект,
определения
скта
через
поверхностей путем трассировки лучей,
многоугольников,
на картинную пло-
[1-1].
Наиболее
для
алгоритм
наблюдатель по-прежнему находится на почожитель-
ной полуоси z.
оси z,
в
не
находится
учетом
объекта.
Можно получить
большое количество пересечений, если рассматривать много объек-
возможные
с
пуча
Трассировка
перспективы.
Если луч пересекает объект, то определяются все
с каждым лучом.
объектов.
Рис. 4.68.
Необходимо проверить пересечение каждого объекта сцены
лучом.
=
V|)/
=
V| + СИ
у\ + 0'2 -y\)t
=
vi + ht
ЛГ| + (-V2
Z] +
(Г?
-
-
"l)/
=
Z\ + f/
квадратичными или биполиномиальными параметрическими поверхно-
Поскольку 75—95% времени, затрачиваемого алгоритмом
трассировки лучей, уходит на определение пересечений, то эффекповерхностями.
эффективность
влияние
процедуры
на
поиска
пересечений
оказывает
значительное
производительность всего алгоритма. Вычислительная
стоимость
определения пересечений произвольной пространственпространственной прямой (луча) с одним выделенным объектом может оказаться
(см., например, [4-37]). Чтобы избавиться от ненужного
поиска пересечений, производится проверка пересечения луча с объвысокой
объемной оболочкой рассматриваемого объекта. И если луч не пересепересекает
362
Рис.
оболочки, то не нужно больше искать пересечений этого объГл. 4. У деление
невичимых
линий
и
поиер\ноетей
прямоугольная оболочки.
4.13. Алгоритм определения rhiiimi.
и
Тогда минимальное расстояние d от этой прямой до точки
Р0(х0,
у0, z0) равно:
d2
где
=
(л-
хоJ + (у
-
параметр t, определяющий
-
-
>'оJ + U
-
zoJ
-
В произвольпримере поверхности второго порядка общего вида.
произвольной декартовой системе координат поверхностей второго порядка
является геометрическим местом точек, координаты которых удов-
ближайшую точку Р(/) равен:
лр) 4-
Продемонстрируем упрощение вычислений точек пересечения на
удовлетворяют уравнению:
Q(x,y, z)
у0)
=
я, v
схх +
Бсли d2
может
R2, где R
>
пересечься
—
сферической оболочки, то луч не
радиус
Выполнение
габаритного теста с прямоугольной оболочкой в
пространстве требует большого объема вычислений.
трехмерном
этом
При
проверить пересечение луча по меньшей мере с
тремя бесконечными плоскостями, ограничивающими прямоугольпрямоугольную оболочку. Поскольку точки пересечения могут оказаться вне
следует
граней этого параллелепипеда, то для каждой из них следует, крокроме
того, произвести проверку
на охват или попадание
Следовательно, для трех измерений
оказывается
тест с
с
луча
являются решениями уравнения:
а'ъг- + с'ъг + d'
объектом,
а
также
сравнения
по
осью z.
=
0
т. е.
z
=
2а;
более медленным, чем тест со сферической оболочкой.
глубине среди точек
пересечения. В этой процедуре используются переносы и повороты
вокруг координатных осей [1-1] для того, чтобы добиться совпадесовпадения
возпересечение этого луча с поверхностью, если оно имеет место,
возникает при х = у = 0. Поэтому в общем случае точки пересечения
прямоугольной оболочкой
оболочкой к сравнению знаков, упрощая тем самым вычисление пес
переноса и
преобразования,
внутрь. Сле-
Одной простой процедурой можно свести тест с прямоугольной
пересечений
которое является комбинацией
поворота и используется для совмещения луча с осью г,
После применения
объектом.
с
d = 0
+
Аналогичным преобразованиям подвергается и
где штрих сверху обозначает
коэффициенты общего уравнения попосле
преобразования. Если с32
—
второго
поверхности
порядка
решения выражаются комплексными числами и
луч не пересекает поверхности. Если бесконечная поверхность втовторого порядка (например, конус или цилиндр) ограничена плоскостя—
Aa'^d'
<
0,
то
плоскостями, то эти плоскости также следует
преобразовать и проверить на
бесконечной ограничиваю-
прямоугольная оболочка объекта.
Луч пересекает оболочку, если в
пересечения. Если найдено пересечение
новой перенесенной
системе
ограничивающей плоскостью, то необходимо, кроме того, произвести проверку
¦*max»
a
также
Ут\»
и
повернутой
и
утАХ
координат
противоположны,
как
знаки
л-
показано
;
и
на
на попадание
с
внутрь. Однако в преобразованной системе координат
двумерной проекции фигуры,
образованной пересечением ограничивающей плоскости и квадраквадратичной поверхности. Для получения точки пересечения в исходной
рис. 4.70.
эту проверку
системе
можно
координат
произвести
на
необходимо применить обратное преобразова-
преобразование.
Пересекающий
Вычисления пересечений
НспересскаюшиП
для
элементов
параметрических поверхностей более
предложил
простой
метод
сложны.
биполиномиальных
па-
Уиттед [4-45] предло-
разбиения для элемента бикубической поверх-
поверхности. Вычисления выполняются с элементом поверхности в его исисходном положении. Если луч пересекает сферическую оболочку эле-
Не пересекающий
элемента
Рис. 4.70. Пересечения прямоугольной
оболочки в преобразованной системе кокоординат.
364
Гл. 4. Удаление невидимых линий
и
поверхностей
поверхности, то этот кусок разбивается с помощью алгорит-
алгоритма разбиения Кэтмула (см. разд. 4.6). Затем луч проверяется на пепересечение со
365
сферическими оболочками подэлементов. Если пересе-
4.13. Алгоритм определения видимых поверхностей
чений
обнаружено, то луч не пересекается и с самим элементом.
Если же луч пересекается со сферической оболочкой
какого-нибудь
нодэлемепта, то последний разбивается дальше. Процесс завершазавершается, если ни одна из сферических оболочек не пересечена или еспи
не
достигнут
заранее определенный их минимальный размер. Эти сфе-
сферические оболочки
минимального размера
пересечениями луча
и
элемента
и
являются
параметрических поверхностей,
разбиений
можно
алгоритма,
если для подэлементов воспользоваться их
за счет
[1-1],
число раз-
усложнения алго-
выпуклыми обо-
оболочками вместо прямоугольных.
[4-37] разработал
метод для
параметрических поверхностей, который
биполиномиальных пара-
требует их подразделения.
Это г метод основан на понятиях, заимствованных из
алгебраичеалгебраической геометрии. Решения получающихся при этом
алгебраических
высших
степеней
уравнений
находятся численно. Метод, подобный
этому, можно реализовать в преобразованной системе координат.
Напомним, что биполиномиальная параметрическая поверхность
шестую
степень.
Следователь-
общем случае потребуются численные методы решения. Там,
приближения и и
w можно ис-
пересечения луча с выпуклой оболочкой. Для получения
использовать
пересечений в исходной системе координат, как и ранее, следует ис-
обратное преобразование.
использовать
обладающих свойством выпуклой оболоч-
сократить дополнительно
в
где это допустимо, для начального
поверхности.
оболочки, например для поверхностей Безье и Я-сплайнов
Кадзия
Следовательно,
искомыми
При реализации преобразования, совмещающего луч с осью z,
метод разбиения можно использовать скорее применительно к
пряпрямоугольным оболочкам, чем к сферическим. Это сокращает число
разбиений и увеличивает эффективность алгоритма. Для парамет-
имеет
екая поверхность, например,
Если трассируемый луч пересекает объекты
точках, то
сцены в нескольких
необходимо определить видимое пересечение. Для алго-
алгоритмов определения видимости простых непрозрачных поверхноповерхностей, которые обсуждаются в данном разделе, пересечением с видивидимой поверхностью будет точка с максимальным
значением коорди-
Для более сложных алгоритмов, учитывающих отражения
координаты z.
преломления, эти пересечения следует упорядочить вдоль луча по
расстоянию от его начала. В преобразованной системе координат
и
этой цели
можно достичь
простой сортировкой по z.
Алгоритм трассировки лучей для простых непрозрачных поверхповерхностей можно представить следующим образом:
не
Подготовка данных для сцены:
Создать список объектов, содержащий по меньшей мере следую-
информацию:
следующую
Полное
и
определяется уравнением
описание
объекта: тип, поверхность, характеристики
т. п.
оболочки: центр и радиус.
Флаг прямоугольной обоаочки. Если этот флаг поднят, то
будет выполнен габаритный тест с прямоугольной оболочкой,
если же он опущен, то тест выполняться не будет. Заметим,
что габаритный тест необходим не для всех объектов, напринапример для сферы он не нужен.
Описание сферической
м,
с
w)
=
О
компонентами
-Х =
Дм, W)
у
=
g(u. w)
г
=
h(u. \v)
В преобразованной системе координат выполнено условие
Описание
х
v
—
7
=
0.
прямоугольной
оболочки:
=
xmin,
*max,
^min,
jnm,
7
•
Значит,
Л«. w)
=
0
g(u. w)
=
0
Для каждого трассируемого луча:
Выполнить
для
каждого
объекта трехмерный
тест со
сферичес-
сферической оболочкой в исходной системе координат. Если луч пересека-
Совместное решение этой пары уравнений дает значения и и
точек
=
Подстановка
пересечения.
w для
значений
в
уравнение
пересекает
найти действительное решение означает, что луч
не
пересе-
поверхность. Степень системы уравнений для ut w равна про-
произведению
степеней
биполиномиальных
поверхностей.
эту
сферу, то занести объект в список активных объектов.
z
А(м, w) дает компоненту z для точек пересечения. Неудача по-
попытки
пересекает
~
этих
Бикубиче-
Если список активных объектов пуст, то изобразить данный пикпиксел
с
фоновым значением интенсивности и продолжать работу.
В противном случае, перенести и повернуть луч так, чтобы он
совместился с осью z. Запомнить это комбинированное преобпреобразование.
366
Гл. 4. Удаление
невидимых линий
и
поверхностей
367
4.13. Алгоритм определения
видимых
поверхностей
Для каждого объекта из списка активных объектов:
Если флаг прямоугольной оболочки поднят,
используя
комбинированное преобразование,
преобразовать,
эту
оболочку в
систему координат, в которой находится луч, и выполнить со-
соответствующий тест. Если пересечения с лучом нет, то перейперейти
к
объекту. В противном случае преобразокомбинированное преобразование, объект в
следующему
преобразовать,
используя
систему координат,
в
которой
его пересечения с лучом, если они существуют.
пересечения
Если
список
в список
и
находится луч,
определить
Занести все пе-
в точках Я,A5, 15, 15),
Я6B5, 25. 5),
Вершины треугольника расположены
оболочки расположен в точке B2.885,
Р7(ЗО, 10, 5). Центр его сферической
оболочка этого треугольника
15.962, 8.846). а ее радиус равен 10.048. Прямоугольная
15.
за чается числами 15, 30, 10, 25, 5,
и оба флага прямоТаким образом, в списке объектов содержится два элемента,
подняты.
прямоугольных оболочек
соответств>ющего точке B0,
Рассмотрим луч, проходящий через центр пиксела,
15). Поскольку наблюдатель находится
оси z, расстояние
Сначала возьмем прямоугольник. Поско шку луч параллелен
г.
от центра
учитывая,
сферической оболочки ло луча не зависит от координаты
что центр пиксела находится в точке B0.5, 15.5), получаем:
пересечений.
пересечений пуст,
d2
изобразить данный
то
пиксет
с
фоновым значением интенсивности.
В противном случае определить
zmax для списка пересечений.
Так как (<72 = 9.25) <
B0.5
=
(R2
S
в
исходной
Изобразить данный
объекта
и
системе
координат.
пиксел, используя
B0.5
=
5.90
Снова
{d1
=
это
число
5.90) <
(Н2
пересеченного
соответствующую модель освещенности.
=
9.25
активных
-
объектов.
15.962J
сферической оболочки, т. е.
100.96). Поэтому луч пересекает и сферическую оболочку тре-
меньше,
=
22.885J + A5.5
-
чем
радиуса
квадрат
в список активных
заносится
треугольника. Этот треугольник также
атрибуты
15J
-
Конкретно,
156.25), то наш луч пересекает сферическую оболочку
=
преобразованию.
пересечения
~
17.5J + U5.5
-
заносится в список
прямоугольника. Прямоугольник
Аналогично для треугольника имеем:
Вычислить преобразование, обратное комбинированному преоб-
Используя это обратное преобразование, определить точку пере-
в бесконечности, этот луч параллепеи оси z.
объектов.
Поскоаьку список активных объектов не пуст, луч подвергается преобразована (—20.5,
преобразованию, совмещающему его с осью z. В нашем случае ауч переносится
-15.5, 0) и направлениях а\
у, z, соответственно.
Аналогично перенос прямоугольной оболочки для прямоугольника
дает значе-
Заметим, что алгоритм определения видимости простых непронепрозрачных поверхностей, не требует вычислять преобразование, об-
значения
обратное комбинированному, или определять точку пересечения в исисходной системе координат, если в модели освещения не возникает
прямоугольником получается с использованием
системах координат до и после преобразования
несущей этот прямоугольник. В обеих
необходимость включения в алгоритм свойств поверхности объекта
уравнение этой пчоскости имеет вид:
5). Эти шаги вклювключены в данный алгоритм для полноты и удобства при реализации
z
Поэтому пересечение ее с лучом происходит при z
алгоритма трассировки лучей с учетом общей модели освещенности
внутри прямоугольника. Эта точка
или ее
ориентации
в точке
пересечения (см.
Точка пересечеуравнения плоскости, не-
пересечения луча с
гл.
-
10
0
=
=
10. Точка пересечения лежит
и заносится в список точек
даст
Перенос прямоуготыюй оболочки для треугольника
—
на
и
утах
10.5, 4.5, -10.5, 9.5, 10, 10. Поскочьку знаки .vmjn и xmiW, а также ymin
противоположны, то луч пересекает эту прямоугольную оболочку.
(см. разд. 5.12). Более полно приведенные рассуждения проиллюстпроиллюстрируем
-
примере.
пересечения.
значения
5.5, 9.5. 5, 15. Опять шаки лт;п и л"тих. а также ymin и >'тах противоположны;
поэтому
координат уравнение плоскости
датечь расположен
в
бесконечности
все лучи параллельны оси z.
что
углы
прямоугольника
на
положительной
полуоси х.
Следовательно,
треугольника таково:
3x + v + 4z- 120
расположены
точках
Р, A0, 5, 10),
Зл + у + 4z
и
-
43
=
0
пересечение происхочит при
A7.5, 15, 10), а ее радиус равен 12.5. Значения *min, хтм, _vmin, j>mus, zmin, ггпач для
прямоугольной оболочки этого прямоугольника равны соответственно 10, 25, 5, 25,
10, 10.
Гл. 4. Удаление невидимых линий и поверхностей
0
Р,A0, 25, 10),
Р3B5. 25, 10), Я4B5, 5, 10). Центр его сферической оболочки расположен в точке
368
=
В преобразованной системе координат оно имеет вид (см. разд. 4.2):
Ось х проходит через точку @, 0) на растре. Напомним,
в
2 = D3
369
поэ-
и для треугольника. В исходной системе коордилуч пересекает эту оболочку
Пример 4.24. Алгоритм трассировки лучей
Снова возьмем прямоугольник и протыкающий его треугольник, которые уже расрассматривались в примерах 4.19. 4.22 и 4.23. Для простоты предположим, что наблю-
-5.5, 9.5,
-
Зл:
-
>-)/4
=
43/4
=
10.75
4.13. Алгоритм определения вичимых поверхностей
Эта точка лежит внутри треугольника и заносится в список точек
пересечения.
Список точек пересечения не пуст. Максимальным является значение
=
z
.75, и треугольник является видимым. Обратное преобразование к исходной систе-
системе коорлинат дает точку пересечения
гочке
B0, 15), изображается с атрибутами-треугольника.
Две модификации
повышают его
понятии
B0.5, 15.5, 10.75). Пиксел, соответствующий
этого
эффективность. Первая модификация основывается на поня-
кластерных групп
Например,
простого алгоритма заметно повыша-
предположим,
пространственно
что
сцена
связанных
состоит
из
объектов.
стола,
на
На-
котором
фруктами и блюдо с конфетами. В вазе лежат апельяблоко, банан и груша. Блюдо содержит несколько конфет
стоят ваза с
апельсин,
форм и цветов. Вводятся сферические оболочки для групп
или кластеров связанных объектов, например для вазы и всех плоплодов в ней, для блюда и всех конфет в нем, а также для стола и всех
предметов на нем. Сферические оболочки, охватывающие более
чем один объект, называются сферическими
кластерами. Если это
необходимо, то можно ввести и прямоугольные кластеры. ВводитВводится, кроме того, наибольший сферический кластер, именуемый сфесферой сцепы, которая охватывает все объекты в этой сцене. Затем
сферические оболочки обрабатываются в иерархическом порядке.
Если луч не пересекает сферу сцены, то он не может пересечь и ни
разных
объектов. Следовательно, пиксел, соответствующий
этому лучу, будет изображен с фоновым значением интенсивности.
Если же луч пересекает сферу сцены, то на пересечение с лучом
одного
из
ее
сферические кластеры и сферические оболочки объекобъектов, не содержащихся ни в одном из сферических кластеров, но
принадлежащих кластеру сцены. Если луч не пересекает сферичепроверяются
сферический кластер,
то сам этот
кластер и все объекты или кластеры, со-
содержащиеся в нем, исключаются из
Если
дальнейшего рассмотрения. Ес-
же луч
пересекает кластер, то эта процедура рекурсивно повтоповторяется до тех пор, пока не будут рассмотрены все объекты. Если
луч
пересекает
сферическую оболочку
некоего
объекта
в
какой-
нибудь точке, то этот объект заносится в список активных объекобъектов.
Эта процедура значительно сокращает количество вычислений
точек пересечения луча со
сферическими оболочками
и тем самым
эффективность всего алгоритма.
Вторая модификация использует упорядочение по приоритету,
чтобы сократить число объектов, для которых вычисляются переповышает
пересечения с лучом.
370
объектов. После рассмотрения всех объектов сцены преобпо присписок пересеченных объектов упорядочивается
преобразованный
приоритету глубины (см.
4.8). Для определения приоритетного
оболочек или напорядка можно использовать центры сферических
разд.
наибольшие (наименьшие) значения z прямоугольных оболочек. Переобъектов опредеПересечения луча с объектами из списка пересеченных
как ранее указыопределяются в порядке их приори гетов. К сожалению,
в
в
4.8, точка пересечения луча с первым из объектов
указывалось
разд.
не
приоритетам списке пересеченных объектов
обязательно будет видимой. Необходимо определить точки пересеобъектами из мнопересечения луча со всеми потенциально видимыми
упорядоченном
множества
по
\О\ (подробности см. в разд. 4.8) и занести их в
список пе-
этот
пересечений. Затем модифицированный алгоритм упорядочивает
и в простом алгоритме. К
список пересечений так, как это делалось
счастью, множество
[Q] потенциально видимых объектов обычно
пересеченных лучом.
Обе эти моСледовательно, эффективность алгоритма возрастет.
значительно меньше числа
объектов
в
списке
модификации применимы также и к общему алгоритму трассировки
и прозрачность, колучей, учитывающему отражение, преломление
который обсуждается в разд. 5.12.
обИзложенный выше простой алгоритм не использует того
обстоятельства,
что некоторые
нелицевыми и их можно
грани многогранника являются
не
сразу удалить,
нели-
учитывается здесь и возмож-
когерентность сцены. Например, несуществен порядок обработэтих пикселов в порядке
обработки пикселов. Вместе с тем рассмотрение
позволило бы воспользоваться в
сканирования строки развертки
возможная
алгоритме
когерентностью
сканирующих
строк.
Другой
подход
подразделении сцены в духе алгоритма Варбы к уменьшенока, причем учет когерентности областей привел
может заключаться в
уменьшению числа
объектов, рассматриваемых для каждого луча и, следо-
эффективности алгоритма. Хотя использоприемов повышает эффективность алгоритма
следовательно, к повышению
использование
подобных
определения видимости непрозрачных
невозможно
поверхностей,
их
невозмож-
применить в общем алгоритме трассировки лучей, который
учитывает
отражение, преломление
алгоритме учтено отражение,
прозрачность. Например,
и
то
объект, который
учи-
если
полностью
за-
объектом, может оказаться видимым, как отражение
является
от третьего объекта. Поскольку метод трассировки лучей
методом
объекта к лучом, как это делается в изложен-
непрозрачных
поверхностей, обсуждавшиеся в предыдущих разделах,
371
Алгоритм определения видимых поверхностей
грубой силы, алгоритмы
определения видимости непро-
простом алгоритме, объект помещается в список пересе-
Гл. 4. Удаление невидимых линий и поверхностей
в
закрыт другим
Вместо того, чтобы немедленно производить вы-
вычисление пересечения
изложенном выше
ценных
4.13.
яв-
более эффективными,
ляются
и именно ими
нужно
пользоваться1).
Рот [4-46] указал, что алгоритм трассировки лучей можно исиспользовать
также
При этом
тел.
и
для
создания
каркасных чертежей сплошных
что
предполагается,
порождаются
лучи
порядке,
в каком
происходит сканирование экрана,
слева
направо.
Получающаяся процедура такова:
т. е.
в
том
по-
сверху вниз и
отличается
видимой поверхности для
от
ПикселОс, у
Пиксел(л*
—
1, у)
1), то изобразить это г пиксел. В противпротивном случае пиксел не изображать.
или для
рассмотрение этого вопроса не входит в задачу данной книги. Однако
для иллюстрации этого подхода приведем один
объем любого
аппроксимируя
Это
сплошного тела
суммой
его
маленьких
проделать,
пример. В
можно определить,
прямоугольных
породив
аппрокси-
объем
множество
где
lx и lv
методов
каждого
—
=
/v/v[(z,
его с оьею Z-,
как
это
было описано вы-
прямоугольного параллелепипеда
будет ра-
-
z2) + (z3 -z4) +
•
•
•
+ (z „-, -z „)]
расстояние между лучами по горизонтали и вертикали
соответственно.
Каждое слагаемое
(г,_,
участок луча, лежащий внутри заданного
следовательно, равен сумме
место
на ос-
использованием
параллельной обработки.
4.14. РЕЗЮМЕ
В предыдущих разделах детально обсуждалось несколько основных
алгоритмов,используемых для решения задачи удаления невидимых
или
—
<:,) представляет собой
тела.
Объем тела, следо-
поверхностей. Не следует думать, будто эти алгоритмы
представляют собой все,
идеи, читатель сможет
параллельных лучей,
равен:
V
имеют
ребер тел, ограни-
окрестностях
сверхбольших интегральных схем (СБИС) с
параллелепипедов.
направления этого луча. Если подвергнуть луч
переносу, совмещающему
то
основе
линий
пересечения каждого луча с заданным объемом вычисляются и упо-
выше,
где
Ввиду внутренне присущей алгоритму трассировки лучей паралодинаково и
параллельности вычислений (здесь все тучи обрабатываются
частно-
расположенных на определенных расстояниях друг от друга. Точки
упорядочиваются вдоль
например в
тела,
криволинейными поверхностями.
ограниченных
появления
можно
элементов
-
Алгоритм трассировки лучей можно использовать, кроме того,
для определения физических свойств сплошного тела. Полное рас-
частности,
изменения,
быстрые
тех
независимо друг от друга) его можно реализовать аппаратно
Если видимая поверхность для Пиксел(лг, у) соответствует фону
или
нее определяются объемы
к
применительно
что имеется.
Однако, усвоив изложенные
разбираться в новых алгоритмах по мере их
или самостоятельно создавать
алгоритмы применитель-
конкретному приложению.
Например, недавно предложенный Хеджли [4-47] алгоритм удаудаления невидимых линий основан
на
идеях, продемонстрированных
алгоритме, использующем список приоритетов, который принадпринадлежит Ньюэлу, Ньюэлу и Санча (разд. 4.8), в алгоритме разбиения
в
области Варнока (разд. 4.4), в алгоритме построчного сканировасканирования Уоткинса (разд. 4.9) и в тестах пересечения и видимости, встревстречающихся в разных разделах данной главы. Этот алгоритм работаработает в
или невыпространстве объекта, получает на входе выпуклые
невыпуклые многоугольники,
а оценка его
эффективности линейно зави-
объектов.
зависит от числа
Другим примером является предложенный Азертоиом [4-48]
обьемов всех таких прямоугольных паралле-
мо-
лучей. Точность можно повысить, умеренно увеличив объем вычис-
модифицированный интервальный алгоритм построчного сканировасканирования (см. разд. 4.11), который используется для визуализации сиен,
вычислений
получающихся
параллелепипедов. Точность результатов зависит от числа использованных
и
объемы
более
рекурсивно уменьшив размер «пиксела», в том случае, если
смежных
чем
на
прямоугольных параллелепипедов
заранее заданную
величину.
различаются
При таком подходе точ-
сплошных
тел.
в
системе
Внутренний
конструктивного модеаирования
цикл
этого
алгоритма
Экспериментальные опенки алгоритмов, описанных в предыдущих разделах,
полученные на программах, написанных на одном языке и запущенных на одном выпримерах 4.19, 4.22—4.24, связаны
между собой следующим отношением: Трассировка лучей: Варнок: Уоткинс: Сканивычислительной системе, для сиены, описанной
Сканирование с
372
г-буфером: г-буфер
~
в
и
поверхностей
чтобы
было
(см. разд. 4.13). Азертон ука-
модифицированный интервальный алгоритм поменьше времепострочного сканирования требует примерно в 60 раз
указывает,
что
времени,
обычный алгоритм трассировки лучей.
чем
этот
9.2:6.2:2.1:1.9:1.
Гл. 4. Удаление невидимых линий
так,
реализовать одномерные теоретико-множественные
польоперации, необходимые для моделирующей системы, которая
можно
пользуется алгоритмом трассировки лучей
!)
изменен
сплош-
373
4.14. Резюме
4.15. ЛИТЕРАТУРА
4-19 Schumacker, R. A., Brand. В., Gilliland, M., and Sharp. W., "Study for Applying
Computer-generated Images to Visual Simulation." U.S. Air Force Human ResourResources
4-1 Sutherland. Ivan E., Sproull, Robert F., and Schumacker, R. A., "A CharacterizaCharacterization of Ten Hidden-Surface Algorithms." Computing Surveys. Vol. 6. pp. 1-55,
1974.
4-2 Williams. Hugh, "Algorithm 420, Hidden-Line Plotting Program," CACM, Vol.
15, pp. 100-103, 1972.
4-3 Wright, T. J, "A Two-Space Solution to the Hidden Line Problem for Plotting
Functions of Two Variables," IEEE Trans.
Compuu, Vol. C-22, pp. 28-33, 1973.
Masked Threc-Dimensional Plot Program
4-4 Watkins, Steven, L., "Algorithm 483,
with Rotations," CACM, Vol. 17, pp. 520-523, 1974.
4-5 Butland, J., "Surface Drawing Made Simple." CAD Journal, Vol. 11, pp.
19-22.
1979.
4-6 Gottlieb, M.."Hidden Line Subroutines for Three Dimensional
Vol. 3. No. 5, pp. 49-58, 1978.
Lab. Tech.
Rep., AFHRL-TR-69-14, Sept. 1969, NTIS AD 700 375.
4-20 Fuchs, H., Abram, G. D., and Grant, E. D., "Near Real-Time Shaded Display of
Rigid Objects." Computer Graphics, Vol. 17, pp. 65-72, 1983 (Proc. SIGGRAPH
83).
4-21 Wylie, C, Romney, G. W., Evans, D. C. and Erdahl, A. C, "Halftone PerspecPerspective Drawings by Computer," FJCC 1967, Thompson Books. Washington, D.C.,
pp. 49-58.
Bouknight, W. J., "An Improved Procedure for Generation of Half-tone Computer
Graphics Representations," University of Illinois Coordinated Science Lab. Tech.
Rep., R-432, Sept. 1969.
4-23 Bouknight, W. J., and Kelly, К. С, "An Algorithm for Producing Half-tone
Computer Graphics Presentations with Shadows and Movable Light Sources," SJCC
4-22
Plotting," Byte,
1970, AFIPS Press, Montvalc, N. J. pp. 1-10.
4-24 Bouknight, W. J., "A Procedure for Generation of Three-dimensional Half-toned
4-7 Roberts, L. G., "Machine Perception of Three Dimensional Solids," MIT Lincoln
Computer Graphics Representations." CACM, Vol. 13, pp. 527-536, 1970.
4-25 Watkins, G. S., "A Real-Time Visible Surface Algorithm," University of Utah
Computer Science Dept. Tech. Rep., UTEC-CSC-70-101, June 1970, NTIS AD
Rcpl. TR 315, May 1963. Also in J. T. Tippet et al. (eds.). Optical and
Electro-Optical Information Processing, MIT Press. Cambridge pp. 159-197, 1964.
4-8 Petty, J. S.. and Mach, K. D.. "Contouring and Hidden-line Algorithms for Vector
Graphic Displays," Air Force Applied Physics Lab. Rep., AFAPL-TR-77-3, Jan.
Lab.
1977, ADA 040 530.
4-9 Rogers, David, F., Meier, William, and Adlum, Linda, "Roberts Algorithm," U.S.
Naval Academy, Computer Aided Design/Interactive Graphics Group
Study. 1982,
unpublished.
4-10 Warnock, John. E., "A Hidden Line Algorithm for Halftone Picture Representa-
Representation," University of Utah Computer Science Dept. Rep., TR 4-5, May 1968, NTIS
AD 761 995.
4-11 Warnock. John. E. "A Hidden-Surface Algorithm for Computer Generated Half-
Pictures," University of Utah Computer Science Dept. Rep., TR 4-15, June
1969, NTIS AD 753 671.
4-12 Weiler, K., and Atherton, P., "Hidden Surface Removal Using Polygon Area
Sorting," Computer Graphics, Vol. 11, pp. 214-222 (Proc. SIGGRAPH 77).
4-13 Catmull, Edwin, "A Subdivision Algorithm for Computer Display of Curved SurSurfaces," Ph.D. Thesis, University of Utah, Dec. 1974. Also UTEC-CSc-74-133, and
NTIS A004 968.
Halftone
4-14 Catmull, Edwin, "Computer Display of Curved Surfaces," Proc. IEEE Conf.
Comput. Graphics Pattern Recognition Data Struct., May 1975, p. 11.
4-15 Cohen, Elaine, Lyche, Tom, and Riescnfeld, Richard, F., "Discrete B-splines
and Subdivision Techniques in Computer-Aided Geometric Design and Computer
Graphics," Computer Graphics and Image Processing, Vol. 14, pp. 87-111, 1980.
Also University of Utah, Computer Science Dept. Rep., UUCS-79-117, Oct. 1979.
4-16 Newell, M.E., Newell, R. G., and Sancha, T. L., "A New Approach to the Shaded
762 004.
4-26 Myers, A. J., "An Efficient Visible Surface Program,"
Report to the NSF, Ohio
State University Computer Graphics Research Group, July 1975.
4-27 Romney, G. W., Watkins, G. S., and Evans, D. C, "Real Time Display of
Computer Generated Half-tone Perspective Pictures," IFIP 1968, North-Holland,
Amsterdam, pp. 973-978.
4-28 Hamlin, G., and Gear, C, "Raster-Scan Hidden Surface Algorithm Techniques,"
Computer Graphics, Vol. II, pp. 206-213, 1977 (Proc. SIGGRAPH 77).
4-29 Jackson, J. H., "Dynamic Scan-converted images with a Frame Buffer Display
Device," Computer Graphics, Vol. 14, pp. 163-169, 1980 (Proc. SIGGRAPH 80).
4-30 Archuleta, M., "Hidden Surface Line Drawing Algorithm," University of Utah
Computer Science Dept. Tech. Rep., UTEC-CSc-72-121. June 1972.
4-31 Blinn, J. F., "A Scan Line Algorithm for the Computer Display of Parametrically
Defined Surfaces," Computer Graphics, Vol. 12, 1978 (supplement to Proc. SIGSIGGRAPH 78); sec also Ref. 4-33.
4-32 Whitted, Т.. "A Scan-line Algorithm for Computer Display of Curved Surfaces,"
Computer Graphics, Vol. 12, 1978 (supplement to Proc. SIGGRAPH 78); see also
Ref. 4-33.
4-33 Lane, J. M., Carpenter, L. C, Whitted, Т., and Blinn, J. F.. "Scan Line Methods
for Displaying
Parametrically Defined Surfaces," CACM, Vol.
23, pp.
23-34,
1980.
4-34 Lane. J. M.. and Carpenter, L. C, "A Generalized Scan Line Algorithm for the
4-18 Schachter, Bruce J., Computer Image Generation, John Wiley, New York, 1982.
Computer Display of Parametrically Defined Surfaces," Computer Graphics and
Image Processing, Vol. 11, pp. 290-297, 1979.
4-35 Clark, J. H., "A Fast Scan-line Algorithm for Rendering Parametric Surfaces,"
Computer Graphics, Vol. 13, 1979 (supplement to Proc. SIGGRAPH 79).
4-36 Kunz, K. S., Numerical Analysis, McGraw-Hill, New York, 1957.
4-37 Kajiya, J. Т., "Ray Tracing Parametric Patches," Computer Graphics, Vol. 16, pp.
245-254. 1982 (Proc. SIGGRAPH 82).
374
375
Picture Problem," Proc. ACM Nad. Conf., 1972, pp. 443-450.
4-17 Newell, M. E., "The Utilization of Procedure Models in Digital Image Synthesis."
Ph.D. Thesis. University of Utah, 1974. Also UTEC-CSc-76-218 and NTIS AD/A
039 008/LL.
Гл. 4. Удаление
невидимых линий и поверхностей
Литература
4-38 Porter, Т., "Spherical Shading." Computer Graphics, Vol. 12, pp.
282-285, 1978
(Proc. SIGGRAPH 78).
4-39 Porter, Т., "The Shaded Surface Display of Large Molecules," Computer Graphics,
Vol. 13. pp. 234-236, 1979 (Proc. SIGGRAPH 79).
4-40 Staudhammer, J., "On the Display of Space Filling Atomic Models in Real Time,"
Computer Graphics, Vol. 12, pp. 167-172, 1978 (Proc. SIGGRAPH 78).
4-41 Appel, A., "Some Techniques for Shading Machine Renderings of Solids," AFIPS
1968 Spring Joint Comput.
Построение реалистических
изображений
Conf., pp. 37-45.
4-42 Goldstein, R. A., and Nagel, R.,
-D
Visual Simulation," Simulation, pp.
25-31,
January 1971.
4-43 Kay, Douglas S., "Transparency, Refraction and Ray Tracing for Computer SynSynthesized Images," Masters thesis, Program of Computer Graphics, Cornell Univers4-44
University, Jan. 1979.
Kay, Douglas, S., and Grcenberg, Donald, "Transparency for Computer Synthe-
5.1. ВВЕДЕНИЕ
Synthesized Images," Computer Graphics, Vol. 13, pp. 158-164, 1979 (Proc. SIGGRAPH
79).
Построение реалистических изображений
и
так
Vol. 23, pp. 343-349 (Proc. SIGGRAPH 79).
4-46 Roth. Scott D., "Ray Casting for Modeling Solids." Computer Graphics and Image
энергия,
Ref. Pub. 1085, March 1982.
4-48 Atherton, Peter R., "A Scan-line Hidden Surface Removal Procedure for ConstructConstructive Solid Geometry," Computer Graphics, Vol.
17, pp. 73-82, 1983 (Proc. SIG-
SIGGRAPH 83).
4-49 Whitted, Turner, and Weimer, David M., "A Software Testbed for the DevelopDevelopment of 3D Raster Graphics Systems," ACM Trans, on Graphics, Vol.
1, pp. 43-
58, 1982.
после
вырабаты-
реакций
результате физических
мозгом. Восприятие
вырабатываются электроимпульсы, воспринимаемые
свойство. Психология зрительного восприятия
это
и химических
глаз, где в
—
приобретаемое
тема выхо-
ней много написано, однако эта
широко изучалась, и о
хокниги. Проблемы зрительного восприятия
выходит за рамки данной
книге
хорошо описаны в
[5-1].
Он
в
В
которой
есть
центре задней
два
рецепторов:
типа
полусферы
глаза
колбочки
Роберте Л. Автоматическое восприятие трехмерных объектов.— Интегральные
роботы.— М.: Мир, 1973, с. 162—208.
почти
чувствительных только к сравнительно
освещенности, причем каждая из них присоединена
Колбочки позволяют различать
находится
75—150 млн.
уровням освещенности.
несколько палочек,
детали.
палочек,
и
палочки.
собрано 6—7 млн. колбочек,
высоким
4-7
имеет
очень сложная система.
Человеческий глаз
около 20 мм. Воспринимаемый
сферическую форму с диаметром
на сетчатке гласвет с помощью гибкого хрусталика фокусируется
—
глаза,
ЛИТЕРАТУРА НА РУССКОМ ЯЗЫКЕ
процессы. Свет, т. е. электромагнитная
попадает в
взаимодействия с окружающей средой
психологические
4-45 Whitted, J. Т., "An Improved Illumination Model for Shaded Display," CACM,
Processing, Vol. 18, pp. 109-144, 1982.
4-47 Hedgley, David R. Jr., "A General Solution to the Hidden-Line Problem," NASA
физические,
включает как
уровням освещен-
отдельному нерву.
к
мелкие детали.
В сетчатке также
чувствительных
к
очень
низким
К одному нерву присоединено сразу
поэтому они
не
не-
способны различать мелкие дета-
Интересно, что цвет воспринимается
только
колбочками, т. е.
колбочки теряют свою чувствипри низкой освещенности, когда
чувствительность, предметы кажутся черно-белыми.
Из опытов известно, что чувствительность
глаза к
яркости све-
логарифмическому закону. Пределы чувствитель1010, однако глаз не
чувствительности к яркости чрезвычайно широки, порядка
света изменяется по
в состоянии одновременно воспринять
реагирует на гораздо
377
5.1. Введение
весь этот диапазон. Глаз ре-
меньший диапазон значений относительно
ярко-
Рис. 5.1. Одновременный контраст.
Рис. 5.2. Эффект полос Маха: (а) кусочно-линейная
с
функция интенсивности
сти,
распределенный
вокруг уровня
адаптации
к
освещенности.
Чувствительность к относительной яркости имеет порядок
100—150 B.2 логарифмической единицы). Скорость адаптации к
яряркости неодинакова для различных частей
сетчатки, но тем не менее
очень высока.
Экстремумы диапазона относительной яркости вос-
черный и белый.
Глаз приспосабливается к «средней» яркости обозреваемой сце-
воспринимаются соответственно как
сцены; поэтому
темном
область с постоянной яркостью
(интенсивностью) на
фоне кажется ярче или светлее, чем на светлом фоне. Это
явление называется
одновременным контрастом (рис. 5.1).
Яркость
штата Юга,
функция интенсивности, (Ъ) функ-
непрерывной первой производной. (С разрешения
университета
[5-2].)
Эффект полос Маха особенно хорошо
полутоновых
интенсивность
заметен на
Если
поверхностях, заданных многоугольниками.
вектора нормногоугольников определяется с учетом направления
интенсивность будет резнормали, то на ребрах этих многоугольников
создавать сгла-
Эффект полос Маха, мешающий глазу
на рис. 5.3, а. Увеличивая колисглаженное изображение сцены, виден
его можно ослабить, но полностью
количество полигональных граней,
уничтожить нельзя (рис. 5.3, Ь).
резко меняться.
1
квадрата на шкале от 0 до
равна
0.5, а
охватывающего
0.2 (рис. 5.1, а). На рис. 5.1, b яркость центцентрального квадрата такая же, а охватывающего
0.8. То же самое
центрального
—
;
—
происходит при наблюдении уличного
фонаря днем и ночью: если
смотреть на фонарь днем (рис. 5.1, а), то средняя освещенность
сцены BbiLLe, чем ночью (рис. 5.1, Ь). Поэтому уровень контраста
ниже,
и
кажется,
что
интенсивность
(яркость) фонаря или цент-
центрального квадрата на рис. 5.1, а меньше. Похожее на одновременодновременный контраст явление существует и для цветов.
Еще одним свойством глаза, имеющим значение для машинной
графики, является то, что границы областей постоянной интенсивинтенсивности кажутся
более яркими, в результате чего области с постоян-
постоянной интенсивностью
воспринимаются,
интенсивность. Это явление называется
имени
как
имеющие
переменную
эффектом полос Маха по
открывшего его австрийского физика Эрнста
Маха. Эффект
Маха наблюдается, когда резко изменяется наклон кривой
интенсивности. Если кривая интенсивности
вогнута, то в этом месполос
месте поверхность кажется светлее, если
выпукла
378
Гл. 5. Построение реалистических
изображений
—
темнее
(рис. 5.2).
тоскими полигональ5 3 Эффект полос Маха на поверхностях, образованных
с 32 гранями. (С разрешения
модель с 8 гранями, (б) модель
полигональными
Рис
"гранями: (а)
университета
379
штата
5.1. Введение
Юта, [5-2].)
5.2. ПРОСТАЯ МОДЕЛЬ ОСВЕЩЕНИЯ
Световая энергия, падающая на
п
поверхность, может быть поглощепоглощена, отражена или пропущена. Частично она
поглощается и преврапревращается в
тепло,
а
частично
отражается
можно увидеть, только если он
свет, то он невидим и называ-
абсолютно черным телом. Количество
называется
пропускается. Объект
отражает или пропускает свет; если
объект поглощает весь падающий
же
или
отраженной или пропущенной энергии зависит от
поглощенной, отраженПри
длины волны света.
освещении белым светом, в
котором интенсивность всех длин волн
снижена
поглощается почти весь
свет, то
небольшая его часть
определенные длины
волн,
—
то
объект кажется черным,
а если только
белым. Если поглощаются лишь
у света,
исходящего от
определен-
объекта, изменяется
энергии и объект выглядит цветным. Цвет объекта
определяется поглощаемыми длинами волн.
распределение
Свойства отраженного света зависят от
формы источника света, от ориентации и свойств
поверхности.
Отраженный от объекта свет может также быть
диффузным или
зеркальным. Диффузное отражение света
происходит, когда свет
бы проникает под поверхность
вновь
объекта, поглощается, а затем
испускается. При этом положение наблюдателя не имеет
значения, так как диффузно отраженный свет
по всем
по
рассеивается равномерно
Зеркальное отражение происходит от внеш-
направлениям.
внешней поверхности объекта.
Свет точечного источника
теля
зна-
объекты, на которые не падает прямой свет, кажутся чер-
поэтому
объекты реальных сцен падает еще и рассеянный
обстановки, например от стен
свет, отраженный от окружающей
черными. Однако
на
источ-
Рассеянному свету соответствует распределенный
большие
Поскольку для расчета таких источников требуются
комнаты.
источник.
строения, направления
и
как
Рис. 5.4. Диффузное отражение.
примерно одинаково, объект выглядит серым. Если погло-
вычислительные затраты, в машинной графике
коэффициент рассеяния
—
они заменяются на
константу, которая входит
E.1)
коэффициент дифдиффузного отражения рассеянного света @ ^ ка $; 1).
1а
где
интенсивность
—
рассеянного света, ка
—
Пусть даны два объекта, одинаково ориентированные
отражается
от идеального
рассеива-
закону косинусов
него.
Если найти
их интенсивность по
данной формуле, то она ока-
нормалью к поверхности,
пропорциональна квадрату расстояния от источника,
т. е.
I = Iikdcos6
точечного
интенсивность отраженного
источника,
kd
—
О<0<л/2
света, //
коэффициент
—
отражения
—
от
объектом. Коэффициент диффузного
материала и длины волны света,
обычно считается постоянным.
освещения
отражения kd зависит
но в простых моделях
освеще-
Поверхность предметов, изображенных при помощи
простой
модели освещения с
ламбертовым диффузным отражением, выгляблеклой и матовой.
выглядит
одинаковой. Это значит, что, когда предметы перекрывают-
их
различить,
невозможно
хотя
интенсивность
.
объект, ле-
Если предположить,
преобразования сцены в качестве коэффициента пропорциональности
d от центра проекдля диффузного члена можно взять расстояние
проекции до объекта. Но
то
если центр
проекции лежит близко к объекту,
\/d2 изменяется очень быстро, т. е. у объектов, лежащих приразница интенсивКак показывает опыт, большей реали-
от источника,
примерно на одинаковом расстоянии
ностей
чрезмерно
велика.
реалистичности можно добиться
при линейном затухании. В этом случае
модель освещения выглядит так:
-cose.
Предполагается, что источник точечный,
Гл. 5. Построение реалистических
изображений
и
обратно
бесконечности, то диффузный член
В случае перспективного премодели освещения обратится в нуль.
-К
380
света
что источник света находится в
интенсивность то-
диффузного
окажется
лежащий дальше от него, должен быть темнее.
(О ^ kd ^ 1), в
угол между направлением света и
нормалью к
поверхности (рис. 5.4). Если в > тг/2, то источник
света располо-
расположен за
относи-
от неотносительно источника, но расположенные на разном расстоянии
перекрываются,
—
формулу в
линейной комбинации с членом Ламберта:
0<#<л/2
/ =/Ж+ //*<* cos 0
Ламберта: интенсивность отраженного
света пропорциональна
косинусу угла между направлением света и
где /
в
381
5.2. Простая модель освещения
о
п
Рис. 5.5. Зеркальное отражение.
где К
произвольная постоянная.
—
Если предполагается,
что точка
бесконечности, то d определяется положением объекта, ближайшего к
точке наблюдения. Это означает, что ближайший объект освещаетосвещается с полной интенсивностью источника,
уменьшенной.
к
а
более далекие
—
отражения.
с умень-
E.3)
i, Я) cos" a
длины волны
падающего света
Основное
уравнение Френеля приводится
геометрической
оптике.
в
и
свойств вещества. Основ-
любой книге по геометричес-
Зеркальное отражение света является направленным.
Угол отражения от идеальной отражающей поверхности (зеркала)
любом другом положении наблюдатель не
зеркально отраженный свет. Это означает, что вектор на-
равен углу падения,
в
наблюдения S (рис. 5.5) совпадает с вектором отражения R, и угол а
равен нулю. Если поверхность
достигающее
не
идеальна,
то
количество
света,
наблюдателя, зависит от пространственного распре-
распределения зеркального отраженного
кривая отражения, представляющая отношение зерзеркально отраженного света к падающему как функцию угла падения
где w (/,
цветов.
Интенсивность зеркально отраженного света зависит от угла па-
видит
Рис. 5.6. Приближенные функции пространственного распределения для зеркального
Для цветных поверхностей модель освещения применяется
каждому из трех основных
падения,
-7Г/2
наблюдения находится в беско-
света.
У
поверхностей
гладких
распределение узкое или сфокусированное, у шероховатых
—
более
/
и
\)
длины
—
волны
\; п
пространственное распределение
степень, аппроксимирующая пространстзеркально отраженного света. На рис. 5.6 по—
показана функция cos" а при -тг/2 ^
большие
п
значения
дают
а
^ 7г/2 для различных п : боль-
сфокусированные пространственные распре-
распределения характеристик металлов и других
а малые
—
блестящих поверхностей,
более широкие распределения для
неметаллических по-
поверхностей, например бумаги.
Коэффициент зеркального отражения зависит от угла падения,
однако даже
при перпендикулярном падении зеркально отражается
либо поглощается, либо отражаетотражается диффузно. Эти соотношения определяются свойствами вещества
только часть света, а остальное
длиной волны. Коэффициент отражения для некоторых неметалнеметаллов может быть всего 4%, в то время как для металлических
более 80%. На рис. 5.7, а коэффициенты отражения
материалов
и
широкое.
Благодаря зеркальному отражению на блестящих предметах попоявляются
свет
световые
блики. Из-за
того
что
зеркально
отраженный
сфокусирован вдоль вектора отражения, блики при движении
наблюдателя тоже перемещаются. Более того,
отражается
от внешней
поверхности
так
как
свет
отра-
(за исключением металлов и неко-
красителей), то отраженный луч сохраняет свойстсвойства падающего. Например, при освещении блестящей синей поверхповерхности белым светом возникают белые, а не синие блики.
некоторых твердых
—
падении света показаны как
как функции угла падеb
для типичных веществ при нормальном
функции длины волны, а на рис. 5.7,
падения. Обратите внимание, что при падении под скользящим углом
(в
90°) отражается весь падающий свет (коэффициент отражения
100%).
Объединяя эти результаты с формулой рассеянного света и дифдиффузного отражения, получим модель освещения:
—
-
В простых моделях освещения обычно пользуются эмпиричесэмпирической моделью Буи-Туонга Фонга [5—2], так как физические свойства
зеркального отражения
382
Гл. 5.
очень сложны.
/
1ака + -~—{Ц cos в + vv(/, /)cos" a)
d + К
Модель Фонга имеет вид:
Построение pea пистическич изображений
=
383
5.2. Простая
модель освещения
E.4)
RS
определяющие направления отрамодель освещения для
отраженного луча и наблюдения. Следовательно,
о
где R и S
—
единичные векторы,
одного источника
определяется как
=
/
[вка +
n
E.7)
L) + Ш S)"]
•
•
К
•е
-е-
2
4
6
Длина волны X
8
30
60
Угол падения в
(х10~3)
а
Рис.
5.7.
Рассмотрим эту простую модель на примере.
90
Пример 5.1. Простая модель освещения
Ь
Предположим, что на рис. 5.5 в точке Q поверхности
света и наблюдения следующие:
Кривые отражения.
Функция
w
константой
(/, \) довольно сложна,
поэтому ее
обычно
j
n
=
L
=
i+
S
=
i +
заменяют
ks, которая либо выбирается из эстетических соображе-
соображений, либо определяется экспериментально. Таким образом,
Тогда вектор отражения R
kd cos в + ks cos" a)
1.5
j + 0.5k
есть
R
E.5)
В машинной графике эта модель часто называется функцией заи
применяется для расчета интенсивности
или
тона
точек
объекта или пикселов
изображения. Чтобы получить цветное изоизображение, нужно найти функции закраски для каждого из трех ос-
источника
/
=
свет
=
i + 2j + k
модели освещения, получаем
(-i + 2j-k)
n-L
=
=
h.
~\kd COS 6j + ?.v COSJ' Clj)
¦•
d-
E.6)
cos B/V6)= 35.26°
и
(i + 1.5j + 0.5k)
R-S
4.5
=
2
Применяя формулу скалярного произведения двух векторов, за-
+
B):+(lJ\(l J + A 5J + @.5J
запишем
где п
и
L
—
=
=
,
,,_
,
п
•
L
или
a
=
cos-lD.5/V2T)= 10.89°
Окончательно
единичные векторы соответственно нормали к поверх-
@.8)D.5/V2iy?]
поверхности и направления к источнику.
Точно так же
=
384
Гл. 5. Построение
1, а
-
или
количество источников.
cos в
1а
=
RS
—
света, т. е.
fcg 0.8,*а кд
будет огражаться зеркально.
элементы
+ А
0.95, т. е. 5% энергии источника поглощается. Определяя
что*
0
т
где/и
1 и интенсивность ис-
эффекты сум-
суммируются. В этом случае модель освещения определяется как
l=i
=
V(-!J+BJ+(-D2
Если имеется несколько источников света, то их
/
0, К
Объект имеет блестящую металлическую поверхность, поэтому
=
=
=
0.15 an = 5. Заметим,
Пусть
10
определяется цветом падающего.
•а^а ~г
=
в основном
основных цветов, поскольку цвет зеркально отраженного света опре-
'
d
будет в 10 раз больше, чем интенсивность рассеянного
Константа ks обычно одинакова для всех трех ос-
основных цветов.
k
2j-
Пусть на сцене находится только один объект,
закраски
векторы нормали, падающего
реалистических изображений
385
5.2. Простая
0.15+ 10@.12 +0.73)
модель
освещения
-
8.65
4.5
Вектор наблюдения почти совпадает с вс, гором отражен*
наблюдатель видит яркий бгшк. Однакс при и меч«-нии полож
"о
«=
гому в точке
Q
наблюдателя, н<
\
пример, если
S =- i
.5j
-
0.5k
to
^
-
Po
p2
—
p4
=
40*"
/
яркость
=
блика в точке Q
/
0.15 + Ю(Г Г -I- 0.2П = 3.45
значигель
э
а
5.8.
Аппроксимация
нормали к полигональной поверхности.
ОПРЕДЕЛЕНИЕ НОРМАЛИ К ПОВЕРХНОСТИ
5.3.
Из предыдущего раздела видно, что
нормаль к поверхности предпредставляет ее локальную кривизну, а
следовательно, и направление
зеркального отражения. Если известно аналитическое описание поповерхности,
нормаль вычисляется непосредственно. Но для мно-
то
поверхностей бывает задана лишь их полигональная аппрокси-
аппроксимация. Зная уравнение плоскости каждой грани, можно найти нанаправление внешней нормали (см. разд. 4.3).
Во
многих
алгоритмах удаления невидимых линий и поверхноповерхностей используются только ребра или
вершины, поэтому, для того
чтобы объединить
приближенное
заданы
к их
\
Pi
V5
осла&л ает.
Рис.
многих
v2
v,
й этом случае
их
с
моделью
освещения,
необходимо
значение нормали на ребрах и в
вершинах.
знать
Пусть за-
уравнения плоскостей полигональных
Следует обратить внимание на то, что необходимы только
внешние нормали. Кроме того, если полученный вектор не норминормируется,
конкретных
сходящимся
в
этой
вершине.
Например,
рис. 5.8 направление приближенной нормали в точке
nVl
=
о>а ii>a 4
о
+ а\ + сн)\ + (bo + b\ +
64)j + (со
(
0>
0
Y
4,
4c0,c
{ic 4
—
то его величина зависит от количества и площади
многоугольников,
а также от количества и длины
Пример 5.2. Приближенное вычисление нормали к поверхности
Рассмотрим полигональную поверхность, нзооражеиную на рис. 5.8, а. Координаты
вершин: ^(-1, -1, 1), ^A, -1, I), ^0. 1- 1), V4i~l, 1. О. У<<-2, -2. 0),
-2, 0), ^7B, 2, 0). ^8(-2, 2, 0). Это поверхность усеченной пирамиды. Урав-
^6B,
Уравнения
плоскостей для граней Р„, Р,, Р4, окружающих вершину 1 ,:
I =0
Ро:
-2 = 0
Pi
+
-л
V\ есть
-2-0
Приближенная нормаль в точке I , находится усреднением нормами к окружав
много} гольникам:
коэффициенты уравнений пло-
плоскостей трех многоугольников Р
0, PJt Р4, окружающих V v ОтмеОтметим, что если требуется найти только направление нормали, то де-
П1
=
(«0 + «1
«4I + Фо + Ь\
\
граней необязательно.
Если же уравнения плоскостей не заданы, то нормаль к вершине
определить, усредняя векторные произведения всех ребер,
пересекающихся в вершине. Еще раз рассматривая вершину
Уг на
2
а единичная
Гл. 5. Построение реалис
ких изобоамчсний
=
нормаль
ni
~
рис. 5.8,найдем направление приближенной нормали:
386
i
С\
Абсолютная величина нормали п, есть
делить результат на количество
можно
конкретных
подробнее на примере.
на
с\
конкрет-
ребер. Сильнее проявляется влияние многоугольников с большей
площадью и более длинных ребер. Рассмотрим данный метод под-
граней, тогда нормаль
общей вершине равна среднему значению нормалей ко всем
многоугольникам,
где
/
v4
IS
и
Рз
3H7
5.3. Onpeie.ieMi? норл
...
-O.4-O.3j-^0.9к
к
и
шерхи.
ти
\
j
3k
av
Заметим, что простое деление на 3 не дает единичной нормали. Векторные пропроизведения
ребер, сходящихся в вершине У v суть
V|V2®V,V4
=
4k
V,V5<g>V,V2= -2j
V,V4®ViVs
=
2k
-2i
Усрешяя векторные произведения, получаем приближенную нормаль в точке У..
с
абсолютной величиной
г' l
-2J + (8J
=
V72
a
Рис. 5.9. Расчет направления отражения
Единичная нормаль есть
Таким
-0.24i
=
-
0.24J
-*¦
образом,
E.8)
0.94k
Ну
Ry
Обратите внимание, что ненормированные нормали, полученные дв>мя способами,
различаются
как по
величине, так
и по
направлению (рис. 5.8, Ь).
Поэтому модель
в зависимости от использо-
освещения дает несколько отличающиеся результаты,
использованного метода аппроксимации.
суть х- и ^-составляющие единичных векторов
соответственно отражения и нормали.
и осью z
Обозначим угол между единичным вектором нормали
нормали по оси z есть
через В. Тогда составляющая вектора
Rx, Rv, пх, п
где
—
Когда нормаль к поверхности используется для определения ин-
изображения объекта или сцены выполняется
перспективное преобразование, то нормаль следует вычислять до
перспективного деления [1-1]. В противном случае направление норнормали будет искажено, а это приведет к тому, что интенсивность,
интенсивности
и
nz
=
0 < в < л/2
cos в
для
задаваемая моделью освещения,
Аналогично,
осью z
равен
угол
вектором
единичным
между
отражения
и
20, поэтому
R2
=
cos 26
-
2 cos' в
1
-
=
2n;
-
1
E.9)
будет определена неправильно.
Известно, что
\ + R; +R2Z
5.4.
ОПРЕДЕЛЕНИЕ ВЕКТОРА ОТРАЖЕНИЯ
и
=
Для модели освещения чрезвычайно важно правильно задавать нанаправление
был
векторов
найден
из
отражения.
наблюдения. В
В примере 5.1
данном
разделе
отражения
для
случая,
на
этой
плоскости
Щ(
Щ.
рассматриваются
углу
свет
падает
вдоль
оси
z.
начало системы коодинат перенести в точку поверхности, то
проек-
проекции нормали и вектора отражения на плоскость ху будут лежать на
388
1л. 5. Построение реалистических изображении
)
=
1
cos2 26
-
и
нормали
векторов отражения
E.8) и соотношение
п; + п: + п:
=
1
Это предположение
удобно для модели освещения с одним точечным источником. Если
одной прямой (рис. 5.9, Ь).
р
+ 1
Используя отношение х- и ^-составляющих
(рис. 5.9, а). Фонг [5-2] вывел отсюда простое решение
когда
cos22в
R
вектор отражения
угол падения равен
\-R:= \-
или
три наиболее общих метода. По закону отражения вектор падаюпадающего света, норма 1ь к поверхности и вектор отражения лежат в ододной плоскости, причем
\
=
получаем
§(«;
+
«;)=
/2>-
5.4. Определение
пек гори
^o-fiz)=1- cos2
ny
отражения
20
На первый взгляд может показаться, что вектор отражения най-
Перепишем правую часть:
найден. К сожалению, одно из этих
уравнений всегда является линейно
R
ттA
-
л2)
=
1
B cos2 в
-
IJ
-
=
1
-
B«2
-
IJ
=
4Я2A
-
Я2)
зависимым.
Запишем равенство углов падения
n-L
или
=
Ry
2п2пу
E.10)
=
Из соотношения E.8) имеем
E.11)
nxU + пу
=
n:L
E-13)
необходимое добавочное условие. Матричный
R и R_ таков:
всех уравнений с тремя неизвестными R
что
2пгпх
=
n-R
или
лд/?, + ЛуЯу + n-_R:
Rx
и отражения:
дает
вид
для
,
Когда свет падает не по оси z (например, когда источников не0
несколько), таким методом воспользоваться нельзя. Можно перенеперенести и
z;
повернуть каждый источник так, чтобы свет падал вдоль оси
однако
была параллельна оси г,
0
повернуть нормаль так, чтобы она
а точку Р поверхности принять за начало
и
проще перенести
~Rx~
-th
=
nxLz
-nx
Лу
nx
0
nx
«v
n:
—
nz U
-
nyLx
tixLy
nxLx + tiyly
R:
координат. Тогда плоскость ху будет касательной к поверхности, а
х- и
^-составляющие единичных векторов падения
будут
иметь
разные
конечно, равны.
первоначальной
z-составляющие
знаки;
этих
и
отражения бу-
векторов,
выполнить
надо
[N][R]
будут,
Для того чтобы получить результаты в первона-
ориентации,
ИЛИ
обратное преобразование.
Поскольку матрица [N]
системы нужны
не
=
[B]
является
квадратной, для решения си-
особые методы1}. В частности,
В перемещенной и повернутой системе координат
Л
=
-?,
Ry
=
Й2
-Ly
=
Lz
Этот метод особенно удобен, когда преобразования реализовареализованы
аппаратно или микропрограммно.
В третьем методе условие того, что единичная нормаль, единич-
единичный вектор падения и единичный вектор отражения лежат в одной
плоскости,
записывается при помоши их
векторных произведений.
Равенство углов падения и отражения выражается через скалярные
этих
произведения
векторов. Из данных условий получаем
5.5. ЗАКРАСКА МЕТОДОМ ГУРО
Если при построении полигональной поверхности для каждой грани
используется по одной норма пи, то модель освещения создает изо-
изображение, состоящее из отдельных многоугольников (рис. 5.10, а).
Методом Гуро [5-3] можно получить сглаженное изображение. Для
того чтобы изобразить объект методом построчного сканирования,
нужно в соответствии с моделью освещения рассчитать интенсивинтенсивность каждого пиксела вдоль
или
сканирующей строки. Нормали к по-
поверхности аппроксимируются в вершинах многоугольников так,
+
bizLx
-
L2nx)\
+
(п-Л-
(nxLy
~
~
Lxtiv)k
описано
nvR:)\ + (nxR2
-
nxRx)} + (nvRx
-
/7.x/?v)k
Векторные произведения совпадают, если равны их л-, у- и ^-со^-составляющие:
+
nzRy
n:Rx
—nyRx
г
^
п
в
—
4-
nyRz
nxRz
nxRv
—
=
=
^
ч
к
nzLy
—
nxL2
—
riyLx
—
предыдущем
разделе.
Очнако сканирующая
строка
не
обязательно проходит через вершины многоугольника (рис. 5.11).
При закраске Гуро сначала определяется интенсивность вершин
многоугольника, а затем с помощью билинейной интерполяции вывычисляется
—
как
=
интенсивность каждого
пиксела на
сканирующей строке.
nyLz
nzLx
nxLs,
E.12)
'*
Обычно этим
уравнении
E.12)
методом получают
усредненное решение,
является лишним, решение
будет точным.
но, так
как одно из
где
и
АО/АВ. Аналогично для
=
линейно интерполируются
IR
где w
между
=
=
R
получения интенсивности
интенсивности в
вершинах В и
ли-
С, т. е.
0<w< 1
w/я + О -w)Ic
BR/BC. Наконец, линейной интерполяцией по строке меж-
О и У? находится интенсивность Р, т. е.
1Р
=
г/е + A
0</< 1
t)h
~
где t = QP/OR.
Значения интенсивности вдоль сканирующей строки можно
вычислять
инкрементально. Для двух пикселов в tl
и
вы-
/2 на сканирую-
сканирующей строке
+ 0
-
ЬIц
Вычитая, получим, что вдоль строки
1р2
a
b
Рис. 5.10. Однотонная закраска многоугольников
университета штата
и
закраска
Гуро. (С разрешения
Юта.)
Рассмотрим, например, участок полигональной поверхности на
рис. 5.11. Значение интенсивности в точке Р определяется линейной
интерполяцией интенсивности в точках Q и R. Для получения ининтенсивности в точке
сканирующей строкой
стей А
и
Q
—
—
пересечении ребра многоугопьника со ска-
=
/р, + (Iq
~
ЫОг
-
n)
=
/р, + Д/Д|
5.10, b показан результат применения закраски Гуро к
полигональной аппроксимации лица, изображенного на рис. 5.10, а.
Видно, что качество изображения намного улучшилось, но при внивнимательном рассмотрении на рис. 5.10, b заметно проявление эффекэффекта полос Маха, например на скулах, вокруг глаз и на подбородке.
На рис.
Это происходит потому,
обеспечивает
лишь
что
непрерывность
такой метод интерполяции обеспечи-
значений
многоугольников, но не обеспечивает
интенсивности
вдоль
границ
непрерывности изменения ин-
нужно линейной интерпоаяцией интенсивно-
интенсивности.
ufA + (]
многоугольники.
например глаз и носа,
Еще одна проблема метода Гуро иллюстрируется на рис. 5.12, а.
В найти
Обратите внимание также на то, что контуры лица,
—
IQ
=
Если нормали к вершинам В, С, D вычислить усреднением норманормалей
к
многоугольникам,
то
они
будут одинаково ориентированы,
т. е. интенсивность в этих точках
будет равной. При линейной ин-
интерполяции от В до D значение интенсивности получится постоян-
С
Плоскость
сканирующем строки
постоянным,
и
поверхность
на данном
участке
будет выглядеть плоской.
Для изображения плавного перехода в В, С и D необходимы додополнительные многоугольники (рис. 5.12, Ь). Если же нужно сохрарезкие складки, то для предотвращения сглаживания требуеттребуется выборочное усреднение нормалей к поверхности. В примере, посохранить
показанном
справа
от
на
392
Гл. 5. Построение реалистических
изображении
х\в
вычисляется только для
#, аналогично получается nD
вычисляется
Рис. 5.11. Интерполяция закраски.
рис. 5.12,с,
как среднее для
5 5. Зяк яска методом
ГУро
граней
и
nD
слева и
.
В то
справа
одной грани
же
от
время
С. В
пс
этом
инобращаясь к рис. 5.11, получаем нормаль в Q линейной
между В и С и, наконец, в Р
интерполяцией между А и В, в R
между Q и R. Таким образом:
снова
D
—
—
=
п@
u
«пд +
A
-
м)пл
0 <
и
<
1
=
И'Пд
+
(I
—
П/?
Н')Пс
0 < И" < I
=
tnQ
+
A
-
пР
t)nK
0 <
BR/BC,
t
=
AQ/AB, w
=
=
/
<
1
QP/QR.
Нормаль вдоль сканирующей строки опять можно выразить через
прирашение,
т. е.
г\р,
где индексы
1
=
пя, + (П0
-
пя)(*2
—
/i)
=
ii/*, + Лп*Дг
и 2 указывают на расположение пискелов на строке.
На рис. 5.13 сравниваются однотонная закраска (слева), закрасРис. 5.12. Эффекты закраски
Гуро.
случае в В и D получается острое ребро, а в
как видно, например, на
С
—
плавный переход,
губах на рис. 5.10, Ь.
=
=
Закраска Гуро лучше всего выглядит в сочетании с простой момоделью с диффузным отражением, описываемой
уравнениями освеосвещения E.1) или E.2), так как
форма бликов при зеркальном отраотражении сильно зависит от
выбора многоугольников, представляюпредставляющих
Гуро (в центре), Фонга (справа). Модель освещения для левого и
среднего торов включает рассеянный свет и диффузное отражение
(уравнение E.1)), а для правого— также зеркальное отражение,
0,
благодаря которому появляются блики (уравнение E.5) с d
К
1). На рис. 5.14 сравниваются зеркальные блики при закраске
Гуро и более реалистичной закраске Фонга.
закраска
объект или поверхность.
5.6. ЗАКРАСКА ФОНГА
Закраска Фонга [5-2] требует больших вычислительных затрат, ододнако она позволяет разрешить многие
проблемы метода Гуро.
закраске
значение
он
При
Гуро вдоль сканирующей строки интерполируется значе-
интенсивности, а при закраске Фонга
используется
пиксела.
При
зеркальные
блики.
—
вектор нормали. Затем
в модели освещения для вычисления
интенсивности
этом
достигается
лучшая
локальная
аппроксимация
кривизны поверхности и, следовательно, получается более реалиреалистичное изображение. В
частности, правдоподобнее выглядят зер-
При закраске Фонга аппроксимация кривизны поверхности пропроизводится сначала
в
вершинах многоугольников путем аппроксимааппроксимации нормали в вершине (см. разд. 5.3). После этого билинейной ин-
интерполяцией вычисляется нормаль в каждом пикселе.
394
Гл. 5. Построение реалистических
изображений
Например,
Рис. 5.13. Сравнение методов закраски: слева
ва
395
—
Фонга.
(С разрешения Т. Уиттеда.)
5.6. Закраска Фонга
—
однотонная, в центре
—
Гуро, спра-
Также возникают трудности, когда любой из этих методов приприменяется при создании последовательности кинокадров.
Например,
Это прозакраска может значительно изменяться от кадра к кадру.
происходит из-за того, что правило закраски зависит от поворотов, а
обработка ведется в пространстве изображения. Поэтому, когда от
его закраска (цвет) токадра к кадру меняется ориентация объекта,
метоже изменяется, причем достаточно заметно. Дафф предлагает
Гуро и Фонга, инвариантный относительно поворота.
однотонной, ГуРассмотрим отличия трех методов закраски
закраски
метод
—
Гуро и Фонга
на
—
примере.
Пример 5.3. Закраска
b
a
Рассмотрим участок поверхности, изображенный на рис. 5.11. Уравнения четырех
плоскостей:
Рис. 5.14. Сравнение зеркальных бликов:
разрешения
университета
штата
(а) закраска Гуро, (Ь) Фонга. (С разреше-
Юта.)
2:
—л
-2.25.V
3:
Хотя метод Фонга устраняет большинство недостатков метода
Гуро, он тоже основывается на линейной интерполяции. Поэтому в
местах
разрыва первой производной интенсивности заметен эффект
Маха, хотя и не такой сильный, как при закраске Гуро. ОдОднако, как показал Дафф [5-4], иногда этот эффект проявляется
сильнее у метода Фонга, например для сфер. Кроме того, оба меполос
метода могут
привести к ошибкам при изображении невыпуклых мно-
многоугольников, например, таких,
как на рис.
сканирующая строка использует данные из вершин
5.15. Первая сканирую-
ORS, а вторая, лежащая
ниже, берет также данные вершины Р. Это может нарушить непре-
+
1 .732v
+
3 .897.V +
+
—
17
=
0
24.5
=
0
-
7 .5г
-
10z
-
5 .5=
4:
1де ось z
-4 = 0
2г
1:
11 =0
перпендикуляр к плоскости страницы, л* направлена вправо,
источник расположен в бесконечности па положительной
падающего
К
света
=
1,
равен
/у
поэтому
=
1,
L@, 0, 1). Модель освещения залана уравнением E.7),
1(
=
10, п
2.
-
ks
0.8, ktt
-
=
света
отраженного
направление
ku
0.15. Свет
=
можно
найти
откуда следует,
=
А
|пз|
=
-0.211 + 0.36J + 0.91k
=
—
К
ftv
R
2nj
=
-
2пД
2лД.
-
1
=
=
=
BХ0.91J
-
1
=
=
Вдиничпып вектор наблюдения есть
S
397
24.2°.
=
|g|
5.6. Закраска Фонга
0.66
-0.38
B)@.91К-0.21)
0.66
BX0.91 )@.36)
=
-0.38i + 0.66j + 0.66k
=
S =
0.91
E.11) имеем:
=
закраски для невыпуклого многоугольника.
=
(-0.2H + 0.36J + 0.91k)-k
что угол падения составляет примерно
Из уравнении E 9)
изображений
=
0,
падает вдоль оси г,
методом
уравнения плоскости многоугольника 3 находим нормаль
пз
5. Построение реалистических
|де d
Фота
(см.
разд. 5.4).
3. Из уравРассмофим однотонную закраску. Точка Р лежи г в многоугольнике
й- L
Гл.
вверх.
полуоси г, т. е. век гор падающе-
Угол между нормалью и вектором падающего света есть
396
—
Координаты точек В\ @.366, 1.366, 2).
источПусть век гор к точке наблюдения есть S(l, I, 1) и единственный точечный
непрерывность закраски.
Рис. 5.15. Нарушение непрерывности
а у
0.581 + 0.58J
I-
0.58k
С помошыо этого значения найдем угол между вектором отражения
и
вектором
наблюдения:
Точка Р на сканирующей строке расположена в /
определим
R
S = с-0.381 - 0.66j + 0.66k)
приблизитепыю дает 57°.
Молспь освещения E.7) для точки
•
@.581 + 0.58J + 0.58k)
=
Ip
что
=
tlQ + A
=
(.1)@ 15)+ A0'1)[@.15X0.91)+ @.8)@.55?]
=
0.15+ 10@.14 + 0.24)
-
t)IR
0.15 + 3.8
=
=
в
Q и
vcptfuiciiiicM нормалей к окружающим
ne
nc
где п|?
п:, nv n4
плоскостям,
получаем
щ + nz + пз + П4 = -3.25i + 5.63j + 25k
=
пз + П4
й/>= mG + (l-0n/?
—2.251 + 3.897J + 15.5k
уравненнП соответствующих плоскостей, единичные
=
в
пд
=
—
4.54
=
-0.121 + 0.22j + 0.97k
=
-0.141 + 0.24j + 0.96k
[-0.13 0.23 0.97]= -0.13i + 0.23j+0.97k
находим
0.96)+ 0.5 [-0.13 0.23 0.97]
0.25
@.5)[-0.14
=
[-0.14 0.24 0.97]= -0.14i + 0.24j+ 0.97k
=
-0.27i + 0.46J + 0.87k
Р равна
-0.171+ 0.3J + 0.94k
1Р
йд
=
=
кР
Интенсивность
—¦
0.5)D.59)
Тома единичный вектор отражения в Р есть
нормали суть
=
-
Интерполируя нормаль вдоль сканирующей строки,
-3.251 + 5.63J + 17.5k
=
пА
@.5)D.49) + A
=
h*
п2 + пз
выведены из
=
=
3.95
=
=
Интерполируя,
=@.4)f-0.17 0.3 0.94] + @.6)[-0.12 0.22 0.971
1-0.14 0.25 0.96]= -O.l4i + O.25j + 0.96k
@.7)(-0.12 0.22 0.97] + @.3I-0.14 0.24 0.96]
(l-w)nc
=
=
0.5.
Н суть
Для закраски Гуро необходимы векторы нормали в А. В и С на рис. 5.11. Ап-
пд
=
При закраске Фожа нормаль в Р получается путем интерполяции нормалей в А,
Затем эта нормаль используется для вычисления интенсивности Р. Единичные
С.
И.
Р дает
норма 1И
Аппроксимируя их
QP/QR
Р:
интенсивность в
0.55
=
0.15 + A0X0.15 + 0.30)
=
=
4.65
Сранним различные методы закраски:
пц
пс
=
т^т
однотонная:
|пс|
Гуро:
Фонга:
'/>
'/>
'/>
=
3 .93
=
4 .54
=
4 .65
Единичные векторы отражения:
Интенсивности
в
А. В
=
-0.33i + 0.57J + 0.76k
=
-0.24i + 0.42j + 0.87k
=
-0.27i + 0.46J + 0.84k
На
основе
простой
Варн [5-5] разработал модель освещения, включающую
специапьные эффекты, которые применяются при управлении свесветом в профессиональных фотостудиях. К ним относятся задание
=
0.15 + 10@.14 + 0.27)
=
4.25
1в
=
0.15 + 10@.15 + 0.30)
=
4.65
направления и концентрации света, а также и возможность ограни-
/с
=
0.15+ 10@.14+ 0.29)
=
4.45
ограничить
имеем
интенсивность в
//
=
область, освещаемую источником света.
В нормали Варна направление света
\Q АВ
=
0.4
н
и*
=
BR ВС
—
0.7.
независимо от
Q и R:
расположения источника
направленный
+ (I
//?
398
=
модели освещения с точечным источником из
1А
На заданной сканирующей строке
Птсрполнруя, находим
ПРОСТАЯ МОДЕЛЬ ОСВЕЩЕНИЯ
СО СПЕДИАЛЬНЫМИ ЭФФЕКТАМИ
разд. 5.2
С равны
и
5.7.
+ A
~
~
иIв
w)/c
=
=
@.4)D.25) + A
@.7)D.65) + A
-
0.4)D.65)
-
1л. 5. Построение реалистических изображении
0.7)D.45)
свет
можно
можно
регулировать
неза-
(рис. 5.16, а). Теоретически на-
представить
как
отражение
от
точечной
4.49
идеальной псевдоповерхности при освещении точечным источником
4.59
(рис. 5.16, Ь). Если точечный источник находится в направлении L,
перпендикулярном отражающей псевдоповерхности, то отражение
=
=
5.7. Простая
мочель
освещения
со
специальными
эффектами
Нормаль к
4 поверхности
J§~
Направление света
Отраженный
луч
Изгиб
•
i
Направ iciiiic cue га
?
Поверхность
к
объекта
Jmm
Направление света
Направление
света
Пссвлонсточник
О
Рис. 5.17. Заслонки
ничителей,
например,
противном случае
объект
в
направлении L. На-
Направление света регулируется поворотом псевдоповерхности.
света.
источника, зависит, как показано на рис.
5.16, а, от угла /5 между
L и прямой, проходящей через источисточник и Р. Пользуясь аппроксимацией Фонга
для зеркального отраотражения от идеальной
поверхности, находим интенсивность света от
вектором направления
света
источника вдоль
направленного
прямой, соединяющей
источник
и
точку Р:
—
степень, определяющая пространственную концентрацию
направленного источника (рис. 5.6). При большом с моделируется
узкий луч прожектора,
а
интенсивность света от
направленного источника в модели освеще-
освещения
при малом с
—
эффекты,
создавать
не
/eoscj8(*rfcos0,
+
про-
Произвольно ориентированные
в
встречающиеся
природе,
мож-
например
некоторого источника света.
направленного источника, при котором при изизменении С свет постепенно затухает у края. Этот эффект также за-
света в отличие от
заимствован
фотографии
из
и
реализуется непосредственно.
вершина конуса совпадает с источником, а 7
противном
соответствующая
случае
—
Пусть
угол раствора кону-
Р не освещается этим источником.
/3 > 7 точка
конуса; тогда при
компонента
Обычно для
В
интенсивности
этого сравниваются
Изображение на цветной вклейке 1 построено в соответствии с
данной моделью освещения. Шевроле Камаро 1983 освещается пяпятью
два
внимание
=
в
Конус (рис. 5.17, Ь) позволяет получить четко очерченное пятно
источниками:
два
заливающий свет. Теперь
E.6) равна
/.
вычисляется
cosj8 и cos7, т. е. должно быть cosj8 > cos 7-
V
где с
игнорируется.
включается в модепь освещения.
/, coscj8,
то
определяемая этим источником,
можно закрыть часть сцены от
направленных, так и для точечных источников
Количество света, падающего в точку Р от направленного
она
ут[п ^ Уо6ъск1 ^ Утгх,
если
заслонки реализуются непосредственно. Используя заслонки,
можно
При такой концептуальной схеме одна и та же модель освещеосвещения годится как для
воронки.
компонента интенсивности,
Рис. 5.16. Модель направленного освещения.
исходящего от нет света освещает
и
kscosnja.),
E.14)
где j обозначает конкретный источник света.
—
на
справа
то,
и
как
один
—
из
них
расположены
слева
сверху, позади машины.
используется концентрация
от
машины,
Обратите внима-
света для
того,
чтобы
подчеркнуть изгиб на правой двери и вдоль правого заднего крыла.
бампера. В ререзультате получается высококачественное изображение.
Пятый источник освещает задние
фары
и
детали
На фотостудиях достигают специальных эффектов посредством
ограничения освещаемых участков заслонками, которые устанавлиустанавливаются на источниках
«воротами сарая»),
(профессиональные фотографы называют их
а также с помощью
для создания специальных
особых отражателей. Варн
эффектов применяет заслонки и конусы.
5.8. БОЛЕЕ ПОЛНАЯ МОДЕЛЬ ОСВЕЩЕНИЯ
Модели освещения, рассмотренные в предыдущих разделах, сравнисравнительно просты и основаны на эстетической и экспериментальной
особенности зеркальная компонента отражения.
Заслонки, ориентированные по координатным плоскостям, модели-
аппроксимациях,
моделируются путем ограничения протяженности освещенного участка по
осям х, у и z (рис. 5.17, а). Если точка объекта лежит внутри огра-
Торрэнс и Спэрроу [5-6] разработали теоретически обоснованную
Гл. 5. Построение реалистических изображений
модель
401
в
отражения,
5.8. Более
полная
которая
модель
хорошо
освещения
соответствует опытным
ре-
зультатам. Блинн
[5-7] и Кук и Торрэнс [5-8, 5-9] воспользовались
этой моделью для создания синтетических изображений. У Блинна
зеркальные блики имеют тот же цвет, что
Кук
ввел
длины
зависимость
волны
бликов,
и
получил,
зависит от
жается
коэффициента
что
у падающего света.
зеркального
т. е.
цвет,
и
отражения
от
поверхности
телесный
за
для
источников
т
зеркальных
свойств вещества. Когда угол падения прибпи-
/
=
противолежащий источнику. Запишем связь
падающей на единичную площадь отражающей поверхно\гол,
единицу
с
времени,
интенсивностью
света,
падающего
единичную проекцию площади в единичный телесный
на
угол, проти-
противолежащий источнику:
В отличие
=
Если поверхность неровная, то диапазон упов отражения может
быть очень широким. Зависимость интенсивности отражения от па-
падающей энергии
/
=
к
отношение
отраженной в данном направлении интенсивно-
энергии, падающей
в
другом направлении. Оно называется
—
Торрэнса учи-
с
Например, если есть два источника с одинаковой интенсивностью и утлом
освещения объекта, но телесный угол одного в два раза больше, то
него
интенсивность
выглядеть в два
будет
отражения
раза ярче.
телесный угот
вдвое
Для больших,
может
больше
но
и
объект
удаленных
быть очень маленьким
—
исна-
например, для Солнца он составляет 0.000068 стерадиан.
Компоненты модели зависят от длины волны падающего света,
свойств
гЕ
Кука
•
отражения.
интенсивности
E.15)
ksrs)
прелыдушич моделей модель
источников света
—
L ) d@
'
разными иптенсивностями (/,) и
разными площадями проекций (п Lf/o;), что очень важно. Напри-
будет
//(й- L)dco
от
учитывает множество источников
для
?/
где г
fkj'alu + 2^ //ДП
7г/2, цвет бликов приближается к цвету источника.
к
энергии,
—
длина волны
Для того чтобы дополнить модель освещения, рассмотрим снасначала
r(i и г5. Константа ка опять зависит от свойств вещества, но,
как произвольный параметр.
как правило, рассматривается
Объединяя все результаты, получим модель Кука
Торрэнса
ция
вещества,
шероховатости
поверхности и геометрии отра-
Особенно интересно построение зеркальных бликов, так как
влияют
на
они
сильно
изображения.
Этот вопрос рассматривается
реалистичность
в
синтетического
работе Торрэнса
—
изображеСпэрроу.
одно
шероховатой поверхности Торрэнса
Спэрроу [5-6] основана на принципах геометрической оптики. Она
предназначена для поверхностей, у которых средний размер неровнеровностей намного превышает длину волны падающего света. Предпо-
Коэффициент двунаправленного отражения состоит из двух частей:
зеркальной и диффузной, т. е.
случайно ориентированных
микроскопических зеркальных граней. Зеркальная составляющая
отраженного света rs складывается из отражений от отдельных
коэффициентом
двунаправленного
отражения.
Подставляя
уравнение в другое, получаем
/ =
/7/(n- h)dw
где
kd и ks
—
поэтому
k
ks
=
характеристики вещества, которые обычно неизвестны
рассматриваются
как
и
произвольные параметры.
Для завершения модели необходимо учесть отражение рассеянрассеянного света.
Охватывающая полусфера, которую можно рассматри-
Модель отражения
Предполагается, что
—
от
поверхность состоит
из
микрограней. Диффузная составляющая отражения гA является резупьтатом множества отражений от микрограней и внутреннего
рассеивания. На рис. 5.18 показана геометрия отражения от шероединичная нормаль к поверхности,
шероховатой поверхности. Здесь П
—
L
—
единичный вектор
в
направлении к источнику, R
—
единичный
закрываться
объектами сцены. При этом интенсивность отражения рассеянного
единичная нормаль к отдельной микрогравектор отражения, Н
единичный вектор отражения от микрограниva также намикрограни, S
света
направления к наблюдателю. По законам отражения
рассматривать как
источник
рассеянного света,
может частично
—
—
в
одной
плоскости
/—
полусферы. Интегрируя коэффициент
двунаправленного отражения /¦ по всей полусфере, получим коэффинезакрытая
часть
коэффициент отражения рассеянного света га, т. е.
402
Гл. 5. Построение реалистических изображений
—
га
углы
падения
и
отражения ф равны.
Угол
поверхности h и нормалью к микрограни Н
обозначен 5. Поскольку Н
биссектриса угла между L и §, имеем
между нормалью
где
и
L, Н и S лежат
к
—
S + L
линейная комбина-
Н
5.8. Более
полная
=
молель
освещения
S + L
Единичная нормаль
к поверхности
П
Единичная нормаль
к мнкрогранн
и
Рис. 5.19. Геометрическое затухание при загораживании
Рис.
5.18.
(Ь)
Геометрия модели отражения Торрэпса—Спэрроу
И
»атенение,
L Н
=
ф
•
S
=
•
Н
только вместо L стоит
Зеркальное отражение в направлении наблюдателя S формирусоставляющие в
микрогранями, нормали которых
направлении Н.
—
S, т. е.
•
¦
Gv"
имеют состав-
Применяя медель Торрэнса
Спэрроу, Кук и Торрэис записызаписывают коэффициент зеркального отражения
г5 следующим образом:
(рис. 5.19, Ь) выражается аналогично,
2(п Н)(п S)
_
формируется только теми
так как
Н
определяется
(а) без помех,
(с) загораживание.
Составляющая затенения
cos
затенении:
—
_
2(n-H)(n-S)
"
HL
HS
биссектриса угла между L и S. Ослабление света опре-
минимальной
из этих величин:
G =
DG
*
л
F
•
(п
Lxn S)
*
В модели Торрэнса
функция распределения микрограней
Френеля, D
на поверхности, G
коэффициент ослабления света, обусловлен-
где
—
член
—
ориентированы
—
согласно
Спэрроу предполагается, что микрограни
распределению Гаусса, т. е.
—
обусловленного тем,
что
и
грани маскируют
затеняют
разной впадины (рис. 5.19), то часть микрограни может оказаться в
E.19, Ь), либо часть отраженного света не выйдет за пределы
впадины,
так
как его путь
где с,
—
микрограней. Кук
=
I
Из рис. 5.19 видно, что ослабление света
падения света, угла между сторонами
также
то т
=
функция угла паде-
=
L Торрэнс
и
Спэрроу [5-6], а
Блинн [5-7] нашли G для маскирования а затенения. Состав-
Составляющая маскирования
(рис. 5.19, с) есть
г-=
2("' H)(n
-
L)
Н- L
404
—
впадины и длины стороны /. Если
0 и G
среднеквадратичный наклон
обоснованную модель Бекмана
[5-10] с распределением
'
?>
=
-
которое выражает абсолютную величину функции распределения
без произвольных констант. На рис. 5.20 сравниваются распределе-
т/1.
-
—
Торрэис применяю! теоретически более обо-
и
преграждает противоположная стенка
G
Cj6>
произвольная константа, т
(рис. 5.19, с). Влияние маскирования и затенения выражается соотсоотношением т/1. Поэтому ослабление света выражается формулой
никаких помех нет,
=
друг друга.
Если каждую микрогрань рассматривать как одну сторону V-об-
тени
D
Гл. 5. Построение реалистических изображении
0.6, что соответствует блестящим
и матовым поверхностям. Изображенные на рис. 5.20 поверхности
распределения
Бекмана при т
—
0.2 и т
—
представляют величину интенсивности отражения
в
направлении S
от точки Р при изменении S в пределах полусферы. Для малых т
около направления
отраженная интенсивность сконцентрирована
более ровзеркального отраженя R, а для большнх т распределена
ровно.
При малых т поверхности выглядят блестящими,
>.8. Более
полыни
молель освещения
а
при боль-
10
0.5
Рис. 5.20. Функции распределения Бекмана при
разрешения
0.2 и (Ь) т
0.6. (С разреР. Кука, Программа машинной графики, Корнеллъский университет.)
(а) т
=
=
0
ших
—
и
тусклыми
Гаусса, Бекмана и Фонга почти одинаковы, а во втором
распределения
значительно
Если
порядка,
на
b
Рис. 5.21. Коэффициент отражения q бронзы (а) при нормальном падении света (Ь)
есть
поверхности
а
—
различаются.
800
600
400
В первом случае функции распреде-
матовыми.
неровности
то можно взять взвешенную
по-
размерами разного
с
линейную комбинацию распре-
распределений для разных значений т, например:
D
как
Р.
функция угча падения, полученная из (а) и уравнения Френеля. (С разрешения
Кука, Программа машинной графики, Корнелльский университет.)
рэнс предлагают следующий способ расчета
зависимости
F(X) от
угла, если известна только зависимость при нормальном падении.
=
Перепишем F как
где сумма весомых
От длины
коэффициентов w. равна 1, т. е.
волны
X
? и»,-
=
1.
__
г
—
зависят
все
виды
отражения:
рассеянное,
диффузное и зеркальное. Зависимость г(П г} и F от длины волны
определяется свойствами вещества. Теоретически член Френеля для
коэффициента зеркального отражения rs можно найти из уравнения
¦2 0? +
где
=
if + с2
=
описывающего
Френеля,
гладкой
неполяризовашюго
отражение
света
от
зеркатыюй поверхности, т. е.
sin2 {ф
-
в)
+
¦
sin2 (ф 4- в)
Заметим, что с
tair {ф
-
0- I]2
1
г
=
1, g
=
у при
ф
SH
-
=
L-H
1
=¦
0. Пользуясь этим, получим
в)
tan2 @ + в)
'7-1V
«
7/ + 1
где
sin#
sin 0/77,
=
cos-1(L Н)
=
•
показатель
=
77
—
показатель
cos—1(S Н)
•
—
преломления
угол падения.
в
=
Решим
это
уравнение относительно показателя преломления ц:
Функция F, как и по-
преломления, является функцией длины
зависимость т] от
вещества,
волны.
Если зави-
X неизвестна, то F можно вывести из эксперименталь-
(см., например, [5-11])!). На рис. 5.21, а изображен граграфик F(X) для бронзы при нормальном падении света. Кук и Торэкспериментальных данных
Затем с помощью этого значения -ц из уравнения Френеля определя-
F(X). Типичный результат приведен на рис. 5.21, Ь.
Из-за того что коэффициент зеркального отражения зависит от
определяется
"
Заметим, что в
гладких поверхностен.
406
Гл.
5.
работе [5-11]
изменение
коэффициентов отражения дано лля
Бели поверхность шероховатая,
Построение реалиаических изображений
то нужно домножить на I/
длины
волны
и
угла падения,
цвет
зеркальных бликов меняется
(сдвигается), когда угол падения приближается к х/2 (рис. 5.21, Ь).
407
5.8. Более
полная
модель
осисшения
Если свет падает почти перпендикулярно (Ф
Если угол
окрашиваются в цвет вещества.
=
0), то блики окраши-
близок к скользящему
паления
7г/2), то блики приобретают цвет источника (F
(ф
=
того
чтобы рассчитать цветовой сдвиг, необходимы
=
1). Для то-
Кук и Торрэнс предложили воспользоваться линейинтерполяцией между цветом при нормальном отражения
0) и цветом света (ф
7г/2). Например, красная компонента
(ф
(Red) есть
=
Пластмассовая ваза
Металлическая ваза
/,-станлартный источник
/.-стандартный источник
МКО
МКО
сложные вычис-
вычисления, поэтому
линейной
Таблица 5.1.
Два источника1'
=
=
:
Зеркальное
р
Red,
=
(Red,/2
Аналогично определяются
пространства RGB
синяя
-
:
Red,,)
-
и
зеленая
DMnct
0.0001
0.0002
и
ол
коэффициент отра-
F
=
коэффициент отраотражения бронзового
зеркала
функции Бекмана с
т
=
Бекмана с
0.15
(разд. 5.15).
меньше
70°
зависимостью
этой
угла падения, но при углах мень-
можно
пренебречь. Поэтому
цветной вклейке 2.
Верхняя
Диффузное
данное
'\/
'"</
=
¦
==
почти нет.
0.9
kd
коэффициент двуна-
rd
отражения
Рассеянное
компонентой и белыми зеркальными бликами {F = 1). Нижняя ваваза бронзовая. Свет отражается от металлической поверхности и
практически не проникает под нее, поэтому диффузного отражешм
=
0.4
=
0.4
=
0.2
=
=
11
=
0.9
коэффициент двунадвунаправленного отра-
двунаправленного отра-
ваза сделана из пластмассы
бронзового цвета. Это впечатление создается цветной диффузной
/м,
—
w^ =0.6
предположение достаточно обоснованно.
С помощью более полной модели освещения были изображены
две вазы на
D
и»,
wi,
=
он и зависит от
0.0002
=
и
поверхности. Хотя
и
ki
зеркала
D =г функция
цветового
0.0001
0.1
Торрэнс рассматривают коэффициент диффузного отра0) отражения от поотражения, rrf, как коэффициент нормального (ф
Кук
duj
отражения винилового
компоненты
D6500
=
отражения
бронзы при
бронзы при
нормальном паде-
нормальном паде-
падении света
падении света
0.01
*
/,
/в
=
0.01
¦
/;
См. разд. 5. 15.
Зеркальные блики окрашены в бронзовый цвет. Подроб-
Подробные данные,
которыми пользовался
Кук при построении этих изо-
изображений, приведены в табл. 5.1.
Блинн
более
Торрэнса
Спэрроу cF= 1, т. е. без учета цветового сдвига. На рис. 5.22, потакже
построенном
применял
сложную
—
Блинном, сравнивается форма зеркальных бликов, полу-
полученных с использованием модели освещения
вешешш.
модель
т. е.
когда
угол
между
Фонга^при боковом ое-
наблюдателем
(S) и источником
(L) составляет около 90°. Если же положения наблюдателя и источисточника света совпадают, то
оба метода дают совершенно одинаковые
результаты.
Это объясняется функциями распределения Фонга и Торрэнса
—
Спэрроу при углах падения света, близких к нормальному B5°) и
скользящему F5°) (рис. 5.23). Выпуклость на полусфере соответстсоответствует коэффициенту зеркального отражения. Из рис. 5.23, а и b видвидно, что для паления света,
не
4A8
отличаются.
близкого к нормальному, модели почти
Однако для углов, близких к скользящему, выпук-
Гл. 5. Построение реалистических
Рис. 5.22. Сравнение зеркальных бликов при боковом освещении: (а) Фонг, (Ь) Тор-
Торрэнс—Спэрроу, поверхность покрыта окисью магния. (С разрешения университета
штата Юта.)
5.8. Более полная модель освешенни
формулой
связаны
7j,sin0
и
0'
угол преломления
—
—
4
показатели преломления двух сред,
где tj,
гJ
=
в
угол падения,
—
(рис. 5.24). Ни одно вещество не пропуска-
пропускает весь
падающий свет, часть его всегда отражается; это также по-
показано
на
рис. 5.24.
Так же,
L
отражение, пропускание может быть зеркальным
как и
Направленное
диффузным.
пропускание
свойственно прозрачным веществам, например стеклу. Если смот-
(направленным)
на
смотреть
или
объект сквозь такое вещество, то, за исключением контур-
криволинейных поверхностей, искажения происходить не
будет. Если свет при пропускании через вещество рассешвается, то
контурных линий
мы
имеем
дифф>зное пропускание. Такие вещества кажутся полу-
полупрозрачными
или
матовыми.
кос вещество, то он
На рис. 5.25
преломления.
Если смотреть
на
объект
сквозь
га-
будет выглядеть нечетким или искаженным.
некоторые практические следствия препреломления объектов 1 и 2 одинаков и
показаны
Показатель
больше, чем у окружающей среды. Объекты 3 и 4 непрозрачны. ЕсРис. 5.23. Сравнение функций распределения света
нормальному
B5°): (а) Фонг, (Ь) Торрэнс—Спэрроу;
скользящему
при угле падения,
и
при
угле
близком к нор-
паления,
близком
к
F5°): (с) Фонг, (d) Торрэнс—Спэрроу.
коэффициента зеркального отражения в модели Торрэнса
Спэрроу имеет более узкий вертикально ориентированный про-
лость
Если
принимать во внимание преломление,
не
то
луч
ослабления света, то она
при боковом освещении будет порождать резульрезультаты, аналогичные тем, которые получаются при использовании
модели
объектом 3 (пунктирная линия). Однако из-за преломления он ототклоняется и пересекается с объектом 4, т. е. объект 4 можно увитолько
увидеть,
учитывая
эффект
преломления.
Если
Торрэнса
—
рассматривать цуч
хотя на самом деле он
рассматри-
пересекается
с
объектом 3,
В основных моделях освещения и
необходимо иметь в виду при создании реалистических
Среда 1
ПадаюшпП
луч
в
н
<f
поверхностей рассматриваются только непрозрачные поповерхности и объекты. Однако существуют и прозрачные объекты,
пропускающие свет, например, такие,
Граница
как
стакан, ваза, окно автоавтомобиля, вода. При переходе из одной среды в другую, например из
воздуха в воду, световой луч преломляется; поэтому
торчащая из
воды палка кажется согнутой. Преломление
рассчитывается по за-
Преломленный
ЛУЧ
Снсллиуса, который утверждает, что падающий и преломляю-
преломляющий лучи лежат в одной плоскости, а углы падения и
Гл. 5. Построение реалистических
изоброкснин
преломления
здесь
объ-
изображений.
Нормаль к
алгоритмах удаления невидимых
т. е.
объект, который видим, на самом деле увидеть нельзя. Все это необхо-
Спэрроу.
5.9. ПРОЗРАЧНОСТЬ
410
же
Ь, то без учета преломления он пересекается с объектом 4,
поверхности
закону
пересечется с
—
профиль, который расположен не совсем в том же направлении, что в
модели Фонга. Если в модели Фонга ввести
коэффициент ослабле-
линий
о
Рис. 5.24. Геометрия
5.9.
преломления.
Прозрачность
Среда 2
разования. Теперь луч пересекает объект в преобразованной точке
/
преломленный луч пересекается с фоном в точке Ъ* с противопротивоположной стороны от центральной линии. Это происходит из-за
,
неправильных угловых соотношений между искаженным (преобра(преобразованным) объектом и искаженным (преломленным) лучом.
На первый взгляд для получения верного результата достаточно
знать истинные угловые соотношения в точках пересечения луча с
объектом. Однако это не так, потому что длина пути луча в преобпреобразованном объекте также меняется. Разница в длине пути привоприводит к тому, что, во-первых,
не совпадают
точки
выхода
луча из
объекта, так что луч все равно не попадает в правильную точку фоРис. 5.25. Эффекты преломления.
фона.
Во-вторых, меняется количество поглощенного объектом света,
поэтому исходящий луч имеет другую интенсивность.
Нечто
похожее
происходит
при
встраивании
перспективного
преобразования в видовое преобразование. Обычно
перспективное
преобразование проводится для того, чтобы получить искаженный
объект, который затем строится в аксонометрической
проекции с
точкой наблюдения, удаленной в
бесконечность (рис. 5.26). На
рис. 5.26, а
луч,
исходящий
объект в точке / и после
из
точки
Р, пересекает неискаженный
преломления попадает в точку b плоскости
фона. На рис. 5.26, b показан объект после перспективного
преоб-
Для того чтобы устранить влияние преломления, можно либо
применять алгоритмы, работающие в пространстве объекта, либо
преобразованиями между пространстпространствами объекта и изображения. Однако проще включить преломление
пользоваться специальными
поверхностей методом трассиглобальную модель освещения
алгоритмы построения видимых
в
лучей,
(разд. 5.12).
трассировки
использующие
В простейших реализациях
вообще
не
рассматриваются,
эффекты прозрачности преломления
и
явления, показанные на рис. 5.25
и
5.26, не учитываются. Кроме того, не принимается во внимание, как
путь, пройденный лучом в среде, влияет на его интенсивность. СаСамые ранние разработки в этой области принадлежат Ньюэлу [5-12]
(разд. 4.8). Простое пропускание света можно встроить в любой
алгоритм удаления невидимых поверхностей, кроме алгоритма
с
z-буфером.
Прозрачные многоугольники или поверхности помечаются, и есесли видимая грань прозрачна, то в буфер кадра записывается линейлинейная
комбинация двух ближайших поверхностей. При этом
интен-
интенсивность
0<f< 1
/= //, +A -t)h
где
b
/j
—
видимая
непосредственно за ней, t
а'
—
поверхность совершенно прозрачна, то t
t
Рис. 5.26. Влияние перспективы на
Фон
преломление:
Гл. 5. Построение реалистических
изображении
=
I. Если U
пре-
Если
тоже
прозрачна,
0, а если непрозрачна, то
алгоритм применяется рекур-
пока не
приоритетами глубины,
413
то
=
встретится непрозрачная поверхность или фон. Есмногоугольники записываются в буфер кадра в соответствии с
рентно,
(а) неискаженное (t>) с перс-
перспективным искажением.
412
—
/2
поверхность, расположенная
коэффициент прозрачности 1{. Если по-
поверхность,
5.9. Прозрачность
как
в
алгоритме
Ньюэла
—
Ньюэла
—
буфер кадра для непрозрачных многоугольников и скоррекскорректировать этот буфер.
в
Для каждого многоугольника из списка прозрачных многоугольмногоугольников:
коэффициент прозрачное
"буфер» т0 прибавить
в
буфере весовых коэффициентов прозначению, содержащемуся
ги
его
^
если z
к
прозрачности;
прибавить его интенсивность к значению, содержащемуся в бубуфере интенсивности прозрачности, в соответствии с правилом
a
b
Рис. 5.27. Сравнение простых модспей прозрачности:
нелинейная р
=
fbn
(а) линейная /
где
0.5, (Ь) нели1. (С разрешения Д.С. Кэя, Лрограмуа машинной
графики, Корнелль=
—
hyoho + Vc
новое значение интенсивности,
Ih0
—
старое значение
буфере интенсивности прозрачностаинтенсивность текущего многоугольника, tm
прозрачности, /
старый коэффициент прозрачности из буфера весовых коэффициенкоэффициентов прозрачности,
коэффициент прозрачности текущего
/с
многоугольника. Таким образом, получается взвешенная сумма
интенсивности, записанное
ский университет.)
в
—
—
Санча, тогда /2 будет соответствовать значению, записанному в бубуфер кадра, а /,
текущей поверхности.
—
—
Для криволинейных поверхностей, например, таких,
или
1Ьп
=
как
интенсивностей всех прозрачных мпогоуголыгаков, находящихся
ваза
бутылка, линейной аппроксимации недостаточно, так как вбли-
перед ближайшим непрозрачным многоугольником.
контурных линий прозрачность уменьшается из-за толщины маматериала. Чтобы точнее изобразить это явление, Кэп [5-13,
Объединим
предложил несложную нелинейную аппроксимацию
многоугольников
вблизи
5-14]
ставляюшеп
нормали
к
поверхности.
В
на основе г-со-
частности,
буферы интенсивности для прозрачных и непрозрачных
в соответствии с
правилом
коэффициент
прозрачности
'
=
'min
(W
-
'тш)П
-
A
-
где
МЛ
ffh
—
окончательная
интенсивность в
непрозрачных многоугольников,
П1е
'mm " 1тг\
объекта, nz
—
минимальная и максимальная
есть ^-составляющая
единичной нормали к поверхности, р
коэффициент степени прозрачности, /
точки
прозрачность объек-
—
прозрачность
моде-
моделей: линейной
(рис. 5,27, а) и нелинейной (рис. 5.27, о).
Непосредственно в алгоритм, использующий г-буфер, эффект
прозрачности ввести нельзя (см. разд. 4.7). Для того чтобы его
учесть, необходимы отдельные буферы прозрачности, интенсивноинтенсивности и весовых
использующего
в
структуре
данных.
Для алгоритма,
старое значение интенсивности
буфере.
Эту процедуру удобнее использовать в сочетании с алгоритмом
построчного сканирования с ^-буфером (см. разд. 4.10), поскольку
для полного алгоритма с ^-буфером требуется очень много памяти.
интересных прикладных задач, связанных с прозрачпрозрачностью, является визуализация внутреннего вида сложных объек-
Одной
объектов
ис-
или
Для
коэффициентов [5-15], а также нужно отметить про-
прозрачные многоугольники
1т
буфере кадра для непро-
—
пиксела или
объекта. На рис. 5.27 сравниваются результаты двух
в этом
а
—
из
пространств.
этого
многоугольникам
поверхности приписываются
прозрачности, первоначально равные 1, т. е. они
непрозрачными. Можно построить изображение такого
коэффициенты
считаются
?-буфер, последовательность действий такова:
всем
объекта с удаленными невидимыми гранями. Затем коэффициенты
Для каждого многоугольника:
ест
многоугольник прозрачен,
то
внести
его
в
список
про-
прозрачных многоугольников;
если
414
получается
многоугольник непрозрачен
Гл. 5. Построение реалистических
прозрачности некоторых групп граней заменяются на 0, т. е. они
делаются невидимыми. При новом построении изображения сцены
и z
>
изображений
z6уфс
,
внутренний вид этого объекта или пространства.
то записать его
415
5.9. Прозрачность
Для
чтобы
того
включить
преломление
в
модель
освещения,
нужно при построении видимых поверхностей учитывать не только
падающий,
отраженный и пропущенный свет (рис. 5.24). Эф-
и
но
Эффективнее всего это выполняется с
помощью
глобальной
освещения в сочетании с алгоритмом трассировки
лучей для выде-
поверхностей (см. разд. 5.12). Обычно рассматрива-
выделения видимых
рассматриваются только
модели
зеркально отраженные
и
пропущенные лучи, так как
диффузное отражение от просвечивающих поверхностей порождает
бесконечное количество беспорядочно ориентированных лучей. ПоПоэтому моделируются
формула
расчета
только
интенсивности
ранее описанных моделей
=
где индексы a,
вещества, для которых
прозрачные
является
простым
расширением
(см. разд. 5.2, 5.7 и 5.8). Ее общий вид:
Kla
рис. 5.2S. Тени.
ksls
sls
d, s, t обозначают рассеянный, диффузный, зеркаль-
зеркальный и пропущенный свет. В большинстве моделей предполагается,
что
kf
—
постоянная
и
1(
—
интенсивность
преломленного
света
Снеллиуса.
определяется по закону
когда источник находится в
бесконечности, и тени определяются с
ортогонального проецирования. Сложнее, если источник
нераспочожен на конечном расстоянии, но вне поля зрения; здесь
обхо шма перспективная проекция. Самый трудный случай, когда
помощью
источник находится в поле зрения. Тогда надо делить пространство
5.10. ТЕНИ
Если положения наблюдателя и источника света совпадают, то тетеней не видно,
в
но они
появляются, когда наблюдатель перемешается
любую другую точку. Изображение с построенными тенями вы-
выглядит
гораздо реалистичнее, и, кроме того,
оказаться
невидимым
прикладных областях
аппаратов и др.
энергии,
обогрев
и
тени очень важны для
Например, особо интересующий нас участок мо-
моделирования.
может
—
—
из-за
того,
что
он
попадает
в
тень.
В
строительстве, разработке космических ап-
тени влияют на
расчет падающей солнечной энер-
кондиционирование воздуха.
резко
часть.
и
полной
тени.
Полная
тень
—
центральная,
темная,
очерченная часть,
окружающая ее более
В машинной графике обычно рассматриваются точечные иса полутень
источники,
создающие только
полной
тени
свет
светлая
—
полную
тень.
источники света конечного размера создают.как
частью
это
Распределенные
источни-
тень, так и полутень [5-8]: в
вообще отсутствует, а полутень освещается ча-
распределенного
источника.
Из-за больших вычислительных
затрат, как правило, рассматривается только полная тень, образуеобразуемая точечным источником света. Сложность
и, следовательно, стостоимость вычислений зависят и от положения источника.
416
Для
и искать тени
того
о г цельно для каждою сек гора.
чтобы построить тени, нужно по существу дважды
источниудалить невидимые поверхности: для положения каждого
источника и для поюжения наблюдателя или точки наблюдения, т. е. это
лвухшаговый процесс. Рассмотрим сцену на рис. 5.28. Один источбесконечности сверху: спереди слева от параллелепараллелепипеда. Точка наблюдения лежит спереди: сверху справа от объекисточник находится в
объекта. В данном случае тени
и
проекционная.
образуются двояко: это собственная тень
Собственная
тень
получается
тогда,
когда
сам
объект препятствует пропаданию света на некоторые его грани, напо-
Наблюдения показывают, что тень состоит из двух частей: пополутени
секторы
на
Легче всего,
например на правую грань параллелепипеда. При этом алгоритм
построения теней аналогичен алгоритму удаления нелицевых граней:
грани,
затененные
точку наблюдения
собственной тенью
являются нелицевыми, если
совместить с источником света.
Если один объект препятствует попаданию света
па
другой,
то
получается проекционная тень, например тень на горизонтальной
плоскости на рис. 5.28, Ь. Чтобы найти такие тени, нужно постропостроить проекции всех
находится
в
нелицевых
источнике света.
«раней на сцену. Центр проекции на-
Точки пересечения проецируемой грани
другими плоскостями образуют многоугольники, которые
помечаются как теневые многоугольники и заносятся в структуру
со всеми
данных.
Для того чтобы
Гл. 5. Построение реалистических изображений
417
5.10. Теин
не вносить в
нее слишком
много много-
угольников, можно проецировать кон-rvp каждого объекта, а не ототдельные
х
грани.
После добавления теней
структуре данных, как обычно, стро-
к
наблюдения. Отметим, что для
строится вид сцены из заданной точки
создания
разных видов
не
нужно вычислять тени
заново,
так
как
они зависят только от положения источника и не зависят от полоположения
J !Я совмешения вектора
i
плаюшего in бесконечности вчоль прямо
необходимо:
перенести Я, в начало коор.шнаи
33.69- вокруг оси у. чгобы
пи 59.04е вокруг оси а. чтобы
выпопиигь поворот
lid
выполнить noiiopoi
Объединенное
0.81
0.48
-0.29
0
0
0.51
0 «6
0
0.55
-0.71
0.4Я
0
-3.59
1.53
-0.93
I
Рассмотрим этот метод на примере.
Пример 5.4. Тени
шеи черс!
полуоси
-
Р
н
Преобразуя плоскость основания
относительно по южения источника
С номшпыо
рассмотренных и раза. 4.3 к примерах 4.2, <5.6 и
формальных методой, рассмотрен-
4.7, получим матрицу
объема параллелепнне п
Р\
Рг
1
о
о
о
О
о
о
I
-I
О
О
о
о
о
о
-1
1
2 -I
0
1
5
А', /.. В, Т, У/, Y обозначаю
Рч
бпнжш>ю и
j.i И.НЮК» f рани, ее ш смотреть нп преобртоваяный объект из бесконечности с muo-
lie
жительной полуоси z.
правую,
1
4.69
0.15
-0. 09
1
2.73
1 65
1
0
0
6
1
1
0
3.5
I
-0.84
0.48
0 29
О
3.5
О
0
0
О
5
0.82
1.06
0 .64
О
5
О
1 54
0 .93
3
3.5
-0.84
1.06
2 .87
1.54
2.58
0.47
О
3 .22
1
3 .51
1
2
3
3.5
О
2
3
5
0 82
3
5
О
1
новую, нижнюю, нермною,
Beiaop oi источника к объекту в одноротиы.ч коормииигал
Урзрнсшю преобразованной
плоскости
l/"J
P2-P«
-
[I
-3
Скалярше протвеленж. ксктора напривлення
-1.5
ь
0J
источник}
ll-f-l
I
-3
3
нслиаевыч плоско*
уравнение п юскостп,
©
опрсчелим с, что
1*°'!
=
1.5 -1.5 1
Знак минус означает, что при наблюдении hj положения источника правая, нижняя н
шльняя флнн япчнются иепшеиыми и, елс.ювательно, нахолятся п собсгвениой геин.
Существует несхопько способов иаложления проскинонных геней. Один из них
включается в том,
чтобы перенести и повернуть параллелепипед а.месге с плоско-
плоскостью его основания по совмещения
вектора направления на источник с осью 7. Ис-
Источник находится в бесконечности, поэтому ортогональная проекция видимых гра-
основания
напчем
метолом
Ньюзлли
=
-OAv.
мет
проекцию теин на пчоскоегь
0
-0.48
0
0.29
0
0.82
-1-06
0.64
0
-1.54
0,93
0.84
-0.64
0
1.06
1.54
0.82
0.48
-0.29
0
0
0
0.84
ы в урав-
кнования;
р!
-0.93
.
Значение z
гране* ня
преобрдювамную плоскость основания дает проскшюннмо грань.
получается полсгансикоП .Y- и v-кооршшат вершин нреобразоианного параллелепипепараллелепипеда в уравнение прсобраюшшной плехкости основания. Затем коорлигшты проем1нон-
где 1шрн\ обозначает вершину
Jh положения
ных тспеП приводятся к первонача гьной орнентаинн.
418
Пара 1ле1епнпел
Подставляя л- и \ -коордиипты вершин преобразованного нараллелепппе
и
стей лает
Ф © ® © ©
1
(ра*л. 4.3, пример 4.3):
z
=
11 ЮСКОСТЬ
-0.29
I
3 5
1
6
Рл
Рь
Pi
—2. 67
0
и
-1
4.4!
1
В}
Ья того чтобы наш и собсшсииыс ини, необходимо определить нспииевыс i puiut
1
0
В:
.л.И X.
1
6
35° вокруг
после поворота игиы сначала на -45* вокруг оси v и laie.M ни
-0. 93
1
0
параллелепипед, получим
1.53
0
В\
и
¦3.59
1 39
0
0
Рн. Точка наСпюленкя нп\<\ипся и бесконечности ни по южнтсльноП
Р4 совпали с осью -,
Рц совпала с осью ?.
прсобра юилпис
наблюдателя.
Рассмотрим плра шежшшел на рис. 5.J8.O )н тдаи точками /*( A, 0, 3.5), Р2 <2, О,
>.5). Pj 12. О, 5), Р4 A. 0. 5). Р${\ 3. 3.5), Рь B. 3, 3.<). Р1 B, 3. 5), Рь A, 3. 5). Пираилечепнтл стоит ни плоскости. заданной точками в, @, 0 0). В2 F, 0, 0),
fij F,
0, 6), ВА @, о, 6). Источник свеча расположен п бесконечности на прьмол, прочеши-
IЬР2 евстэ с
Гъ Ч. Построение реилистнчеекмч иэпГфпжснмй
•Л1»
5.10.
Тени
проекционной тени.
и верхняя грани: они и
источника видны только передняя, левая
uoor.
но» i
релмя:
-Л'*
ги.я:
р р
Oi VC1414, iIT
не
•,
,
р.р%
-
Р.Р PtP
срхнын:
.
нм.11hi
способ получения матрицы. Букнайт и Кели проецируют сцену на
сферу с центром в источнике света и применяют к спроецированспроецированным многоугольникам габаритные тесты с прямоугопьной оболоч-
-ми
в
-
р
й
оболочкой для исключения большинства случаев. Можно воспользоваться
также способом, описанным в примере 5.4, т. е. совместить вектор
Р р^
III П Iltll UHJMM 1R )
in лик ыс
Л'1, IJOCip IM1III,
_
ц. IkЦг- ,-
1.
i г
11
-
n
i
г
*!/» IIП
5
Проскшшчч. ientft на п1
5 "»¦}. b id
i
jvk^jj
Ш.1Г 1ЯПМТ Ц|>
и чс
«
lOi
IK
i
I
0
n
2
1
2
1
•»
г
i
ми
U[v
I
1
1
;
Я., S.
П
,n,u
I
ПСПМГ
н
»»ni
j
u» u
H
6 v.1
m/l
>m'
«mi
их
<
m
«in
i
»,
»«
ни
i.
и
-t
r»u
•
как
осуществляется в два
V II 311
;<ihck;iii
на
1зпв.
inoji iciiH, uprrox:
iif
i
,и
420
5-19].
и
ii|
«u-
ni
и
н
i
H»:uo-
rib'n
м
В.
II- 1
1
Illl
•
¦IHf
1
1
Л u>.
KtK.
*i it-
i
1
ф-VI lit
Ml UK.
Lp и mi
1
t)
km.iii
t)
1
П
I
НнжннМ
1
ll
1
P
и
itepvjiufi
Ь lUHvlliU
1
(I
1)
V
1
1
0
0
/1
.1Ы1И11
и
L)
и
0
J
(]
will
Flj
i
IK
1-
1
и
C!
11
tj
и
I
HODUMIIW
интервальный ai-
алгоритм Уоткинса,
этапа.
самозатененные
участки
и
из
п
—
что не
Второй этап
наблюдателя
интервальном
то
возможно
1) проекционных теней, поэтому важпо найти эффективный
—
—
в
связный список, объединяющий
обработка сцепы относительно положения наб-
состоит из двух
апгоритме
построчного
процессов сканирования. В интервальсканирования,
например
Уоткпнса»
первый процесс определяет, какие отрезки на интервале видимы
(см. разд. 4.11). Второй с помощью списка теневых многоугольнимногоугольников
находит,
падает
ли
тень
на
многоугольник,
отрезок на данном интервале.
который создает
Второе сканирование для
интервала производится следующим образом:
видимый
многоугольников,
включается
тени и многоугольники.
проекционные
грань может отбрасывать тень на другую, нуль
состоит
Обычно матрица
каждого
Единица на диагонали соответствует многоугольнику в соб-
л.
Р
et ни
iuilh
черкип.
собственной тени.
-
трип
не \
"euii icmuP
—
п(п
-1и ie
-Я
»
т
она
метол
определяются
сцена
—
положи ген.
—
Если
""
и
которой строки
многоугольники, отбрасывающие тень, а
столбцы
затеняемые многоугольники. Единица в
матрице ознаможет.
сортировки, наСанча (см.
Ньюэла
методы
i>
к
(см. пример 5.4). Они записываются в виде двоииной матри-
что
j
Таблицы ^.2
На первом этапе для каждого многоугольника сцены и
означает,
сложные
9 и S S Л'
.
«OKp\l ОСИ
-
i,
горитм построчного сканирования, например в
в
более
применить
иного Н. и »»t
up
поверхностей была впервые предложена Аппелем [5-J6]. Им
—
матрицы,
можно
'lii гнием,
<;
трассировки лучей, так и метод попострочного сканирования, усовершенствованный
впоследствии Букнайтом и Кели [5-17
Включение теней в
тени
вариантов
сократить путем использования простых трехмер-
сильно
Прьмер 5 5
Идея совмещения процессов построения теней и удаления неви-
источника
количество
например приоритетную сортировку Ньюэла
разд. 4.8). Рассмотрим для иллюстрации несложный пример.
¦o
был разработан
Затем
z-
v.
Р" каадю tf hiiii m за i mmi
невидимых
осью
трехмерных габаритных тестов. Для еще большего сокращения числа варивариантов
и
m« p
Г
он полуоси z. Пг1 р
с
\
—
-и
можно
источнику
1
1
35
к.
1
5
n
и
т
J
1
">
•
lamieM.
к
направления
—
)
.а «и
\~
проекинi
* r Hu lOI.HV ю
ориентацию:
<
ti
0
обшнм koiitj р«м
поэтам) е
i HblV
if
|jprv -h.,!!
P
Г
если нет ни одного теневого
наблюдателя. Если поверхность видима, то значения х, у, z
из вида наблюдателя линейно преобразуются в значения х', у\
-'
видимо ли
на виде из источника. Для того чтобы проверить,
многоугольника, то вишмый отре-
ре
изображается;
отрезок
если для
многоугольника, содержащего видимый отрезок, имемногоугольники, но они не пересекают и не по-
покрывают данный интервал, то видимый
отрезок
или
интенсивность
видимого отрезка
определяется с
учетом
многоугольников и самого
отрезка;
^-буфера при х', у'. Если оно видимо, то оно
отображается в буфер кадра в точке х, у без изменений. Если
соотнет, то точка находится в тени и изображается согласно
несколькими
изображаемого
интенсивностей
соответствующему
этих
затенения,
правилу расчета интенсивности
а значение в
с
учетом затене-
г-буфере наблюдателя заменяется на z'.
использовать
если один или несколько теневых
многоугольников частично попокрывают интервал, то он разбивается в местах
алгоритм
Для этого метода можно непосредственно
В этом слупострочного сканирования с z-буфером (см. разд. 4.10).
ребрами
случае
применяется
криволинейные
тени
пересечения
применяется
теневых
рекурсивно
интервал
не
к
с
многоугольников. Затем алгоритм применяет-
каждому
из
подынтервалов
до тех пор,
пока
будет изображен.
Здесь предполагается, что интенсивность видимого
зависит
от
случае
можно считать, что тени
интенсивности
теневого
увидеть,
что тень может
отрезка
за-
многоугольника. В простейшем
быть не только такой.
Интенсивность, т. е.
чернота тени, зависит от интенсивности источника и от
расстояния
между затененной гранью и гранью, отбрасывающей тень.
Это вы-
вызвано
ограниченным размером источника и тем, что на
затененную
поверхность падает рассеянный свет.
Для того чтобы смоделировать такой
эффект, можно устаноустановить
пропорциональную зависимость интенсивности тени и источисточника.
Если
накладывается
складываются.
несколько
теней, то
Более сложных расчетов требует
позволяющее сделать интенсивность тени
интенсивности
источника,
которую падает тень,
Можно
интенсивности
правило,
позволя-
поверхностью,
на кото-
поверхностью, отбрасывающей тень.
изменить
алгоритм,
использующий
разд. 4.7), так, чтобы он включал построение теней
г-буфер (см.
[5-20]. Модифи-
Модифицированный алгоритм состоит из двух шагов:
Строится сцена из точки наблюдения, совпадающей с источниисточником.
Значения г дня этого вида
хранятся в отдельном теневом
с-буфере. Значения интенсивности не рассматриваются.
Затем сцена строится из
точки, в
наблюдатель. При обработке
изогнутых
поверхностях. Сначала создается
вид
из
тенен.
Уильяме отметил, что таким способом неправильно изобража-
просто становятся темнее, хотя ясно, что
там их вообще не должно быть. Уильямсом также были исследоваизображаются
блики:
в тени
они
эффекты квантования, возникающие в пространстве изображек
изображения в результате преобразования от одной точки наблюдения
исследованы
другой.
Азертон [5-21, 5-22] включил построение теней в алгоритм удаудаления невидимых поверхностей (см. разд. 4.5), основанный на меметоде отсечения Вейлера
Азертона (см. разд. 3.17). Его преиму—
что он
преимущество состоит в том,
и
результаты годятся
работает в объектном пространстве
как для точных
расчетов,
так и для синтеза
изображений. Процесс состоит из двух шагов.
На первом шаге с помощью алгоритма удаления невидимых по-
поверхностей
выделяются
источника
грани. Для
памяти
освещенные,
повышения
хранятся именно они,
а не
т. е.
видимые из положения
эффективности алгоритма в па-
грани, лежащие
в тени.
Если хра-
придется запозапоминать и все нелицевые грани объекта, которые обычно отбрасыотбрасываются до применения алгоритма удаления невидимых поверхноповерхностей. Для выпуклого многогранника это удвоило бы количество обхранить теневые, т. е.
обрабатываемых
невидимые многоугольники, то
граней.
Освещенные многоугольники помечаются и преобразуются к искоторой
каждой поверхности
его
на
наблюдения, а затем, как постпроцесс, выполняется поточечтепоточечное линейное преобразование к виду из источника и построение
пропорциональной как интенсив-
так и расстоянию
между
и
их
буфер размером с одну сканирующую строку.
Уильяме [5-20] модифицировал метод, чтобы строить криволиней-
точки
абсолютно черные. Однако, если
взять источник света и два
каких-нибудь предмета, то можно уви-
422
сравнивается со значе-
значением теневого
изображается;
если
интервал полностью покрывается одним
теневыми многоугольниками, то
из положения источника» оно
значение z'
имеются теневые
находится наблюдаили
многоугольника
глубина в каждом пикселе сравнивается с глубиной в г-буфе-
I.i. 5. Пострш-ние ршшкчичтеич
нэпОрижелий
исходной ориентации, где они приписываются к своим прототипам в
качестве многоугольников детализации поверхности. Эта операция
423
5.10. rct.ii
выполняется путем присвоения своего
номера каждому многоугольсцены.
В
многоугольнику
процессе удаления невидимых граней
многоугольник
может быть разбит на части,
Поэтому
которые сохраняют тот же номер.
каждый кусок освещенной грани можно связать с соот-
соответствующим исходным многоугольником или с любой его
Для того чтобы не получить ложных теней, сцену надо
рассматривать только в пределах видимого или отсекающего
частью.
рассмат-
затененной
и
Наблюдатель
объема, опре-
определенного положением источника. Иначе область вне
этого объема
окажется
Источник спета
Гранина тени
наблюдатель увидит ложные тени. Это
ограничение требует также,
чтобы источник не находился в
предепределах сцены, гак как в этом
случае не существует перспективного или
аксонометрического преобразования с центром
в
Рис. 5.30. Трассировка луча с уче-
источнике, кото-
учетом
которое охватывало бы всю сцену.
На втором шаге объединенные данные о
многоугольниках обраобрабатываются из положения наблюдателя. Если какая-либо область
не освещена, применяется соответствующее правило расчета интенинтенсивности с
на
Преобра-
учетом
несколько
виду из
несколько,
то
к
базе данных добавляется
не-
наборов освещенных граней. На цветной вклейке 3 приве-
приведен результат для двух
Алгоритм
света
Основные стадии процесса показаны
затенения.
рис. 5.29.
Если источников
Преобразование к
источника
теней.
источников.
выделения
видимых
поверхностей трассировкой
лу-
лучей, описанный в разд. 4.13, также можно расширить, чтобы вклювключить построение теней
Преобразование к за|
На первом,
данной ориентации
точки
как и в
[5-16]. Процесс вновь делится на два этапа.
предыдущем случае,
наблюдения через
плоскость
трассировкой луча от точ-
проекции
определяются видимые
(если таковые есть).
На втором этапе вектор (луч) трассируется от видимой точки до
источника света. Если между ними в сцене есть какой-нибудь объ-
точки сцены
объект
то
свет
от
источника
оказывается в тени
не
попадает
в
данную точку,
т. е.
она
(рис. 5.30). Для того чтобы поиск вдоль локаль-
вектора направления света был
воспользоваться методами из разд. 4.13.
локального
эффективнее, можно восполь-
Кук [5-8] предложил довольно простой способ построения полуполутеней, хотя, как уже говорилось, обычно они не учитываются.
В модели освещения Кука
Торрэнса источнику конечного размеразмера противолежит телесный угол dw (см. разд. 5.8), поэтому, закры—
закрывая часть источника, можно уменьшить телесный угол, а следоваследовательно,
Phi.. 5.29.
невидимых
Построение теней в алгоритме удаления неви-
поверхностей
П. Лчертона,
ский
424
Веилера—Азертона. (С разрешения
Программа машинной графики, Корнслльупирерситет.)
l.i. 5. Построение реи мистических
и интенсивность падающего от
источника света.
При этом
соответственно снижается и отраженная интенсивность.
Это показано на рис. 5.31
для
прямого края четырехугольника и
сферического источника. Средняя линия полутени рассчитывается в
5.10.
Гши
Сферический
Интенсивность
точек
полутени
определяется
видимой
частью
источника. Для сферического источника, частично видимого от
источник
до я,
—
R
эта доля составляет
f
л
Многоугольник,
отбрасывающий тень
что на одном
Результаты показывают,
более четкой.
Полутень
цветов.
-7/d
краю полутень получается
Кук рекомендует хранить эти данные в таблице цве-
Однако проще рассчитывать линейную аппроксимацию
Нечатеменлая
Полная тень
часть
Средняя линия1
которая дает погрешность меньше
полутени
Рис. 5.31. Полутени.
предположили,
что
точечный источник находится в
центре сферы.
С помощью подобных
треугольников найдем проекцию половины
ширины полутени г на направление L (рис.
5.31):
-
где d
D
—
расстояние от точки, отбрасывающей
тень, до соответстсоответствующей точки на средней линии
полутени; D
расстояние от точточки, отбрасывающей тень, до
центра сферического источника* R
радиус сферического источника.
—
—
Если смотреть
от
машинной
графике фактурой называется детализация строения
поверхности.
Обычно рассматриваются два вида детализации. Пер-
В
Первый состоит в том, чтобы на гладкую поверхность нанести заранее
заданный узор. После этого поверхность все равно остается глад-
Kn L)
d
5.11. ФАКТУРА
многоугольника, отбрасывающего тень,
то
телесный угол источника do) есть
гладкой. Наложение узора на гладкую поверхность выполняется с по-
отображения. Второй Tim детализации заключаетзаключается в создании неровностей на поверхности. Такие шероховатые пов параметры,
поверхности реализуются путем внесения возмущений
помощью функции
задающие поверхность.
Впервые метод для нанесения рисунка (узора) на поверхность
его алгоритма
предложил Кэтмул [5-23]. Этот способ вытекает из
разбиения для криволинейных поверхностей (см. разд. 4.6). Блипн и
Ньюэл усовершенствовали подход Кэтмула и включили в алгоритм
отражение и блики на криволинейных поверхностях [5-24].
Главным при нанесении рисунка на поверхность является ото-
поэтому половина ширины полутени
равна
d
г
R
=
n-
LD
Это означает, что если телесный
создает оолее
rfo
-
и
становится
420
—
утоп источника
резкую тень (т. е. с меньшим г).
0 и г =
затеняемой
отображение, поэтому в данном случае задача сводится к преобразоваЕсли рисунок задан в фактурном пропреобразованию систем координат.
n1), a
в
пространстве
прямоугольной системе координат (и,
в другой прямоугольной системе координат (в, у?),
поверхность
меньше,
то он со-
У точечного источника
0, поэтому полутени нет вообще. При сближении за-
загеняюшей поверхности d
и
/•
уменьшаются,
и
тень
то для
нанесения
на
поверхность нужно найти
или
Функцию отображения одного пространства на другое, т. е.
в
g(u, w)
Ди, w) <р
=
=
или
резче.
Гл. 5. Построение реалистических
мюбрижеинй
рисунка
и
427
5.11. Фмкгури
=
г(в,
=
sF, <р)
задать
Обычно, хотя необязательно, предполагается, что функция отобраCw + Dy где коэффициенты А,
Аи + В <р
отображения линейна: в
=
=
В, С, D выводятся из соотношения между двумя известными точточками в системах координат. Рассмотрим пример.
Пример 5.6. Отображение
необходимо отобразить на kvcok поверхности, jh1анныП октантом сферы (рис. 5.32, Ь). Узор предстан^яст собой простую сстк> из
пересекающихся прямых. Параметрическое представ icinic октанта сферы:
>, покаг.шныП на рис. 5.32а,
л-
О < 0 < а72,
sinf sin*.
=
тг/4 ? * < х/2.
Рис. 5.32. Отображение.
*
—
Пусть функиия отображения линейна, т. е.
0 = Аи + В
н углы узора
и
переходят
*
=
Си- + D
также
-
при 0 « 0, ур = тг/2
При 0 = тг/2, * = it 2
-=
-
—
быть так-
фотогра-
нарисован от руки, либо получен путем сканирования
отонанесения рисунка на поверхность необходимо
и т. д.
быть
также
любое видо-
применено
пространства в объектное. Может
использувидовое преобразование. Если для пространства изображения
несколько отиспользуется
устройство, то можно применить два
при (/ в 0. * = 7г/4
при 0 *= «V2, с
но он может
Для
фотографий
в пространство изображения, а
отображение объектного пространства
из фактурного протакже рассмотренное выше преобразование
утлы октанта:
0
0, »v
ss
jv
и
0
I.
j/ = 0, и» = 1
I/ =i I, iv = I
и
Узор на рис. 5.32 задан математически,
к/4
растровое
Отсю ш
/1
в
^ = О
тг/2
Г я
-
-г/4
О в 7Г/2
функция отображения пространства и и1 на прост pant, r во
т. е. линейная
отличающихся
ecib
метода.
Первый основан
разд. 4.6). Алгоритм
на
алгоритме
разбиения
Кэтмула
(см.
на
Кэтмула разбивает кусок поверхности
центр
фрагменты до тех пор, пока фрагмент не будет покрывать
Затем интенсивность пиксела можно было
бы найти по узору, который получен при отображении параметри-
только одного пиксела.
Обратное прсобразоопннс имеет вил:
и
б
2
т/2
тг
—
>р
4
В табл. 5.3 нрннелено отображение олноП линии >п нространстии //и- и простраистпо
0<р.
а
затем
в
декартовы координаты хуг. Законченное
рнс. 5.32 с.
Таблица 5 .3.
фрагмента или пиксела в фактурное протакой метод поточечной выборпространство. Но, как указал Кэтмул,
можно
выборки приводит к сильному лестничному эффекту. Например,
параметрических
-
отображение показано на
значений центра
потерять значительную
рис.
5.32, а, если все выбранные точки
областях
узора. Чтобы этого
кусок
поверхности,
показанный на
окажутся в «белых» обла-
часть или даже весь узор,
случилось, Кэтмул, разбивает как кутак и соответствующий узор. Когда найден фрагне
ин-
покрывающий центр только одного пиксела, усредненная
для
интенсивность соответствующего фрагмента узора используется
фрагмент
и
w
в
1/4
0
7/2
428
У
г
я/2
0.38
0
0.92
1/4
7/16л
0.38
0.20
0.91
1/2
З/Влг
0.35
0.38
0.85
3/4
5/1 for
0.32
0.56
0.77
1
я/4
0.27
0.71
0.65
•
Гл. 5. Построение ренлиетичоских шобрижении
определения интенсивности пиксела.
полученный фрагмент узора не обязательно
прямоугольный. Когда он изображается на растровом устройстве,
интенсивности пиксеего интенсивность равна средней взвешенной
бепикселов фактуры на данном фрагменте. В качестве весовой функции
внутри
берется отношение площади пикселов фактуры, находящихся
В
общем
случае
5.11. Фиктурц
0
=
tr/32,
0 =
32.
п-
V
64
=
&•¦=.
—
2
r
—
и
~
//
=
]
1 ).
1
16.
w
=
I
16
=
0.
тто квалраг. На растре от 0 по
Как »»пно и» рис. 5М, Ь. и фактурном ирострпнаис
(м\ пасть 1/16 соопжтстпуст 4 пикселам. На рис. 5.34, b показаны все этапы деления.
—
Пнтенсниность пиксела и пространстпе шображення определяется путем vcpc.iucния янгенсивиостей пикселем! в соответствующей части фактчрного пространства.
Компонента диффузного офажения масштнбирустся с учетом полученного коэффикоэффициента. При рпгёиснии 4x4 фрагмент куска солержит 7 чернпх пикселов, поэтому
ni-hxipancTBc изображения интенсивности пиксела равна 7/16 в масштабе от 0 до 1.
л
Рис. 5.33. Узор, нанесенный
бутылку, сосоставленную из кусков 0-сплайна. (С разрешеразрешения Б. Барски.)
Одно
на
что
том,
пространства изображения в объектное пространство или глубину (зна-
~) фрагмента в пространстве изображения. Однако есть и не-
(значение
фрагмента, к их полной площади. Блинн и Ньюэл применяли более
качественный пирамидальный сглаживающий
фильтр
предложенный Кроу (см. разд. 2.25). Барски получил
2x2, пред-
изображение бу-
бутылки, показанное
5.33, отобразив узор шахматной доски
на кусок поверхности, заданной
/3-сплайнами.
Таким образом, алгоритм разбиения Кэтмула начинает свою
рана
рис.
работу на куске поверхности в объектном пространстве и развивается
в
двух
направлениях:
пространстве.
в
изображения
пространстве
и
фактурном
Рассмотрим этот метод на примере.
Пример 5.7. Ачюритм разбиения yjopa
преимуществ алгоритма разбиения Кэтмулэ состоит в
не обязательно знать обратное преобразование из про-
из
фрагмент может не совпадать с одним пиксепикселом в пространстве изображения (рис. 5.34, а). Часто глубина (зна-
недостатки: например,
z) известна из алюритма удаления невидимых поверхностей.
(значение
Для того чтобы найти обратное преобразование, нужно сохранить
преобразование и преобразование объектного
пространства в пространство изображения до проецирования на
плоскость картины. При этом в фактурное пространство перево-
трехмерное видовое
переводится точная площадь,
покрываемая
пикселом в
пространстве изо-
изображения. Задача состоит в том, чтобы отобразить площадь пиксепа из пространства изображения на поверхность в объектном проИнтенсивность
в фактурное пространство.
пространстве, а загем
—
Рассмотрим кусок поверхности, образованный октантом слинмчнол сферы
(рис. 5.32, Ь). простой узор в виле решетки (рис. 5.32, а). Кусок поверхности нукно
повернуть на -4<° вокруг оси \\ затем на 35° вокруг оси х и изобразить в ортогоортогональной проекции на растре 32 х 32 (рис. 5.34, а).
эалан на
64 х 64
Узор
гае камлая строка нмеег один пиксел в
высоту
i
t
1
-
;
(рис. 5.34, Ь).
Сначала кусок поверхности разбивается на фрагменты, а затем
1
64
1
растре
i
у <
1
преобразуется в
1
пространство изображения. Начало координат объектного пространства находится в
менгре растра 32 х 32. Для того чтобы фрагмент покрывал центр только одного
пиксела, необходимо четыре разбиения (рис. 5.34,
а). В пространстве изображения
лпт
"
—-
"
64
32
г-ж
,С иомошыо функции ооратного отображения
из объектного пространства
турнос пространство uw (пример 5.6)
О
и
т/2
<
,
к
2
в
фак
г
\
л
\
•
32
t
f
фрагмента в объектном пространстне суть 0^0^—,
-
¦
1
фрагмент имссг прямоугольную форму. Пределы изменения параметров 0 и v>
л 1я этого
r~
1
i/
1
s.
hs
\
< к ¦a
\
S
1
1
Чы
^_
'
1
^'1
V
1
,
I
4
;
\
|
-—¦
1
-
л
W =
=
тг
2
х
0
4
1
i
1
получим координаты углов фрагмента
в
s
0,
0
=
0,
yfi
-
^
=
фактурном пространстве:
в
т/2
-
и
=
0,
w
59т/64
-
и
=
0.
w
=
-
0,
Ъ
Ряс. 5.34. Отображение фактуры
1/16,
4Л1
430
32
о
1
Гл. 5. Построение реалистических изображении
5.11. Фяктур.1
с
помощью
разбиения
куска.
64
пиксела в
пространстве изображения равна средней интенсивности
Рл
пикселов, покрытых этой площадью в фактурном пространстве. На
21
15
0.795
0.493
0.341
ученный коэффициент умножается диффузная компонента моде-
22
15
0.826
0.479
0.296
22
16
0.802
0.532
0.272
21
16
0.771
0.545
0.329
по
Существуют, конечно, и другие, более сложные мепозволяющие устранять лестничный эффект. Рассмотрим
модели освещения.
методы,
данный
метод на
простом примере.
параметрического представления единичной
Пример 5.8. Построение фактуры обратным отображением пньсечов
Рассмотрим опять октант единичной сферы (put. 5.32, b) и узор
простую ререшетку на растре 64 х 64 (рис. 5.34. Ь) Октант снова нужно повернуть на -45° вовокруг оси у, ни ?5° вокруг оси .v и изобразить в ортогонапьной проекции на растре
сферы
—
32
у
32 (рис. 5.34, а).
Рассмотрим интенсивность пиксела при />
15 на рис. 5.34, п. Пиксел
21, />.
нижним
определяется
Площадь пиксела ограничена
утлом.
21 <
15
16.
22,
^
<
что
окно в объектном пространстве,
Предположим,
Pv ^
Рк
соответствующее растру 32 х 32 в пространенве изображения, зшшни: -1 ^
< х' < 1, -1 < у' ^ 1.1 »гда
споим
=
Pv
ф
=
-
J
-
'
cos
V
cos ф
г
~
cos в sin ф
'
v
=
sin"
параметрическом пространстве. С помошью преобразования
т
примера 5.6 ото-
отобразим параметрическое пространство в фактурное:
и
сферы ?
sin в sin ф
=
получаем
в
Из уравнения единичной
=
=
левым
р
х
(,.v'J + у :), \лс х\ v
—
координаты
т.е. }1.нл
пикселов на рассматриваемой поверхности таковы:
.-г/2
0_
и
пиксела в
i
-
ф
=
Т/А
jt'2
п
объемном пространстве посче «илового преобразовании. Коорлииаты умов пиксе-
•
=
фактурном пространстве
Рх
Р,
Ф
в
и
И'
60 .50°
61 .34°
57 .88°
56 .99°
66 .04°
70 .30°
71 .28°
0.734
0.656
0.781
0.636
0.792
0.714
66 .88°
0.743
0.7^4
Рх
Ру
.г'
у
21
15
0.3125
-0 .0625
0.948
21
22
15
15
22
15
0.3750
-0 .0625
0.925
22
22
16
0.3750
0
0.927
21
16
16
21
16
0.3125
0
0.950
ч
На рис. 5.35 показан результат, где криволинейный участок шцфоксимириван четыпреобразование до проецирования на плоскость картины и обратное преобпреобразование cyib
четырехугольным.
Заданный на растре узор проходит через левое
пиксела
0.707
-0.406
0.579
0
0
0.819
0.574
0
0 707
-0 406
0.707 -0.406
0
0
0.579
0
0
1
0.579
0
0
-0.707
0 819 -0.406
0.574
0.579
0
0
0
О
О
1
можно
вычислить
несколькими
методами
ребро пиксела. Интенсивность
(см. разд. 2.25), например,
как
центры которых лежат внутри пикпиксела изображения. В данном случае отношение «черных» пикселов фактуры, образу*
юшп.х узор, ко всем пнксспам с центрами внутри пикселов изображения равно 5/1 В.
взвешенное
среднее значение пикселов фактуры,
На это число умножается интенсивность диффузной составляющей в модели освещеосвещения.
Обратное преобразование шег углы пиксела ио куске поверхности н исходной орненташш.
п
именно:
\х
v
г
1|
=
|.г' /
rf
Щ71
В ряссмотренных методах рисунок наносится на гладкую поповерхность п она после этого остается гладкой. Дтя того чтобы поповерхность
432
Г.]. 5. Построение решистичеекпх изоОр 1жснни
433
казалась
5.II. Фдкт>ра
шероховатой,
можно
оцифровать фотографию
q:
-
QL
Возмущенная нормаль
п'
Рис. 5.35. Пиксел изображения
в
фак-
фактурном пространстве.
Первый
=
Q. <8> Q.
член
—
имеет
=
Qu+гл
Q» + Лф
вид
п)
Р»{п ® Qu)
+
у
у
нормаль п
к
исходной поверхности,
шероховатой поверхности н, следовательно, в направлении отражения
есть небольшая случайная составляющая. На этой основе Блпнн
[5-25] разработал
метод
возмущения
поверхностей.
В любой точке поверхности
нормали
для
поверхности
в
и
и
w,
последний
=
П
I
,
I
и
где длза последних члена,
представляют
приведенные к единичной длине, представ-
собой возмущение нормали
к
поверхности
и
создают
соот-
соответствующий эффект в модели освещения.
В качестве Р можно использовать почти любую функцию, у ко-
которой существуют частные производные. Блипн работал с просты-
Q(u, w) частные производные по
Qu и QwJ лежат в плоскости, касательной к
этой точке.
П
построения не-
неровных
направлениям
а
равен нулю, поэтому
[п ® Qh)
нерегулярной фактуры и отобразить ее на поверхность. Однако при
этом будет казаться, что неровности нарисовапы на гладкой поповерхности. Дело в том, что в векторе нормали к настоящей шеро-
п
Нормаль в ней определяется векторным
произведением
простыми
сетками, заданными математически, битовыми изображениями
символов, узорами, заданными с помощью ^-буфера,
и
рисунками,
Например, на рис. 5.36. Т. ван Хук отобразил
заданную фактуру на кусок бикубической поверхности. Если узор не
сделанными от руки.
Блини строит новую поверхность, которая выглядит шерохова-
шероховатой,
внося
в
направлении нормали
функцию возмущения Р(и, w).
Таким образом, радиус-вектор точки на новой поверхности есть
Q'(ft. vi')
=
Q(m, w) + Р(и, w)-jj|
Нормаль к возмущенной поверхности имеет вид
п'
=
q; ® о;.
Частные производные С^ и Q,'t. выражаются формулами
а
Последним
пренебречь, так как Р (функция возмувозмущения) очень мала. Поэтому
434
членом
можно
бикубическую поверхность: (а) шаблон фактуры,
(С разрешения Т. ван Хука, Adage, Inc.)
Рис. 5.36. Фактура, нанесенная на
(Ь)
результат.
Гл. 5. Построение реалистических изображений
435
о
5.11. Факт\ра
определяется аналитически, то
как
двумерная табаица
значения вычисляются
величин, а производные
функция
цветов с
возмущения записывается
индексами
и,
»v.
Полученная
фрактачьная
поверхность
Исходный
мноюуюльннк
Промежуточные
билинейной интерполяцией табличных вели-
Ри и Pti> вычисляются методом конечных разно-
разностей.
Эффект шероховатости зависит от масштаба изображаемого
объекта. Например, если размер объекта увеличится в два
раза, то
величина
вектора
нормали
в
возрастет
четыре раза, а его
только в два. Это
возмущения
приводит к тому, что увеличенувеличенный объект кажется более гладким. Однако масштаб
на
Рис. 5.37. Формирование
фрак-
—
тальной поверхности.
фактуры
перспективном
пространстве
изображении
по
не зависит от
направчению к
перемещения
объекта в
бра'кается
наблюдателю или от него.
При изображении фактуры с помощью функции возмущения
может появиться лестничный эффект, но если воспользоваться
расрассмотренным
методами
выше
способом усреднения по площади фактуры
или
устранения лестничного
эффекта, основывающимися на
предварительной фильтрации, то фактура может полностью сгласгладиться. Как указал Блинн [5-25], необходимо
рассчитывать изобраизображение с разрешением, большим, чем
у дисплея, а затем отфильтроотфильтровать
или
усреднить
его
и
вывести
с
боаее
(см. разд. 2.25).
Один из последних методов построения
низким
разрешением
нерегулярностей осно-
основан на
фрактальных поверхностях. Фрактальная поверхность состо-
состоит
случайно
из
заданных
или биполиномиальных
поверхностей. В машинной графике этот метод первым применичи
помощью
любого
подходящего
алгоритма
удаления
поверхностей и любой модели освещения. Однако число
разбиений возрастает со скоростью выше линейной, поэтому межневидимых
разбиений и уровнем детализации должен быть ненекоторый компромисс. Иначе потребуется слишком много вычисле-
между количеством
вычислений.
Типичный пример (см. цветную вклейку 4) получеп Кадзия
15-29]
алгоритма выделения непрозрачных видимых поверхноповерхностей методом трассировки лучей. Верхняя сцена на цветной вклейке
с помощью
из
фрактальных треугольников, а нижняя
262 144 треугольников. Обратите внимание на собственные тени на
изображениях.
состоит
экрана
с
из
—
16 384
полигональных
Карпснтер [5-26], а также Фурнье и Фассел [5-27]. С помощью
фрактальных поверхностей изображались природные объекты
5.12. ГЛОБАЛЬНАЯ МОДЕЛЬ ОСВЕЩЕНИЯ
С ТРАССИРОВКОЙ ЛУЧЕЙ
—
облака, а также ландшафты. Этот метод основан
на работе
Мандельброта [5-28].
Для того чтобы получить полигональную фрактальную поверхкамни, деревья,
поверхность, исхоаный многоугольник рекурсивно разбивается на
фрагфрагменты, как показано на рис. 5.37. Для этого
можно, например, слуслучайным образом сместить центр и
середины сторон многоугольнии
многоугольника, причем
исходный, и полученный многоугольники не обязаобязательно должны
быть плоскими.
Одно из преимуществ фрактальных поверхностей в
можно
точка
изображается
наблюдения,
тем с
от положения
том,
что их
наблюдателя:
чем
ближе
большей степенью детализации изобража-
поверхность. Если наблюдатель находится далеко, объем
вычислений
значительно
сокращается.
наблюдателю света в каждой точке
(пикселе) изображения. Она может быть локальной или глобальглобальной. В первом случае во внимание принимается только свет, падападающий от источника (источников), и ориентация поверхности. Во
интенсивность
вы-
отраженного
втором учитывается
также свет,
Гп. 5. Построими?
рсплистмчосмчч
отраженный от других объектов
пропущенный сквозь них. Глобальная модель воспроизвоспроизводит чрезвычайно важные эффекты; некоторые из них показаны
5.38
Сфера, треугольная призма и параллелепипед на рис. 5.38 непронепрозрачны, их поверхность зеркальна. Наблюдатель смотрит из точки
О на точку 1 на сфере. При этом он видит не только сферу, но и
точку 2 на призме. Призма, загороженная от наблюдателя параллепараллелепипедом, становится видимой из-за отражения в сфере. Точка 5
Фрактальная поверхность изол .
•136
к
сцены или
на рис.
разбивать «бесконечно» и получить любой уровень детали-
детализации. Он может зависеть
Модель освещения предназначена для того, чтобы рассчитать ин-
иишра*. «.-чии
осп ик'имп
тг
dohko
.1>че \
в алгоритме Уиттеда
на
более реалистичную модель с характери-
диафрагмы настоящего фотоаппарата, котоискажения объеккоторая учитывает влияние глубины резкости, фокуса,
объектива и фильтров. В последовательности кинокадров возможно поПотметпостепенное появление и исчезновение изображения. Метод
характеристиками объектива
и
сила двухшаговый.
На первом с помощью обычного алгоритма трассировки лучей
для камеры с маленьким отверстием по выборочным точкам стро-
изображение. Для каждого пиксела вместе с интенсивностями
RGB хранится также глубина z и данные о видимых поверхностях.
Второй шаг работает как постпроцессор и создает модель фотоапфотоаппарата с конечной апертурой. Каждая точка преобразуется в круг
по законам геометрической оптики. Распределение размеров и инстроится
Источник
\ P| (Рд/
свега
Наблюдатель
Рис. 5.38. Глобальное
освещение.
кругов размытости зависит от значения z точки,
характеристик объектива и его апертуры. Для того чтобы найги
интенсивности
призме видима еще более косвенпо. Она отражается от обратобратной стороны параллелепипеда в точке 4 к точке 3 на сфере, а
на
затем
к
—
в точке
Г
находятся
паблюдателю. Кроме того, наблюдатель видит точку 5
после одного отражения от
два
сферы, поэтому на сфере на-
изображения призмы. Изображение, расположенное
1, перевернуто, так как получается после одного отра-
вокруг
точки
отражения;
вокруг точки
двух отражений.
3
не
перевернуто,
так
как
получается
поспе
Интенсивность второго изображения меньше. На-
Наконец, в сфере отражается обратная сторона параллелепипеда, т. е.
наблюдатель видит ее, хотя на нее не падает прямой свет источниисточника.
Эта сторона освещается рассеянным светом и светом, отражен-
отраженным от других
объектов сцепы.
Отсюда следует, что обычная операция отбрасывания задних
граней, применяемая при удалении левидимых поверхностей, здесь
не годится, как и предварительная
сортировка по
из
всех
гл.
4,
интенсивность
хаин-
пиксела, нужно сложить интенсивности всех пересека-
пересекающихся в нем кругов размытости. Типичный результат приведен
на цветной вклейке 6.
Уиттед пользуется моделью с такими же членами рассеянного и
ламбертовского диффузного отражения, а также зеркального отраФонта,
отражения
как и в
локальной модели освещения, описываемой
E.7). Члены, соответствующие глобальному зеркальному отражепропусканию, рассчитываются по правилу, показанному на
рис. 5.39. Здесь трассируется луч V, падающий на поверхность в
отражению и
точке
Q. В этой точке он отражается в направлении г
и, если по-
поверхность прозрачна, преломляется в направлении р. Здесь/,
интенсивность света, падающего в точку
Q
по направлению
—
ин-
р. Этот
глубине. Поэтому
алгоритмов удаления невидимых граней, рассмотреных в
остается только метод трассировки
лучей. Таким образом,
глобальная модель освещения является частью алгоритмов выделе-
Иегочник-j
\
(fi
выделения видимых
поверхностей пугем трассировки лучей.
Первые работы в этой области принадлежат Уиттеду [5-30] и
Кэю [5-13, 5-14]. Алгоритм Уиттеда более общий, он был расширен
Отражающля/преломляюшая
и часто
используется. Синтетические изображения на цветных вклей6 и 7 получены Уиттедом [5-30], Потметсилом
5-32] и
5,
[5-31,
Барром [5-33] с помошью алгоритма Уиттеда или его расширений.
На них видны эффекты отражения, преломления и пропускания, а
вклейках
также тени
и
поверхность
фактура.
Рис. 5.39. Зеркальное отражение п преломление
Обычно в машинной графике предполагается, что изображение
создается
<Ш
Гл.
в
глобальной
модели
освещения
камерой с маленьким отверстием. Потметсил заменил ее
5. Построение реалистических
439
изоОрпжсннЙ
5Л2.
Глиби.1мпш
чолсль
освещении
с
грассиривкпи
очен
свет
преломаяется
—
направлении
и
достигает
наблюдателя,
находящегося
в. на-
V.
пересечения
с
объектами
—
интенсивность зеркально отраженного
света,
падающего в направлении
г и отраженного к наблюдателю в
точ-
Такой
процесс повторяется,
На рис. 5.40,а
пока
изображен
для случая пересечений луча с одной поверхностью, а на рис. 5.40,b
не останется ни
Аналогично Is
сцены.
одного пересечения.
он
-
точке
О,
п
—
к
нормаль
поверхности в точке О,
-й
источник
j
локальные
света, S и R
Ц
—
—
наблюдения и от-
векторы
отражения,
у}
показатель
—
преломления
среды,
направление на
п
—
степень
проФонга для зеркального отражения
наблюдаемая интенсивность / выражается
пространственного распределения
(см. разд. 5.2). Тогда
формулой
/
^
=
каГа +
кф ks
•
—
зеркального отражения,
их
L,)
+
построено соответствующее дерево. Каждый узел дерева представпредставляет собой пересечение луча с поверхностью. Из каждого узла исхоисходят две ветви: правая, порожденная преаомлением, и левая
отражением. Ветвь кончается, когда луч покидает сцену.
пропущенного лучей рассчитываются по законам геометрической
оптики. В частности, отраженный луч г и падающий луч V лежат в
и
плоскости,
и
E.16)
коэффициенты рассеянного, диффузного и зеркальа*,
коэффициент пропускания. Уитгед считает
коэффициентов от угла падения и длины
волны.
диффузное
и
равен
углу
отражения
(см. разд. 5.3). Пропущенный луч преломляется по закону Снеллиуса (см. разд. 5.9). В нашей модели и обозначениях направления г и
р таковы
—
выше моделей освещения можно найти
зависимость этих
это
падения
угол
•
г =
постоянными, однако с помощью любой из рассмотренных вы-
E.16)—
от-
При пересечении луча с поверхностью направления отраженного
одной
h ? //.(§ R,)" + ksh + kjt
—
Две суммы по у
зеркальное
отражение
коэффициенв
от
р
=
v1 + 2п
kj{h + v')
—
й
где
уравнении
v'
=
множества
источников.
В
разд.
п|2)"
4.13 рассмотрен алгоритм
построения видимых непро-
непрозрачных
поверхностей, в котором луч трассируется до первого пепересечения с объектом. В глобальной модели освещения
на
к
работа
этом
-
не
кончается. Здесь
предполагается, что падающий луч v в
О
точке
отражается в направлении г и пропускается сквозь
поверхповерхность в направлении
р, как показано на рис. 5.39. Это значит, что
в точке О
образуются еще два луча, для которых нужно найти все
Здесь к
преломления, an
вектор едиединичной нормали в направлении падающего луча. Если знаменатель
—
отношение показателей
—
кг комплексный, то происходит полное внутреннее отражение, и /,
предполагается равным нулю.
Для того чтобы определить
пересечении луча с
интенсивность в
поверхностью, надо пройти дерево в
каждом
пересече-
обратном направ-
направлении. Интенсивность в узлах рассчитывается в соответствии с мо-
Поверхность 3
1
Ветвь
освещения, причем для каждого следующего узла она ослабослабляется с расстоянием между точками пересечения. После прохода
преломления
всего дерева получается окончательная интенсивность пиксела.
моделью
Не 1 вь
отражения
о
/Vp,
Р>/\р,
Г:
Теоретически дерево трассировки луча может быть бесконечно
глубоким. Построение оканчивается, когда все лучи уходят за препределы сцены, но его можно прерывать, когда интенсивность узла па-
Наблюдатель
падает ниже определенного уровня или когда исчерпан запас памяти.
На рис. 5.41
Поиерхность I
Рис.
44U
5.40. Трассирование л>ча
с
отражением
и
преломлением.
Гл. 5. Построение реа.1исп1>№скн\
изображений
внутреннее отражение
в
замкнутом про-
Лучи, зеркально отраженные от внутренних граней,
остаются внутри объекта и в конце концов поглощаются. Для нанаблюдателя они невидимы, однако в каждом пересечении луча с попрозрачном
а
показано
12
теле.
-.т.«».
оснешеиия с
грпссировкои лучей
Наблюдатель
Интенсивноегь рассеянного
=
/д
света
1.0,
nt-нь пространственного распределения Фонга для
г|
отражения
I
1(
—
10. С гс-
зеркального отражения п
~
50
ыя всел поверхностей.
Ветвь
Ветвь
источника
ш-нсненвноепь
Луч
преломления
наблю1агсля к сиене. Coniшгсiiivioiiiec
по напринлению ог
отслеживается
1. Полетзп \яп
дерево изображено на рис. 5.40,Ь. Сначала л\ч полает на гювермюаь
=
5. в уравнение плоскости, получаем
его уравнение до пересечения, л
v
+ ;
-
12.5
5
=
ь Z
12.5
-
-
0
-
=
z
7.5.
повермюстыо, соответствующее первому > j,iy дерева, проис7.5. Г-диннчная нормапь к поверх ной п в этой точке
5, z,
т. е. пересечение чуча с
хоояг в точке -vf
a
=
=
i
k
\ 2
\ 2
b
Найдем преломленный и отраженный лучи:
Рис. 5.41. Внутреннее отражение в прозрачных объектах.
верхностью
образуется преломленный луч, который покидает объ-
объект и может
прямо и.ш
,
наблюдения. Такие
косвенно достичь точки
-к
V]_
_
лучи должны быть оттрассированы.
Для того чтобы включить в алгоритм тени, надо из каждого пепересечения луча с
теневые зонды.
поверхностью направить ко всем
источникам
L-
Направление отраженною луча еегь
Если на этом направлении между данной точкой и
другой объект, то точка относительно этого исисточника лежит в тени и его вклад в локальное диффузное и зеркаль-
г,
=
v,r + 2п.
-\2к + 2
=
лежащая на пути луча,
попадает на
/«
v,
непрозрачна, то свет источника вообше не по-
поверхность,
отбрасывается прозрачной
по-
-r
n,
/=-.
_
=
i
-V2k +¦
+
\2
Теневые зонды показаны
на рис.
5.40.
i
плоское»и перпендикулярны плоскости о)маги,
получаем
обозначеннойxz. Наблюдатель на*о=
III гея в бесконечное гн на положительной полуоси"
темной» точечного источника света
v
=
3, z
=
при л
5.
p,
Координаты
Ю. Поверхности заданы >равнени=
ешш-
поверхность I;
х + z
повермюсть 2:
v
поверхность 3:
v
-
—
z
-
-
4 < дг ^ 6;
А ^ х < 6;
12.5 = 0,
2
0.
=
Зс + 9 = 0,
*/l(n, + v,')
-
=
ft,
К этой
"I
=
0.15, ка
=
о. 15, к
1
=
'I
=
0.8. к1ч
=
0.5, к ч
0.5, к
х-
=1.1;
|
=
Гь 5.
0.15. Лг
=0.15. А'.
=
U.8. к,
рс.1.1ИСТмческн\ нюирн-ксннй
=
0, А
-
-
l±
.
VJ.
1
0.1681- 1.582k
=
5 + 0.168/
7.5- 1.582/
Подставим в уравнение плоскости:
1.1:
д:
=
(-L JL )
отраженный луч покидает сиену и больше не рассмагрниасгся. Вюрпп
vie.i образуется при пересечении преломленного луча со нторой поверхности к»,
шем преломленный луч
р] в параметрической форме:
1 ^л ^ 3.
0.8, к,
1.238
гочкс
z
=
л
1.238
f
Поверхности обладают l'ic-ivioiuiimh оптическими свойствами:
=0Л5,к. =0.15, к
i
=
преломленный пуч
=
поверхность 3: к
\2
'(A)"-
~-lvi +n,h
>равнениями плоскостей, т. е.
ка^
—
-1/2
Рассмотрим простую дв>мерную сцену, изображенную на рис. 5.40,а. Одиночные
поверхность 2:
=
то
Пример 3.9. Глобальное освещение и трассировка лучей
понермгасть I: к "
—
к
i
Ь
—-
ослабляется в зависимости от ее свойств. Те-
поверхностью, то свет
<
+•
Так как
(см. разд. 5.10). Если поверхность, ле-
а если тень
—
\V2
источником лежит
зеркальное отражение уменьшается
[
-
-
z
2 = 5 + 0.168/
-
7.5 + 1.582/ -2=1.75/
-
4.5
=1.1;
443
5.12. Глобальная
модель освешеяня с
трассировкой л.\че(«
=
0
Отсюаа t
2.571,
=
и
точка
мсрсечення
5
=
v
¦»
ре^льтатс иолучасм
(U.I68)B.57O
"Е-7 5~il.582jf2.571)
=
Па
»с
того и
>/E.43:-5J
=
'
^а чет
".. луча и
.
нормаль
к
начинается
интенсивности
источником
ленный лучи:
шннчная
Мт сво<»стн повермкнпн пнлно,
0. поэтому она непро-
=
А,
внизу
j
г'ни
и
ь
третьем узле. Скнозь поверх-
полому точка пересечения
рассеянным сиетом. Ею интенсивность раьна
гслько
квешаетсн
1-W«
поверхности
дерена
начочится сама поверхность,
=Pl =0 168i- L5H2k
l0 15)(h
=
=
0.15
Сил передается по направлению вектора отражения г 2 ко второП поверхносл* и ос
к
-1
что
3 свет не проходит. Тенсиой зонд позволя i определить, что между точкой па-
HAti
п
-l,765i- 1 643k
непрозрачна и нрол7шетшого луча ньт.
C.433-7.5;2= 4.
Теперь б качестве падаюшего луча рассмотрим р, и наймем отраженный н прело.\
v.
=
отраженный, и преломленный Я)чи уходят ia предепы сцены, п. е. де-
чо okjumhb 1СТСЯ
02
-1.7131 + 0.483k
3.433
1'асстояние между двумя течками пересечения
-
=
5 432
=
с
расстоянием d 23:
\1
В результате имеем
3.151
Д23
р,
0-215i
=
—
1.1
г~= -1 278i 4- 0 136к
Во втором узле дерева» np^ciasjtHiomevi ючку исрессчения д>ча со второй иоверхь стьо, теневой зоил ке пересекает «.я ни с одним объектом. Это зннчиг, что точка
Преломленный луч покидает сиему, не пересекаясь с друпгчи объектами, по?, ому
га встпь дерева оканчивается. Пересечение отраженного tyna
т2 с третьей пиверх! остью
rpcnift узел дерева. Используй параметрический
плоскости, найдем пересечение с третьеп поверхностью. Луч
лае г
=
5.432- 1.278Г
=
3.433+0.136/
.
вил
Вектор из to«mi к источнику имеет вид
»е«иена источником.
Ц «"(*,
г2 в уравнении
-
-
л2)
г,!к= C
=
5.432)i + A0
-2.4321
-
-
3.433)к
6.567к
-0.3471 + О.938к
=
v
-
Следовал «льно,
полпавим в уравнение плоскости
-
Зг
Отсюда /
-
=
9
=
5.432
2.451. и
-
1.278/
«очка
-
VM33 + 0 136f> + 9
=
-
1.686/ ¦*¦ 4. ГЧ
&>•?,г
^
0
(—+—\
\V5
=
=5.432
=
-
(L278jf2.45i)
=
=
0.909
VI)
пересечения
-
-0.3471 + 0 938kj
(-о
Попрш-ioiHe отражения луча от источннкч
2 2**9
,* 3 433+ @.116I2.451)- ЗЛ«>6
R2
=
-0.938i + 0.347k
Расстляпне между двумя точками пересечения есть
Ыипшчный вектор наблюдения равен
-
Vfe.299-5.432J2
'
«3.766-3.43^
=
3.151
Рассматривая луч г2 как падпюшнп. опрсдсп>ш отражснпыП и преломленный
v
=г
-
-1 2781+0 136k
I-циничная нормаль к поверхности со стороны падения
uv«a
ичд
=
р, и
Г-0 1681 + 1.582k)'(-0.9381 + 0.347kj
ч
•
п,
L2)
-
h
•
-
pt
@.8)(.О476) + @.5)@)
+AО)(О.8)(О)
A0)@.8>@) + @.8)(.О47б)
@.15)(I) + A0)@.15)@ 909) +
=
1.552
Эта интенсивное 1 ь перелается вдоль век гора преломления
Pj к первой поверхности.
Уч>п• пая ос 1дбтенне света с расстоянием d
имеем
VT0
Гл. 5. I loCTpf)-НИе ргя 1ИСТКПСГК. ч H3O6p.fKt:llHlf
0 707
R2)" + ksll52
n,
\ ТО
=
Итак.
=
.ее»
р5 •?,
-
I?. Г.) мл. ьн.1.
моде»
освеиения
с
трлссир< пкоЯ
-
i «мздой
i
joh'I опять не пересекается ни с олннм ооъектом. т. с.
Вектор L,
ъчииком.
L
от
гочкз освешена ие-
точки к источнику имеет вил
=
переполнения
=
=
(
+
\V2
)• (-0 625i-r 0.781k)
—
=
-л, -R,
i
=
наблюдателя. Максимум
',
A.I.A.
//*</, (n,
LI
-'
(ki-(O.781l-0.625k)
=
•
интенсивность воспринимает
хо.ипся
т
A/./,,
отражения
к источнику,
и
позтом>
=
0.505
так как поверхность
точка видна
па-
1рн построении цветных изображений приведенные расчеты выполняются три
аза: оглельно для красной, пленой и сини! компонент, причем кажлый раз со своиошнческими
характерно гик-шн.
лучей магазинного типа, который служит для передачи инфор-
информации
об отраженном и пропущенном свете между элементами де-
дерева луча. В каждый момент времени стек содержит только часть
дерева, поэтому его объем можно ограничить самой длинной пред-
предполагаемой ветвью. Ветвь дерева оканчивается,
отраженный,
и
когда и
отражен-
преломленный лучи уходят за пределы сцены или когда пе-
умножить
учетом затенения
же моделью, но
на
пересечении,
и
чтобы
-146
с
использованием
запоминается,
и в каждом
поспеду-
вкчад интенсивности аппрокси-
без учета теней. Получившаяся ин-
эффектами
и
преломления
от
k^kt /d2ydn (см. пример 5.9). Если при этом интенсив-
то
некоторый процент интенсивности в первом пере-
преломленный и отраженный лучи заносятся в стек, в
в
этой
точке ветвь оканчивается.
Холл
[5-34,
5-35], применяя аналогичный метод, обнаружил, что средний раз-
наблюдаемую интенсивность вносится эффектами глобальной момодели уже после построения дерева, то изображение получится ненеполным. Правда, вероятность этого для большинства сиен невелиневелика, и значительная экономия оправдывает-такой метод.
Дескриптор объекта похож на аналогичный список из разд. 4.13
для алгоритма выделения видимых непрозрачных поверхностей с
помощью
трассировки лучей. Стек лучей содержит следующие дан-
данные о каждом луче:
Номер луча
однозначно
Тип луча
V
то алгоритм рассчитывает интенсивность исходного луча, исполь-
рассеянного, диффузного
отражения в точке падения луча.
конкретного
совокупным расстоянием, которое проходит луч
противном случае
интенсивность исходного луча равен нулю. Если переполняется стек,
используя
вычисляется
ослабляется совокупными
интенсивность превышает
переполняется стек. Если оба луча покидают сцену, то их вклад в ин-
лишь компоненты
вклада
размер дерева и объем вычислений уменьшается более чем в 8 раз. ОдОднако этот метод не совсем корректен. Так, если основной вклад в
На рис. 5.42 приведена блок-схема алгоритма трассировки луча
с использованием глобальной модели освещения. Здесь применяется
стек
попадающего в
первого пересечения с поверхностью до текущего. Например, приприближенную интенсивность на поверхности 3 (рис. 5.40) нужно ум-
не очень
Заметим, что первая поверхность пропускает более трети интенсивности
дюшеи от второй. Из-за большого п нет локальных
зеркальных бликов.
четко
1н
с
юшем пересечении максимальный
-0.625
наблюдатель. Она невелика,
«ол очень острым углом
света,
относительного
ченпое значение интенсивности
@ I5M.I) + (ЮХ0. l5)@.11) + (I0K0.8H0) + @.8X01 + fO.5KO.379)
т>
кото-
ламбертовскому диффузному отраотражению и зеркальному отражению Фонга в уравнении E.16). Полу-
vf и
/rf.,,1.—v, R,)n + Л,,/д,
те лучи,
только
локальной модели освещения, например членов, соответству-
интенсивность
'
Для
в
аппроксимируется этой
»"
алгоритма.
соответствующих рассеянному отражению,
Поэтому
=
в стек
влияют на интенсивность
глаз
поверхностью
0.78li-0.625k
—
эффективность
записывать
значительно
лишь
.шничпый вектор наблюдения ранен
алгоритма
наблюдаемую интенсивность определяется следующим обобразом. Приближенная интенсивность в первом пересечении луча с
\2.'
=
повысить
которые
узла
0. ПО
Направление отражения луча от источника представляет собой
R,
можно
этого можно, например,
-0.6251-Ю.78 Ik
леаоаатсльно,
n,- L.
измененного
Сокращая среднюю длину дерева или стека, т. е. уменьшая объ-
-21 т 2.5k
объем вычислений,
L,
Блок-схема
стека.
рис. 5.43.
на
дана
C-5)i + A0-7.5)k
^
=
рева без
Алгоритм
иметь возможность вводить один
Гл. 5. Поггроонне роа.шегнческнх
и
определяющий луч
луч, исходящий из глаза наблюда-
наблюдателя и проходящий через пиксел; г
зеркального отра-
отраженный луч; р
можно дополнить так, что-
Номер исходного
дополнительный уровень де
итпраженнй
—
номер
—
5.12.
от-
преломленный луч
луча, породившего данный луч
луча
•М7
—
Глобальная vnncib осшшсиия с трнсенронкон
.iy«ulfl
Извлеч». луч из стека
ла
Установлен
ли флаг
Вычисление
интенсивности I
пересечения?^
ла
ист
Извлечь луч
Занест н 1,
Занести I,
в стек для
в стек для
исходного луча
исходного луча
из стека
Повышен ли
объем стека?
нет
Вычисление расстояния
между точками
пересечения луча, d
Уменьшить
номер
поколения луча
Вычисление
1,-0
интенсивности
I
d-l
±
I
Установить фла! пересечения
|
±
Занести луч назад в стек
Исходный \ да
{яуч соппадас!/
с лучом
г?.
Уисличигь номер поколения луча
нет
Найти
отраженный и преломленный лучи|
j
Eci ь ли
нет
отраженный луч'/,
ла!
| Увеличить номер луча
Занести I,
Занести
в стек лля
в стек для
исходного
исходною
луча
луча
s
Г
Занести отраженны» луч в стек
<Есть
ли
|
прелом\
луч?
ленный
/
1
Увеличить номер луча
1
Занести преломленный луч н стек
[
1
Рис
5.42. Блок-схема алгоритма трассировки луча с использованием глобальной модели освещения.
1
¦
Найти
преломленный
Найти
отраженный
луч
ЛУЧ
Инициализация
j
—
количество источников света
Няптн пересечение
Найти пересечение
прелом ченного
отраженного
пуча
л\ча
Определить d
Определить d
f
Вычислить
Вычислить
интенсивность 1
интенсивность I
при
I,
=
1,
=
при
\
О
=
I,
=
0
t
/Есть ли
1.-1
пересечениях
с непрозрачными
обьектами?
Вычислить
Рис. 5.43.
Модификация ал-
Для кажлою
алгоритма трассировки луча с
прозрачно!о объекта
использованием
уменьшить интенсив-
глобальной
модели освещения.
р,
как
Пересечение7^
Н1Л 1
исходного луча
v, г или
да/
нет
интенсивность I
Тип исходного луча
Флаг пересечения
V
/
определено
интенсивность
1
выше
1, если у данного луча есть пересечения;
Найти Rj и
S;
О в противном случае
Указатель объекта
определяет
положение
пересекается
которым
объекта, с кото-
луч,
в
,
kd(n
I ,)+ 1, ic.fS,
-
R.)
дескрипторе
объекта
Рис. 5.44. Б ток-схема модели освещения для алгоритма трассировки луча с исполь-
Координаты пересе- х> У
Z
пересечения
исходит данный луч
Направляющие
которой
ко-
—
коэффициенты точки, из кото-
использованием
освещения.
В алгоритме применяется модель освещения Уиттеда (рис. 5.39).
расстояние от пересечения исходного лу-
Блок-схема, показанная на рис. 5.44, соответствует блоку «Вычис«Вычисление интенсивности I» на рис. 5.42. Если изображение цветное, то
луча до пересечения данного
этот блок выполняется трижды
интенсивность пропущенного света в нанаправлении данного луча
интенсивность
зеркапьно
отраженного
света в направлении данного луча
Когда луч впервые заносится в стек, значения
пересечения устанавливаются равными нулю.
процессе работы алгоритма.
450
модели
определяют направление луча
косинусы
в
побальной
Гл. 5. Построение реалистических изображений
/5, /,, d и флага пе-
Затем они изменяются
—
для
каждого
из
основных цве-
Векторы от точки пересечения с поверхностью до источников
света (теневые зонды) проверяются на пересечение с другими объобъектами. Если на их пути встречаются непрозрачные объекты, то
данный источник не вносит вклад в локальное диффузное или зерзеркальное отражение в этой точке. Ее in все объекты, пересекающиецветов.
направлением теневого зонда, прозрачны, то интенсивность исисточника
соответственно уменьшается. В частности, она зависит
пересекающиеся с
1(
от
коэффициентов
пропускания закрывающих
5.12. Глобальная модечь освещения
с
поверхностей. Так,
трассировкой лучсй
непрозрачных объектов падает резкая черная тень, а
от прозрачных
светлая. Преломление света в
прозрачных объек-
например,
от
—
объектах не учитывается.
Пропущенный и зеркально отраженный в точ-
ослабляется с расстоянием между точками пересечения. В
алгоритме предполагается, что нормаль к поверхности можно выточке
свет
вывести из
и
дескриптора объекта. Данную программу можно изменить
включить
в
нее
другие,
более
сложные
модели
освещения
Точьа выборки
(см. разд. 5.7, 5.8, 5.13).
Процессор пересечений был рассмотрен в разд. 4.13, где он при-
Площадь пиксела
применялся в
поверхностей
алгоритме выделения видимых непрозрачных поверхнопомощью трассировки лучей. В нашем
случае необходимо
с
только одно изменение:
с осью z,
начало
Цен гр пиксела
перед тем как повернуть луч до совпадения
b
a
нужно перенести точку его пересечения с поверхностью в
координат.
Луч испускается в направлении
—
z.
Таким
же
образом находятся пересечения теневых зондов с объектами.
Алгоритм (рис. 5.42) начинает работу с построения правой ветветви «преломления» от корневого
узла до окончания ветви, как указауказано пунктиром со стрелками на
рис. 5.45. Затем при
про-
обратном
Рис. 5.46. Устранение
использовалось
может
аналогично
в
находится
интенсивность.
Про-
промежуточной вершине. На
5.45
рис.
стрелки, направленные вниз, соответствуют образованию
луча (занесению в стек), а направленные вверх
расчету интенсивповторяться
каждой
—
луча.
объектов, на контурных ребрах, рисунках фактуры, а также на
объектах, меньших, чем расстояние между точками выборки. Для
ветвь
и
эффекта трассировки
краях
того чтобы
«отражения»
лестничного
областях с большими перепадами интенсивности, например на кра-
проходе вычисляется интенсивность узлов. После этого строится левая
Процесс
Разбиение пнксспа
уменьшить объем вычислений, в этом методе использовызываемое
динамически
рекурсивное
разбиение Варнока.
Вместо трассировки лучей,
проходящих
через
центры
Уиттед
проходящие
через
точки
отслеживает
лучи,
углах пиксела (рис. 5,46, а). Для растра размером
интенсивности
(извлечению из стека). После того как вклад луча в интенсив-
необходимо
интенсивность
вершины
(л
+
п
х т
пикселов,
выборки
в
необходи-
1) х (tn + 1) таких точек, т. е. увеличение сравнительно
Когда
остается
небольшое. Если интенсивности в углах пиксела примерно одинако-
только корень дерева, вычисление интенсивности пиксела
заверша-
одинаковы и внутри нет других объектов, то интенсивность пиксела счита-
завершается и
определен,
луч
отбрасывается.
алгоритм трассировки лучей устране-
равной средней интенсивности его углов. Если же интенсивноинтенсивности в углах сильно различаются (рис. 5.46, Ь), то площадь пиксела
эффекта. Сильнее всего этот эффект проявляется в
разбивается на 4 части и процесс повторяется. Рекурсивное разбие-
полученное значение посылается
Уиттед [5-30]
устранение лестничного
включил в
на
считается
экран.
продолжается до тех пор, пока угловые значения не станут попочти равными либо не превысится отведенный объем памяти или
разбиение
компьютера.
разрешение
Интенсивность
каждой
части
пиксела
взвешивается в соответствии с его площадью, и их сумма составлясоставляет интенсивность всего пиксела.
Хотя данный метод все еще осно-
выборочном анализе, в пределе он эквивалентен сгласглаживанию по площади (см. разд. 2.26).
Для реализации алгоритма нужно по мере построения изображе-
основывается на
изображения последовательно запоминать
строки или столбцы (что короче)
интенсивностей в точках выборки. Тогда не придется возвращаться
или вновь
Рис.
452
5.45. Дерево
Г.1. 5 Построение роымстнческих изображении
трассировки луча.
генерировать ранее
найденные значения интенсивности.
Если пиксел разбивается, в стек заносятся промежуточные значения
453
5.Р. Глоб.ьчьнпн
мо ie.ii.
освещения
с
трлсенропкой лучей
преломленного и отраженного света.
дения
При пропускании света
через прозрачные среды он затухает в соответствии
характеристиками.
с их
Глобальная модель освещения Хочла для j
света описывается следующим
характериисточников
образом:
Кривопшеппая
поверхность
+ к,
Рис. 5.47. Отражение от кривояилейнои поповерхности.
Ly,(n H')"'
•
dt
+ koRdh +
(kaRdIa) и
Здесь в члены глобального диффузного рассеивания
ламбертовского диффузного отражения прямого света от источнизависимость диффузного отражения от свойств
источников входит Rd(\)
—
интенсивности,
необходимы для следующих разбиений;
см. алгоритм
Варнока в разд. 4.4.
Для того чтобы не потерять маленьких объектов, Уиттед
приприменяет сферические оболочки минимального
которые
размера,
однако,
больше расстояния между точками
который, од-
выборки. Когда алгоритм
встречает охватывающую сферу минимального радиуса, а
пересечение луча с
объектом не найдено, то четыре пиксела,
пересече-
которым при-
принадлежит данная точка
выборки, рекурсивно разбиваются до тех
пор, пока объект не будет обнаружен. Этот метод
годится, естл
объект наблюдается непосредственно или
через плоские поверхноповерхности. Однако можно
потерять объекты, которые видны косвенно чечерез криволинейные поверхности. При отражении или
преломлении
в
сильно
искривленных поверхностях близко лежащие лучи
могут
разойтись достаточно далеко и пройти мимо объекта, как
при ототражении от сферы на рис. 5.47. Может случиться, что до
того, как
последовательность разбиений приведет к
пересечению луча с объ-
объектом, произойдет выход за пределы разрядной сетки машины.
Этим способом было получено
на цветной
изображение
вклейке 5.
вещества
ГЛОБАЛЬНАЯ МОДЕЛЬ
ОСВЕЩЕНИЯ С ТРАССИРОВКОЙ ЛУЧЕЙ
Холл
и
Гринберг [5-35] рассмотрели более полную
прямого света от источников в направлении
отражения, так и рассеивание в направлении преломления или пропропускания. Рассеивание рассчитывается по модели Фонга. Холл исиспользует уравнения Френеля, связывающие длину волны
454
П«1. 5.
Построение реалистических изображений
глобального зеркального
френелевского коэффициенкоэффициента отражения от свойств вещества и длины волны (см. разд. 5.8).
Третий член уравнения E.17), соответствующий направленному
отражения входит #у(Х)
включают
Ft
—
зависимость
пропускания от вещества
=
1
энергии имеем F,
—
с
помощью
зависимость
света после преломления, и член
пропусканию
пропускания
—
и
френелевского коэффициента
волны.
длины
глобального пропу-
Из
закона
сохранения
Rj. Величины /?ДХ) и Ft (X) определяются
приближенного метода Кука, описанного в разд. 5.8.
В члены глобального зеркального отражения и преломления также
коэффициенты пропускания в расчете на единицу
длины для отраженного и пропущенного (преломленного) лучей.
Расстояния, пройденные отраженным и пропущенным лучом от по-
Тг и Т(
входят
—
dx. Для того
чтобы смоделировать пропускание света сквозь вещество, Тг и Т(
последнего
пересечения, обозначены соответственно dr
возведены в степень, как у Кэя (см. разд.
показателей
степеней берутся расстояния dr
Член зеркального отражения
и
для
и
5.9). В качестве показате-
dt.
падающего
света,
непосред-
от
источников,
взят
из
модели
Торрэнса
—
угла между направлением на источник и направлением на наблюда-
модель освещения. В глобальной модели освещения Холла
учитыучитывается как рассеивание
Аналогично в член зеркального отраже-
Спэрроу
(разд. 5.8). Угол между нормалью к поверхности п и биссектрисой
5.13. БОЛЕЕ ПОЛНАЯ
и
волны.
света от источников и член
прямого
отражения
непосредственно
Холл [5-34]
и длины
наблюдателя
Н,
т.е.
п
•
Н,
возведенный
в
степень
п,
используется для
представления рассеивания зеркально отраженного
Анало-
света.
Аналогично угол между нормалью к поверхности и вектором
Н'
,
возве-
п', используется для представления рассеивания
нормаль к микронаправленно пропущенного света. Вектор Н'
микрограням поверхности из модели Торрэнса
Сперроу (см. разд. 5.8),
возведенный в степень
—
—
и угол па-
5.13. Более
полм-ш
глобальшш модель освещения
которые отражают свет, падающий непосредственно от
в
направлении р
источника
(рис. 5.39).
Направление вектора
легким сине-зеленым оттенком. Он появляется благодаря тому, что
можно
найти
по закону Снеллиуса
(см. разд. 5.9). С помошью подобных треугольников на рис. 5.48
получаем
ad
=
ab
=
У нас
модели
влияние
на
вещества
[5-34]. Однако, как видно яа
вклейке 8, она создает высокореалистичные изображения, одни из
научной точки зрения не совсем корректна
лучших, полученных к настоящему времени.
^f
v
Холла учитывается
пропущенный
свет. Эта модель получена эмпирически, и, как указал Холл, с научв
Н'
—
р
5.14. НАПРАВЛЕНИЯ СОВРЕМЕННЫХ ИССЛЕДОВАНИЙ
и
ad = ab + bd
Рассмотренные
поэтому
в
раздечах
предыдущих
методы
представляют
мошный инструмент построения синтетических изображений,
ьи
bd=^^
I
некоторых случаях недостаточно
=
772/J/1
=
bd
совершенный, например при изо-
-
изображении природных объектов, моделировании распределенных ис-
Так как
Н'
но в
источников света,
-
р
а также
при передаче движения
с
учетом лестнич-
эффекта. Эти области продолжают разрабатываться, и их
подробное обсуждение выходит за рамки данной книги. Однако
лестничного
то, объединяя полученные результаты,
имеем
можно
в
указать некоторые направления современных исследований
этой области.
Свойства обычного точечного источника, используемого в моде-
На цветной вклейке 8 сравниваются глобальные
модели освеще-
моделях
освещения,
освещения
Уиттеда и Холла. На обеих картинках изображена одна и та
природой
света.
же
сиена,
для огромного количества
картинке
построенная
—
с
методом
помощью глобальной
описываемой уравнением E.16),
глобальной модели
трассировки лучей:
освещения
модели
на нижней
—
на
верхней
освещения
Уиттеда,
с помощью
глобаль-
Холла, описываемой E.17). Сравните изо-
изображения металлических шаров в обеих сценах. Обратите внимание
на цвет отраженного в них
голубого края коврика. Сравните цвета
прозрачных шаров: шар
на нижнем
рисунке и его тень отличаются
существенно
определяются
корпускулярной приро-
Каждый луч должен трассироваться индивидуально, но
лучей, порождаемых источником рассе-
(или) диффузным отражением от поверхности, третребуются недопустимо большие вычислительные затраты. Моравек
[5-36] предлагает решение, основанное на волновых свойствах свесвета. Предварительные результаты довольно интересны, но опять же
рассеянного света и
необходимы значительные вычислительные ресурсы.
Эффект прерывистости в движущихся изображениях появляется
в двух основных случаях. Первый
это обычное квантование; на—
например, когда в последовательности кадров маленькие объекты то
появляются,
то исчезают или когда начинают
изображения. Большинство таких явлений
«дрожать» контуры
можно устранить обыч-
п
обычным
пространственным сглаживанием каждого отдельного кадра.
Ко второму случаю относится временная прерывистость или эф-
эффект смазывания при движении. Объект, перемещающийся с больбольшей скоростью,
кажется
слегка
размытым. Исследованию
этого
вопроса посвящены три новые работы. Корейн и Бадлер [5-37] расрассматривают метод создания синхронизированных во времени и в
пространстве изображений движущегося объекта на одном кадре.
Потметсил
Рис.
5.48. Определение сектора Н
Нестрогий* реалистических изображений
.
и
Чакраварти [5-38]
фотокамеры [5-31],
усовершенствовали
чтобы учесть эффект
1ны\
иесгилований
свою
смазывания.
модель
Для этого
отдельные объекты
объединяется множество
смазывание в
дефокусируются, и на одном кадре объединяетизображений (экспозиций). Ривз [5-39] включил сма-
стохастическую систему частиц путем построения специ-
форм частиц.
Природные объекты
специальных
сложны
трудно
из-за
того,
что
они
нерегулярны. Они могут быть неровными, грязными,
растрескавшимися. Примерами таких объектов являются
огонь,
дым, облака, туман, трава, деревья. Наиболее
в
этой
интересны
Блинна [5-40], Дунгана [5-41], Маршала, Уилсона и
Карлсона [5-42], Ксури [5-43].
Система частиц Ривза [5-39] привлекает особое внимание.
Многие
Мнотрудно смоделировать полигональными
поверхностями, поэтому Ривз и его коллеги, а
природные объекты
ичи криволинейными
также
ряд предыдущих исспедователей в качестве механизма
моделирования стали использовать отдельные «нечеткие»
имеющие неправильную и
нерегулярную форму.
физических и стохастических
процессов
течением времени меняются. Они
моде-
частицы, име-
Под воздействием фи-
форма я свойства частиц с те-
создаются (рождаются), перемеща-
перемещаются
внутри системы, умирают или покидают
систему. Для
чтобы построить кадр с помощью системы
частиц,
того
применяется
следующая процедура:
новые частицы создаются, им
приписываются свои индивидуиндивидуальные атрибуты и они вводятся в
систему;
старые, умершие, частицы исключаются из
системы;
оставшиеся частицы перемещаются по
определенным законам
движения;
строится
связанных с цветом физических явлений, систем представления цвета и
преобразований между ними.
энергию
с
система
чеповека
волн
длинам
от
воспринимает электромагнитную
400 до 700 нм как видимый свет
10~9 м). Свет принимается либо непосредственно от исисточника, например электрической лампочки, либо косвенно при от=
A нм
отражении от поверхности объекта или преломлеиии в нем.
Источник или объект является ахроматическим, если наблюдае-
наблюдаемый свет содержит все видимые длины волн в приблизительно равравных количествах. Ахроматический источник кажется белым, а отбелым, черотраженный или преломленный ахроматический свет
черным или серым. Белыми выглядят объекты, ахроматически отра—
отражающие более 80%
3%.
света
Промежуточные
белого источника,
значения
дают
а
т. е.
Восприятие
серому цвету.
промежуточные значения
Хотя трудно определить различие между светлотой и яркостью,
—
светлота
обычно считается свойством
несветящихся или
зависит
электромагнитной энергии,
от
от
физических
его
взаимодей-
изменяется
в диапазоне от
низкой до высокой.
Светлота или яркость объекта зависит от относительной чувстчувствительности глаза к разным длипам волн.
Из рис. 5.59 видно,
400
зрительной системой
информация дана
45Я
Гл. 5. Построение реалистических изибражений
работах с [5-44]
что
при дневном свете чувствительность глаза максимальна при длине
взаимодействия с физическими
веществами, а также от их интерпретации зричеловека. Эта проблема
чрезвычайно широка,
и
сложна
интересна, и ее подробное изучение выходит за пределы
нашей книги. Дополнительная
в
отражаю-
отражающих объектов и изменяется от черного до белого, а яркость являетявляется свойством самосветящихся или излучающих объектов и изменя-
некоторые из наиболее реалисти-
цвета
серого.
—
Цвет уже не раз упоминался в данной главе и сейчас
будет рассмотрассмотрен подробнее. Он имеет как
психофизиологическую, так и психоприроду.
оттенки
менее
диапаИнтенсивность отраженного света удобно рассматривать
диапазоне от 0 до 1, где 0 соответствует черному, 1
белому, а проме-
5.15. ЦВЕТ
свойств света,
—
в
изображений. Пример приведен на цветной вклейке 10.
психофизическую
черными
различные
изображение оставшихся частиц.
Этим методом были получены
реалистических
[5-47]. Мы рассмотрим наиболее важные понятия, основы свя-
Зрительная
изображать
и
области работы
по
ФиопстоиыП
500
Цвет
Красным
Длина волны Мим)
Рис. 5.49. Относительная чувствительность
459
700
600
глаза.
волны порядка
550 им, а на краях видимого диапазона
спектра она
резко падает. Кривая на рис. 5.49 называется функцией
спектральспектральной чувствительности глаза. Это
световой
мера
интенсивности с учетом
Fi
энергии или интенпроизволь-
количествах, то он называется хроматическим11. ЕсЕсли длины волн
сконцентрированы у верхнего края видимого спектспектра, то свет кажется красным или
о
II-
красноватым,
т. е.
голубоватым, т. е. доминирующая длипо
от
распределения длин волп источника света и от физических
свойств объекта. Объект кажется
цветным, если он отражает или
пропускает свет лишь в узком диапазоне длин волн и поглощает
все остальные.
При взаимодействии цветов падающего и отраженотраженного или пропущенного света
могут получиться самые неожиданнеожиданные результаты.
Например, при отражении зеленого света от белообъекта и свет, и объект кажутся зелеными, а если зеленым све-
светом освещается
красный объект, то он будет черным,
него свет вообще не
отражается.
так как от
Психофизиологическое представление света определяется цветоцветовым тоном, насыщенностью и светлотой.
различать цвета, а насыщенность
100%
Длина волны Х(нм)
Длина но.шы Мнм)
И
5.50. Длины
Рис.
волн
света.
Цветовой тон позволяет
длины
волны
525 нм
с
—
—
площади.
рассматривается как интенсивность на единицу
Обычно встречаются не чистые монохроматические цвета,
а их
В основе трехкомпонеитной теории света служит предполо-
смеси.
предположение о том, что в центральной части сетчатки находятся три типа
чувствительных
к
лежащие
в
воли,
определять степень ослабления
данного цвета белым цветом. У чистого
цвета она
и уменьшается по
энергией Е,. На
а чисрис. 5.5О,Ь цвет определяется доминирующей длиной волны,
это степень разбавлеотношением Е ] и Е 2. Значение Е 2
чистота
Е ? приблиразбавления чистого цвета с длиной волны 525 нм белым: если
а если?2
приближается к нулю, то чистота цвета приближается к 100%,
приближается к Я р то свет становится близким к белому и его чисвета и
чистота стремится к нулю. Яркость пропорциональна энергии
доминирующей
ной
колбочек. Первый воспринимает длины
середине видимого спектра, т. е. зеленый цвет;
цвету
—
мере добавления белого. Насыщен-
Насыщенность ахроматического цвета составляет
0%, а его светлота равна
интенсивности этого света.
Психофизическими эквивалентами цветового тона, насыщеннонасыщенности и светлоты являются
доминирующая длина волны, чистота
яркость. Электромагнитная энергия одной длины волны в
спектре дает
Красный
Фиолетовый
определенной длины волны не имеет никако-
Ощущение цвета возникает в результате преобразования
физических явлений в глазу и мозге человека. Цвет объекта зависит
равна
500
400
себе элек-
никакого цвета.
(разбавления)
Красны П
Фиолетовый
синей части спектра. Однако сама
электромагнитная энергия
700
0 00
5 ПО
400
доминируюдоминирующая длина волны лежит в красной области видимого
спектра. Если
длины волн сконцентрированы в нижней части
видимого спектра,
то свет кажется синим или
нм
О
произвольных неравных
белого
I
им
свойств глаза.
Если воспринимаемый свет содержит длины волн в
длина волны лежит в
I
-—
и
видимом
монохроматический цвет. На рис. 5.50,а изображено
распределение энергии монохроматического света
525 нм, а ва рис. 5.50, b
для «белого» света с
с
длиной
волны
энергией Е г и од-
—
второй
—
красный цвет;
синий.
длины волн у верхнего края видимого спектра, т. е. крас-
третий
—
короткие
Относительная
волны
нижней
чувствительность
части
глаза
спектра,
(рис. 5.49)
максимальна для зеленого цвета и минимальна для синего.
т. е.
макси-
Если на
все
колбочек воздействует одинаковый уровень эпергетической яркости (энергия в единицу времени), то свет кажется белым.
три
типа
Естественный
белый
свет
содержит
все
длины
волн
видимого
спектра; однако ощущение белого света можно получить, смешивая
любые три цвета, если ни один из них не является линейной комбидвух других. Это возможно благодаря физиологическим
особенностям глаза, содержащего три типа колбочек. Такие три
комбинацией
цвета называются основными.
^
Основное
значение
имеют
слова
и
«произвольные». Из
дальнейшего будет видно, что некоторые смеси хроматических
цветов могут воспри-
«воспринимаемый»
восприниматься как ахроматические цвета.
-160
Гл.
5.
Построение реплмпических
графике применяются две системы смешения ос-
В машинной
основных
цветов:
субтрактивная
изоиражсниЛ
461
Цвет
аддитивная
—
—
красный, зеленый, синий (RGB)
и
голубой, пурпурный, желтый (CMY). Они изобра-
Желтый = Красный +
ПурпурныП
Зелены Л
=
Синий
Красный +¦
=
Пури>рныП
разной интенсивности.
Если используется только один инструментальный Гуравнивающий)
помощи монохроматических потоков света
С'1шиЛ
Голубой
Белый =
концвет, то длина волны у него должна быть такой же, как у
Красным
Черный
L
Синий
контрольного.
ГолубоЯ +
ЗсленыПl4^^^^/ СнннП /КрасныйАЖелт
Желтый
Пурпурны»
Зелен ыП 4- СмнпП -J
Рис. 5.51. Аддитивная (а)
1
еубтрактивная (Ь) системы
и
Зеленый = Голубом + Жсл
смешения
гып
не
если
С
помощью
одного
монохроматического инструмен-
потока света можно уравнять лишь один
инструментального
Пурпурный+
Жсл гыл
=
=
=
Бе.чыП
Зеленый
Гол у боП
и светлоту при
трольньгм светом его цветовой фон, насыщенность
+
в
принимать
расчет
цветовой
тон
и
цвет.
Однако,
насыщенность
кон-
контрольного света, можно уравнять цвета по светлоте. Эта процедупроцедура называется фотометрией. Таким способом создаются монохромонохроматические репродукции цветных изображений.
Если в распоряжении наблюдателя есть два монохроматических
цветов.
источника, то он может уравнять большее количество контрольных
образцов,
жены на
являются
рис. 5.51
и
цветной вклейке 11. Цвета одной системы явля-
дополнительными
к
другой: голубой
—
к
красному, пурпурк синему. Дополнительный
зеленому, желтый
цвет
это разность белого и данного цвета:
голубой это белый минус
красный, пурпурный
белый минус зеленый, желтый
белый
пурпурный
—
к
—
—
—
—
минут синий. Хотя красный можно считать дополнительным к го-
голубому, по традиции красный, зеленый и синий считаются основосновными цветами, а голубой,
пурпурный, желтый
их дополнения—
дополнениями.
но
не
все.
ни
один из них не является линейной комбинацией других, т. е. что
Хороший выбор
это основные цвета.
вычитаются длины волны дополнительного
цвета.
Например, при отраже-
спект-
спектра и остается только красный цвет. После его
отражения или препреломления в
голубом объекте цвет становится черным, так как при
этом исключается весь видимый
По такому принципу работают
спектр (см. цветную вклейку 11).
Аддитивная цветовая система RGB удобна для светящихся по-
С
где С
—
цветов видимого спектра
падает
равно трем.
Пусть на некоторый фон па-
произвольный монохроматический контрольный свет. Наблю-
Наблюдатель пытается опытным
путем уравнять на
462
Гл. 5. Построение реалистических
изпораженмй
rR +gG + bB
контрольного света; R,
потоки
G, В
G, В
света; г,
—
g,
красный, зеленый и
b
—
относительные
со значениями в диапазоне от
О
Однако сложением трех основных цветов можно уравнять не все
контрольные
цвета.
Например, для получения сине-зеленого цвета
наблюдатель объединяет синий и зеленый потоки света, но их сумсумма
выглядит светлее,
темнее
чем
образец. Если же с целью сделать его
добавить красный, то результат будет светлее, потому что
световые
энергии
складываются.
Это
наводит
наблюдателя
на
добавить красный свет в образец, чтобы сделать его свет-
светлее. Такое предположение действительно
срабатывает, и уравнива-
к конзавершается. Математически добавление красного света
контрольному соответствует вычитанию его из двух других уравнива-
уравнивающих
(составления) практически всех
со
до 1.
количество
уравнения
=
количества потоков света R,
уравнивание
для
цвет
синий инструментальные
поверхностей, например экранов ЭЛТ или цветных ламп. Достаточно
провести очень простой опыт, чтобы убедиться, что минимальное
цветов
—
волн
—
мысль:
фотофильтры.
когда первый цвет лежит в
с меньшими длинами
(синий).
средними (зеленый) и третий
Объединение этих трех цветов для уравнивания монохроматическомонохроматического контрольного цвета математически выражается как
отражении или
пропускании света сквозь пурпурный объект
поглощается
зеленая часть спектра. Если
получившийся свет отражается или
преломляется в желтом объекте, то поглощается синяя часть
—
области спектра с большими длинами волн (красный), второй
нет, т. е. он
типографских красок,
пленок и несветяшихся
экранов применяется субтрактивная система
CMY. В субтрактивных системах из
спектра белого цвета вычита-
цвет»
можно получить почти все контрольные варианты» при условии,
что эти три цвета достаточно широко распределены по спектру и
Интересно, что в спектре радуги или призмы пурпурного цвета
порождается зрительной системой человека.
Для отражающих поверхностей,
например
Добавляя третий инструментальный
что
потоков света.
Конечно, физически это невозможно, потому
отрицательной интенсивности света не существует. Математи-
Математически это записывается как
фоне рядом с кон-
С + г/г = gG -г ЬВ
46Л
Цвег
или
С = ~rR + i>G + ЬВ
На рис. 5.52 показаны
функции Л» я* b
монохроматических потоков света
уравнения по цвету для мо-
с длинами
волн
С их помощью можно уравнять все длины волн
436, 546 и 700 нм.
видимого
спектра.
Обратите внимание, что при всех длинах волн, кроме окрестности
700 нм, одна из функций всегда отрицательна. Это
соответствует
«добавлению» инструментального света к
Изучением этих
контрольному. Изучени-
функций занимается колориметрия.
Наблюдатель также замечает,
что при удвоении интенсивности
контрольного света интенсивность каждого инструментального попотока света также
удваивается,
т. е.
2С
=
2rR
+
2gO
+
2b В. На-
Наконец, оказывается, что один и тот же контрольный свет уравнивауравнивается двумя разными
способами, причем значения г, g
быть неодинаковыми.
b
наборов г, g
и
это
что
и
b
могут
Инструментальные нвета для двух разных
называются метамерами друг
друга.
Камаро
1.
Шевроле
1983. Изображение построено
Д.Варном с помощью алгоритма
Уоткинса и модели освещения со
специальными эффектами; см.
разд. 5.7. (С разрешения General
Motors Research Laboratory.)
Технически
означает,
контрольный свет можно уравнять различными
составными источниками с неодинаковым
спектральным распредераспределением энергии. На
рис. 5.53 изображены два сильно отличающихотличающихся
спектральных распределения коэффициента отражения, которые
дают одинаковый
средне-серый цвет.
Результаты проведенных опытов обобшаются в законах Грассмана [5-44]:
Глаз реагирует
на
три различных стимула,
трехмерность природы
цвета.
В
что
подтверждает
качестве стимулов можно рас-
Бронзовые вазы. Верхброниз
нижняя
а
бронзового
цвета,
ваза
освещается
бронзы. Каждая
2.
Верхняя сделана из пластмассы
—
двумя источниками. ИзображеИзображение построено с помощью модели
освещения
Рис. 5.52. Функции уравноДлина волны X (им)
464
Гл. 5. Построение реалистических изображении
уравновешивания
по
цвету.
разд.
5.8.
Кука—Торрэнса;
см.
(С разрешения Р.Кука,
of Computer Graphics,
Program
Корнеллский университет.)
5. Шары над красно-желтой
шахматной доской изображены
при помощи алгоритма трасситрассировки лучей и глобальной модели
освещения, учитывающей отраотражение, тени и преломление в про3. Тени для случая
двух источисточников, построенные с помощью
алгоритма В -- йлера
Азертона;
—
см.
разд.
5:10.
(С
разрешения
П.Азертона, Program ol Computer
Graphics;
Корнеллский
униуниверситет.)
прозрачных объектах; см. разд. 5.12.
(С разрешения Т.Уиттеда, Bell
Laboratories, перепечатано с разразрешения Communications of the
ACM, v. 23, июнь 1980, Copyright
1980, Association for Computing
Machinery.)
1
6.
Вазы.
Непрозрачная и провазы
прозрачная
изображены при по-
.*
помощи
алгоритма
трассировки
лучей. В каждом случае правое
изображение учитывает ограниограниченность глубины резкости; см.
[5-32]. (С разрешения М.Потмйси*
ла, Image Processing Laboratory,
Rensselaer Polytechnic Institute.)
4. Фрактальные
поверхности,
*¦
*
*.*:
поверхверхнее изображён ё
состоит из
16 384
треугольников,
262144.
собственные тени
света
.рактальных
построены при помощи алгоритма
из
лучей и модели
освещения Уиттеда; см. разд. 5.12.
(С разрешения Аль Барра Raster
а
Обратите
7. Сферы и цилиндры с
отражением и преломлением по-
ижнее
—
внимание
от
на
источника
справа. (С разрешения Дж.
КаДЪйя, Cal Tech.)
трассировки
Technologies, Inc.)
Шахматные фигуры
изображены при помощи алгорит9.
алгоритма построчного сканирования
и
изо-
комбинирования отдельных
изображений шахматных фигур, их
отражении и доски. (С разрешеразрешения Т.Уиттеда, Bell Laboratories,
перепечатано с разрешения TOG,
v.1, январь 1982, Copyright 1982,
Association for Computing Machi-
Machinery.)
10.
изображение построено при помощи
модели освещения Уиттеда, нижнижнее
при помощи модели освеосвещения Холлам см. разд. 5.13. Об*
ратите внимание на сферы. (С
—
разрешения Р.А.Холла, Program of
Computer Graphics, Корнеллский
университет.)
Худож-
Рэй Смит на основе ма-
математических
8. Натюрморт. Верхнее изо-
пески.
Белые
Художник Элви
разработок П.Ход-
алгоритм, с по*
мощью которого из одного элеэлемента были выращены эти цветы.
Для изображения травы испоиспользовалась система частиц Бена
жаедж
создал
Ривза. Удаление скрытых граней
проводил Л.Карпентер, математиматематическое
обеспечение композиции
принадлежит Т.Портеру. (С разреразрешения Элви Рэя Смита, Lucasfilm
LTD, all rights reserved.)
*..
¦>»*•.
(a)
Аддитивная (сверху) и
субтрактивная (снизу) цветовые
системы. (С разрешения Polaroid
Corporation.)
11.
(Ь)
600
500
400
700
Длина волны К (нм)
Рис. 5.53. Метамеры.
сматривать, например, доминирующую длину волны
(цветовой
фон),
или
(насыщенность)
чистоту
и
яркость
(светлоту)
крас-
красный, зеленый и синий цвета.
rR -f
Четыре цвета всегда линейно зависимы, т. е. сС
+ gG + ЬВ, где с, г, g, Ь Ф 0. Следовательно, для смеси двух
=
(сСJ имеет место равенство (сС){ + {сС),
(rR^ + <rRJ + (gGI + (gGJ
фВI + фВJ. Если ивет'С,
(cC)j
цветов
=
ц
=
-
и цвет С
2
равен цвету С, то цвет С j равен цвету
С2 независимо от структуры спектров энергии С, С ltC2.
равен цвету С
Если в смеси трех цветов один непрерывно изменяется, а другие
остаются
непрерывно,
постоянными,
т. е.
то
цвет
смеси
будет
меняться
непре-
трехмерное цветовое пространство непрерывно.
Из опытов, подобных данному, известно, что зрительная систесистема
способна различать примерно 350 000 цветов. Если цвета разли-
различаются только по тонам, то в сине-желтой части спектра различразличными оказываются цвета,
(С)
12.
Диметрическая
(а
ортогональная (Ь) и изометричеизометрическая (с) проекции трех блоков, попостроенные Дж.О.Дженкинсом из
лаборатории прикладной физики
Университета Дж.Гопкинса с ис-
у которых доминирующие длины волн
1 нм, в то время как у краев спектра
отличаются на
Четко различимы примерно 128
только
насыщенность,
то
цветовых
зрительная
на
10 нм.
Если
меняется
способна
выделить
тонов.
система
—
Существует 16 степеней насыщенности
желтого и 23
красно-фиолетового цвета.
Трехмерная природа света позволяет отобразить значение кажкаждого из стимулов на оси ортогональной системы (рис. 5.54, а). При
уже
не так
много
цветов.
—
алгоритма Уоткинса, который был разработан как
использованием
часть
учебного проекта.
этом получается трехкомпонентное цветовое пространство.
цвет С
можно
Любой
представить как вектор с составляющими rR3 gG
и
ЬВ. Подробное описание трехмерного цветового пространства дано
в
работе Мейера [5-48]. Пересечение вектора С
465
Цвет
с
единичной
пло-
Единичная плоскость
R
а
X
Рис.
5.54. Трехмерное цветовое
пространство.
скостыо дает относительные веса его
компонент.
красной, зеленой и синей ком-
Они называются значениями или координатами
цветности-
Рис.
r +
g + b
S
b
=
Длина волны \ (нм)
X
=
функциональную
1
например b
=
—
г
—
—
связь с
третьим, напри-
g. Если функции уравнивания по цвету (рис. 5.52)
перенести в трехмерное пространство, то результат не будет целицеликом
лежать в
X
X+Y + Z
+ у
осложняет математические
задают
В 1931
г. в Англии состоялось заседание
Международной комискомиссии по освещению
(МКО) (Commission International de l'Eclairage),
на
котором обсуждались международные стандарты определения и
измерения цветов. В качестве стандарта был
цветовой график МКО 1931 г. и набор из
выбран двумерный
трех функций реакции
глаза, позволяющий
исключить отрицательные величины
и
стандартных функций реакции глаза (рис.
5.55) и приведены в таблице в
E-44). Гипотетические основные цвета МКО обозначаются^, У, Z.
На самом деле они не существуют, так как без
части
они
не
могут
соответствовать
реальному
отрицательной ча-
физическому свету.
Треугольник XYZ был выбран так, чтобы в него входил весь видивидимый спектр. Координаты цветности МКО таковы:
466
Гл. 5. Построение реа.шегичееки.ч
изображений
+ z
1.
—
XYZy требуемые для составления любого цвета. Однако они
яркость
не
(интенсивность) результирующего цвета. Яркость
в соответствуопределяется координатой У, а X и Z подбираются
соответствующем
масштабе. При таком соглашении (х, у, Y) определяют как
цветность,
и
так
яркость.
цветности в координаты
Обратное преобразование координат
u&eraXYZ
имеет вид
Y
Y
X
более
удобный для обработки. Основные цвета МКО получены из стан-
E.18)
X+Y + Z
количества трех основных цвепредставляют собой относительные
цветов
расчеты.
наблюдатель
=
X + Y + Z
коло-
При проекции треугольника XYZ на плоскость
х иу
ху получается цветовой график МКО. Координаты цветности
ил:
В проекции на плоскость
также будут присутствовать
отрицательные значения, а это осложположительном октанте.
7
У
—
5.55. Стандартный
колориметрический
МКО 1931 г.
=
Следовательно,/* +g +b
1.0. Проецируя единичную плоскость,
получаем цветовой график (рис. 5.54, Ь). Он явно отображает
функсвязь двух цветов и неявно
600
500
400
г =
700
=
гV
E.19)
Y=Y
У
Комиссия решила ориентировать треугольник XYZ
таким
образом,
чтобы равные количества гипотетических основных цветов XYZ
в
сумме давали белый.
Цветовой график МКО 1931
г. показан на
рис. 5.56. Контур, на-
напоминающий крыло, это геометрическое место точек всех видимых
длин волн, т. е. линия спектральных цветностей. Числа на контуре
соответствуют длине волны в данной точке.
467
Цвет
Красный находится в
.'ЮНЫЙ
.Зеленый
0.8
и
N
Ni
f
4
\
0.6
\
500
\-I
1000
oooo° /
i
10.000°
/A
7
/
•
Sv
/
д Линия
\
Швстностсй
А абсолют и i) черп ore>
0.2
/I
I
Рис.
5.56. ЦветовоП граграфик MKO с линией лветно-
<pi 1СНЫЙ
тсла^
i
Pi
НИИ\Ш0 ^f
1
Х"Г 1
0
1 I
0.2
стей
абсолютно
черного
тела
и
точками
цветиос-
тей
стандартных
источ-
источников
0.4
0.6
Е
0.8
1, В,
(белый
ивет
равных
энергий.)
x
нижнем правом углу, зеленый
вдоль которых
глаз
хуже
температура, а также на-
всего
различает
изменение
Опорный белый
это точка равных
энергий Е (х
0.333,
У
0.333), а стандартные источники МКО
Л @.448,
0.408),
Я@.349, 0.352), С@.310, 0.316), ?>65ОО(О.313, 0.329). Источник А ап—
=
=
—
аппроксимирует теплый цвет газонаполненной лампы
вольфрамовой нитью при 2856° К. Он намного
остальных.
С
—
Источник В
комитетом по
Рис. 5.57. Применение цве-
графика.
С4(Х
=
610 нм)
является
сине-зеленый
цвет
491 нм). При сложении в определенной пропорции цвета и
его дополнения получается белый. Для того чтобы найти домини-
С5(Х
=
доминирующую длину волны цвета, нужно продолжить прямую, проходяс линией
проходящую через опорный белый и данный цвет, до пересечения
цветностей. Например, на рис. 5.57 доминирующая
длина волны цвета С6 равна 570 нм, т. е. она желто-зеленая. Если
спектральных
прямая пересекает линию пурпурных цветностей, то у этого цвета
нет доминирующей длины волны в видимой части спектра. В этом
волны с индексом «с», т. е. прямая продолжается от цвета через
опорного белого цвета Национальным комите-
цвета во многих
график очень удобен. Чтобы
получить дополнительный цвет, нужно
продолжить прямую, пропроходящую через данный цвет и опорный
белый, до пересечения с
другой стороной кривой. Например, дополнительным
к красноГл. 5. Построение реалистических
цвету
«краснее» осталь-
телевизионным стандартам
телемониторах.
Как видно из рис. 5.57, цветовой
оранжевому
случае она определяется как дополнительная доминирующая длина
(NTSC). Источник D 65W)J соотсоответствующий излучению абсолютно черного тела
при 6504° К, ненесколько «зеленее». Он
применяется в качестве опорного белого цве-
468
I
накаливания с
соответствует солнечному свету в полдень, а
полуденному освещению при сплошной облачности. Источник
С принят в качестве
I
0
—
бесконечности. Пунктиром обозначена
цвета.
I
=
—
в левом нижвверху, а синий
углу графика. Отрезок, соединяющий концы
кривой, называетназывается линией
пурпурных цветностей. Кривая В1гутри
контура соотсоответствует цвету абсолютно черного тела
при нагревании от 1000° К
направления,
I
нм
С7 I 500
i
i
цветового
нижнем
до
для
С, Dbsoo {?>) и
опорный белый в обратном направлении. Например,
доминирующая длина волны цвета С7
Чистые
или
полностью
линии спектральных
«полностью
на
доминирую-
рис. 5.57 равна 500 нм.
(на 100%) насыщенные цвета лежат на
цветностей. Опорный белый считается
«пол-
разбавленным», т. е. его чистота равна 0%. Чтобы вычис-
чистоту промежуточных цветов, надо найти отношение расрасстояния от опорного белого до данного цвета к расстоянию от
вычислить
опорного белого до
линии
спектральных
или
пурпурных
цветно-
Например, чистота цвета С6 на рис. 5.57 равна а /(я +6), а
С 7 равна с /(с + d).
цветностей.
Координаты цветности МКО для смеси двух цветов определя-
нзоораженин
469
Цист
ются
по
цветов
Грассмана сложением основных
законам
цветов.
Смесь
Сt(x]ty ,, У,) hC2(v2j2, К2) является
=
С!2
0*
Пользуясь уравнениями E.18) и E.19) и введя обозначения
В-Blue (сини «)
G-Green (зелены il)
Y-Yellow (желтый)
'
Vi
У2
получаем координаты цветности смеси
Х]Т\ + Х2Т2
_
_
~
УП
Т\ + Т2
У|7*| + У2^2
О-Orange (оранжевыП)
Р -Purple (пурпурныи)
Pk Pink (роювый)
-
Ум
~
=
Г, +Т2
У\ + Yi
Этим способом можно сложить и большее количество цветов, если
последовательно
R- Red (красный)
Строчным буквам
соответствует суфсЬикс "-оват"
добавлять в смесь новые цвета. Рассмотрим при-
пример.
Пример 5.10. Смешение цветов
НаЛлем координаты цветности МКО для смеси цветов С
и
С3(О.2,О.О5,1О),
показанных на рнс. 5.57.
{@.1,0.3,10), С2@.35,0.2,10)
Рнс. 5.58. Цветовой график МКО 1931
г.
с
названиями
цветов.
Воспользуемся описанным выше методом
лля смеси С иГ_-
г,
К|
J?
Г1.
-
.
зз.зз
=
-
@ 1)C3.33) +@.35X50)
33.33
Т\
УгЪ
=
=
Таким образом. смесьС
-
суффикс
50
=
=
например
насыщенность или чистоту от почти
Q ^
yG
это
желтовя/?ю-зеленый
нулевой около источника (пастельный
цвет) до полной (сочной) у линии спектральных цветностей. Обра-
33.33 + 50
Кг =10+10
«-оват»,
(yellowzs/7 -green). Каждый цвет на своем участке меняет насыщен-
@.3X33.33)+ (().2Н50)
Г\ + Г2
i +
"
0.2
V2
+ л-2/2
х\2
"
0.3
vi
На рис. 5.58 изображен график цветности МКО с названиями
5.58
обычных воспринимаемых цветов [5-49]. В надписях на рис.
соответствует
маленьким буквам в сокращенных названиях цветов
Обратите
20
внимание,
что
оттенки
зеленого
занимают
верхнюю часть графика, а красные и синие собраны внизу у
и
С2 даст цвет С]2@.25,0.24,20). Огмегим, что кординаты
смеси нежат на
С
отрезке
?г Теперь добавим к смеси С |2 цвет С3:
всю
почти
верх-
линии пурна гра-
площади и
расстояния
пурпурных цветностей. Поэтому равные
тографике не соответствуют одинаковым различиям восприятия. Для
чтобы исправить этот недостаток, было предложено несколько
цвепреобразований этого графика. Полученные равноконтрастные
того
_
У\г
20
_
=
VI2
83.33
Л
=
U2-I- /з
=
—
Т\г
+
0.05
@.25X83.33) -f @.2X200)
цветовые
л
=
83.33 + 200
телевидение,
,„
0.106
кино,
многокрасочная
5-47].
[5-44
типографская
—
пе-
цветов видимо-
покрывают весь диапазон или охват
в аддивидимого спектра. Цветовой охват, который можно воспроизвести
это треугольник на графике МКО с вершинами
аддитивной системе,
печать и т. д. не
@.24X83.33) + @.05X200)
Тъ
пространства рассматриваются в работах
Цветное
-¦....
83ЛЗ + 200
\\2T\2 + \зЪ
урз
'
"
'*
0.24
—
RCB. Любой цвет внутри треугольника можно
На рис. 5.59 и в табл. 5.4 показан
получить из основных цветов.
цветовой охват для основных цветов RGB при обычном мониторе
в основных цветах
>'|23
=
Смесь С,,
С2 и С3
470
5.
Гл.
К|2 + Уз
—
это С
=
2О+ 10 = 30
ш@.125,0.106,30). Она лежит на отрезке С {? у
Построение реалистических изображении
на ЭЛТ и в
П
Цвет
стандарте NTSC. Для сравнения изображена
также суб-
Л
435.8 нм. С их помощью были получены уравнивающие функции на
Основные u «era МКС)
MSO
Стандарт
рис. 5.52.
Цветной монитор
Координаты цветности МКО или координаты цвета представля-
Цветная кинопленка
точный стандарт определения цвета. Однако в каждой отрасли
представляют
свой
промышленности, имеющей дело с цветом, существует
набор
Координаты МКО оказываются
цветовой информации из одной области
основных цветов или обозначений.
полезными
при
применения
в
передаче
другую.
Поэтому представляют интерес преобразова-
обратно. В
машинной графике чаше всего требуется преобразовывать коордив
координаты МКО XYZ в систему основных цветов RGB, применяемую
эти
телевизионных мониторах. Здесь будут рассмотрены только
преобразования, а более общие вопросы затрагиваются в работах
преобразования
0.2
координат МКО
[5-44
—
в
различные цветовые системы
и
5-46, 5-48].
Преобразование между двумя аддитивными цветовыми системасистемами проводится по законам Грассмана. Переход от цветового про0.2
О
0.4
0.6
0.8
Рис. 5.59. Цветовые
обпространства RGB к пространству МКО XYZ задается следующим
образом:
охваты.
х
система
CMY, приведенная к координатам
МКО, которая применяется в цветном кино. Обратите внимание,
трактивная
что ее
цветовая
охват не имеет
охват у цветного
треугольной формы и что он шире, чем ох-
монитора; т. е. некоторые цвета, полученные на ки-
кинопленке, нельзя воспроизвести на телеэкране.
показаны
основные
цветностей:
цвета
МКО XYZ,
красный—
700 нм,
Кроме того, показа-
лежащие на линии спектральных
зеленый—
543.1 нм,
синий
—
X
Xb'
Y
Yb
Zb
7
где
Xr, Yr, Zr
—
цвета для
количества основного цвета
Например,
Z
если
R
=
Ze
Zr
основных
цветов
МКО
п.т
/?; аналогично для Xg, Yg, Zg и Xh, Yb, Zb.
0, В
0, то X
1, G
Yr>
Xr, Y
=
=
=
основных цветов
-
RGB, то
Хг
=
Сг
Хг
основ-
RGB
Yr
Yr
Уг
\
В
Zr. Если известны координаты цветности МКО (л\_у) для ос-
=
¦Хг
цветности
E.20)
G
получения координаты единичного коли-
Хг
Таблица 5.4. Координаты
R
E.21)
Сг
Zr
У
Zr
Основные цвета
МКО XYZ
Стандарт NTSC
ЦветноП
монитор
па
ЭЛТ
Красный 0.735
Зеленый 0.274
0.265
Синий
0.167
0.009
Красный 0.670
Зеленый 0.210
0.330
0.710
Синий
0.140
0.080
Красный 0.628
Зеленый 0.268
0.346
Спили
472
0.150
Гл. 5. Построение реалистических
Zr
-
1
=
~
~
Xr
У
г
Cr
Zr
0.717
С
-
X. + Y.
Л
XrCr
Y
yrCr
0.588
0.070
2
473
изобрпкении
-
-
xr
Цист
=
xb, yh, zb. При Cg
Xg
xgt yg, zg
+ Zh уравнение E.20) принимает вид
и
и аналогично для
XgCg
y*Cs
yr)Cr
-
-
x8
yg)C8
+
Ys + Zg и
xbCb
R
У'ьСь
G
-
-
хь
уь)Сь
В
E-22)
Рассмотрим данный метод на примере.
или, более компактно,
[X'l
=
Преобразование основных цветов МКО в систему RGB
0,2
025,У
Требуется преобразовать цвет с координатами иве-.ности МКО*
10.0 для вывода на экран с координатами цветности RGB, эалани яркостью 1
ными в табл. 5.4. Монитор настроен на опорный белый иветС>5}00, поэтому компоПример 5.11.
СгУ Сь и Cg необходимы для того, чтобы полностью
величины
преобразования между системами основных цветов. Ес-
определить
Если
известна
цветов
Yr, Yg и Yb единичных количеств основных
яркость
RGB, то
=
компоненты его основных цветов таковы:
-
хг
Сг=^
СЬ
=
=
0.628
xg
=
0.268
=
0.150
=
0.588
=
0.070
=
=
»
Уь
0.346
уЕ
Составляющими опорного белого цвета будут
Если заданы координаты цвета для опорного
то искомые
где
[R']
=
белого {Xw,
результаты получаются при решении уравнения
[Сг Cg Сь]т
[X']
и
=
[Xw Yw ZW]T.
,
xw = 0.313
уw
„
Yw )
Вычислим сначала D:
D = Xriyg
[5-48]:
=
Cr
=
cs
=
=
(YJyw)[xw(yg
-
(YJyw)[xJyb
{Yjyw)\xw{yr
-
-
yh)
yr)
ys)
-
~
-
yw(xg
yw{xb
yw(xr
-
-
~
xh) + xgyb
хг)
~
~
xK) + Хгук
-
~
уь) + xs(Vb
0.628@.588
E.23)
DCr /(Yw/yw)
=
Xr{yg
-
уь) + xg(yb
-
yr) + хь{уг
У г) + хь{уг
xw{yg
=
0.313@.588
Xgyr]/D
-
-
уь)
-
Обратное преобразование
пространство RGB задается
ys)
=
0.346) -г 0.15@.346
-
0 588)
=
0.215
-
0.07)
-
хь) + xgyh
-
-
хьУе
0.329@.268
0.15) + 0.268@.07)
-
0.0539
=
E.24)
пространства МКО XYZ
Сг
в
=
(}'
1
0.0539
как
Аналогично получаем С
рассчитаем
[С ]
У8)
-
-
E.25)
где
y\{xg
0 15@.588)
0.0539
из цветового
-
0,07j -г 0.268@.07
=
и
D
-
~
Тогда
XbVgVD
хгуь + XbVrVD
К» = 1.0
0.329
=
vw
E.22),
Если же известны не
координаты цвета, а координаты цветности и яркость (хW
то
Yw, Z,v),
координаты цвета
1.114 яСь
=
X =
ci I
fO'g
-
С,'i
=
[(хь
-
Уь)
-
xg)
-
I = A
-
х
Y
10
У
0.2
.vi=0.25—
хьуя + vb-xg] /CrD
хьув + х8уь] /CrD
1.164. По координатам цветности рассчи-
УУ7:
[С \~х имеет следующие компоненты:
=
=
-у)-
=
(I
-
0.25
-
-
12.5
0.23
=
27 5
0.2
у
Преобразование, заланнос уравнением E.22), имеет вил:
С2\
2\
=
-
1Ь'Ь
Мхг
-
[хьуг
С31
=
Г(.Уг
C32
=
f(-r«
Уг)
хь)
-
-
УЬХг + УгХь]
g
хгуь + хьуЛ
/CgD
[К]
У8)
Xr)
-
-
=
1С"Ц\'|
—
II 133
2. 73«
-I .145
-0. 424
12 .5
G
-1. 119
2 .029
0. 033
10 .0
7.209
В
0. 138
-0 333
!. 105
27 .5
28 772
R
хгуь\ /CSD
-
~
-
—
VrXg + ygXr] /CbD
XgVr + KrXg] /CbD
Преобразование координат RGB в координаты цветности МКО вы=
474
[xrys
-
xgyr] /CbD
Гл. 5. Flocipooiujc рсйлистичсч'К'нх измбрижемнЛ
выполняется аналогично.
475
-
Пример 5.12. Преобразование основных цветов RGB в систему МКО
нимается.
Преобразуем пнет с координатами RGB B55,0.0), т. е. красный цвет максимальмаксимальной интенсивности на экране монитора, в
координаты цветного МКО. Основные
нвета телеэкрана и опорный белый цвет такие же, как в примере 5.11,
поэтому D,
значениям
из
предыдуикго примера. Применяя
С^ Cg, Сд раины соотвегсгиуюшнм
15.21), получаем
X
0.478
0.299
0.175
255
121.94
У
0 263
0.655
0.081
0
67.19
2
0.020
0.160
0.908
га
В системе Y1Q
с
представляется
красного,
информация о тоне и насыщенности цвелинейных
помощью
комбинаций
разностей
Y. Координата цве-
зеленого и синего цветов и значения
(синфазный сигнал) соответствует цветам от оранжевого до
от
голубого, т. е. «теплым» тонам, Q (интегрированный сигнал)
зеленого до пурпурного, т. е. всем остальным. Координата / занитолько 0.6 МГц.
занимает полосу частот примерно 1.5 МГц, a Q
Преобразование из RGB в YIQ имеет вид
цвета /
—
—
5.05
0
_
_
_
Координаты цветности равны
121.94
X
121.9Л
=
X+K-'-Z
121.94
-
67.19+• 5.05
0.628
194.18
Y
0.299
0.587
0.114
R
I
0.596
-0.274
-0.322
G
Q
0.211
-0.522
0.311
В
67.19
V
=
""
Y + У+ Z
0.346
а из
194.18
YIQ в RGB
Y= 67.19
Это координаты цветности основного красного цветя монитора (см. табл. 5.4).
Для
того
чтобы
использовать
сигнал
телевидении,
цветном
систему
должен
RGB
как
лежать
в
стандарт
полосе
системам
от 0
YIQ,
В 1953 г. Национальный комитет по телевизионным си-
(NTSC)
в
качестве
стандарта цветовую систему
основанную на модели* МКО XYZ. Из-за ограничений на шипринял
ширину полосы пропускания яркость
R
1
0.956
0.623
Y
G
1
-0.272
-0.648
I
В
1
-1.105
0.705
Q
в
до 6 МГц и быть совместимым со стандартным черно-белым телетелевидением.
—
Для того чтобы преобразовать в YIQ координаты XYZ МКО или
обратно, нужно объединить эти уравнения с уравнениями E.22) и
E.25).
Как и система МКО, цветовые пространства RGB и CMY трехтрехмерны и условно изображаются в виде куба (рис. 5.60).
Началом координат в цветовом кубе
определяется одной координатой
RGB служит черный цвет,
Y, Сигнал Y занимает основную часть полосы частот @—4 МГц),
причем в нем пропорции красного, зеленого и синего основных цвецветов
чувствительности глаза. В сигнале Y содержится информация о яряркости, поэтому в черно-белом телевидении используется только эта
координата.
В
качестве
раньше использовался
для
опорного
белого
цвета
в системе
Желтый
| Сннип
NTSC выбраны так, что он соответствует кривой спектральной
Зеленый
Пурпурный
Красный
Г ojivooii
NTSC
стандартный источник С МКО. Сейчас же
этой цели обычно применяется стандартный
источник
D65OO
МКО [5-50]. Различие между ними невелико.
Для того чтобы передавать цвет, т. е. тон и насыщенность, при
помощи более узкой полосы
частот,
особенности зрительного восприятия. В частности, чем меньше предпредмет,
тем
определенного
размера,
а
некоторого минимального предела, то его цвет
476
Желтый
объекты, меньшие опредекажутся черно-белыми. Если же объект меньше
хуже различаются его цвет,
Гл. Ч. Построение реалистических шображений
вообще не воспри-
Пурпурный
Зеленый
учитываются некоторые осо-
Рис. 5.60. Цветовые кубы: (a) RGB, (b) CMY.
477
Цвет
Снний
РйЗОСПЫ
¦ Светлота
¦
Чисти» цвет
Бс.чый
Зеленый
Цветовой тон
Пихтовые тона
Насыщенность
Гопубой
Оттенки
Серы i i
Черный
Рис. 5.61. Разбелы,
оттенки
и
тона
чистого
Рис. 5.62. Цветовой
ивета.
0
CMY
белый.
Ахроматические, т. е. серые цвета в обеих момоделях расположены по диагонали от черного до белого, а дополнидополнительные цвета лежат в противоположных
вершинах. Преобразоваа
в
Преобразование
—
между пространствами RGB
и
CMY выражается следующим
модели
от
0
топ
чтобы
того
[R G В]
=
[1 1 1]
-
[С М Y].
углом
_
цветового
Однако описывать субъективное восприятие цвета людьми в этих
системах неудобно.
Например, как в обозначениях МКО, RGB
на
конус HSV.
Интенсивность вдоль
его
оси
возрастает
верхней грани, где опа максимальна для
Насыщенпость определяется расстоянием
цветов.
образом:
5.62).
вершине до 1
в
всех
HSV (рис.
Чс-риый
шестш ршгаый
от
оси,
а
@°—360°), отсчитываемым от красного цвета. Для
на
рисунке
красный был
в
начале
отсчета, проекция
куба была повернута на 120° против часовой стрелки.
Насыщенность меняется от 0 на оси до 1
на
границе шестиугольни-
(см. рис. 5.58)? Художники характеризуют цвет с помощью таких
Отметим, что насыщенность зависит от цветового охвата, т. е.
1 цвета
от расстояния от оси до границы для каждого V. При 5
или их дополнения полностью насыщены. Ненулевая линейная ком-
понятий, как разбелы, оттенки, тона. Разбелы получают, добавляя
в чистый цвет белый, оттенки
добавляя обе эти
черный, тона
комбинация трех основных цветов не может быть полностью насыщенасыщена. Если 5
0, то тон Я неопределен, г. е. на центральной оси
или
=
CMY
задать
пастельный
красновато-оранжевый
—
цвет
—
краски. Это
удобно изобразить на треугольнике (рис. 5.61). Таким
образом представляется один цвет, а если собрать треугольники
для всех чистых цветов вокруг центральной черно-белой оси, то
можно построить трехмерную модель субъективного представлепредставления цвета. На этом основана цветовая система Оствальда
[5-51].
Смит [5-52] предложил построить модель субъективного воспривосприятия
в
виде
шестиугольника.
объемного
тела
HSV (цветовой тон, насыщенность,
=
находятся
ахроматические,
серьге
цвета.
Модель HSV соответствует тому, как составляют иве га художхудожники.
разбелам
Чистым
—
пигментам отвечают значения
цвета с увеличенным содержанием
5; оттенкам
—
цвета с уменьшенным
V =¦
1, S= 1; разбе-
белого, т. е. с меньшим
К, которые получаются при
добавлении черного. Тон изменяется при уменьшении
и
как
V,
так
S.
Преобразование цветового пространства HSV в RGB выполняет-
светлота). Если цветовой куб RGB (рис. 5.60, а) спроецировать на
плоскость вдоль черно-белой диагонали, получается шестиугольник
выполняется непосредственно с помощью геометрических соотношений между
с основными
цветовым шестигранным конусом и
и дополнительными цветами в
вершинах.
снижении насыщенности или чистоты основных цветов
возможный цветовой
охват
куба RGB
уменьшается,
При сниже-
размер и возмож-
поэтому соответст-
соответствующая шестиугольная проекция также будет меньше. Если проек-
куба RGB и его подкубов собрать вдоль главной диагонали,
представляющей количество света или светлоту цвета от черного
проекции
(=0) до белого (=1), то получится объемный шестигранный конус
478
Гт. 5. Построечке реалистических изображений
заимствован у Смита
кубом. Следуюпцш алгоритм
[5-52]:
Алгоритм преобразования HSV в RGB
Н
S
V
—
—
—
479
цветовой тон @—360°), 0°
насыщенность @—I)
светлота @—I)
Цвет
—
красный
RGB
красный, зеленый, синий;
—
Floor
функции
—
основные
выделяющая целую
цвета
часть
@—1)
V
числа
Мах
проверка ахроматического случая
if S = 0 then
if Н
=
Неопределенное гь then
R
=
V
G
=
V
В
=
V
—
—
функция определения минимума
определение светлоты
Min
—
V = Max (R, G, В)
определение насыщенности
Н
определено,
то
ошибка
Min (R, G, В)
=
Temp
if V
=
0 then
S
=
0
else
если
@—1)
функция определения максимума
светлота
else
end if
S
else
(V
=
-
Temp)/V
end if
хроматический случай
if H
360 then
н
о
определение цветового
0 then
if S
=
топа
=
=
H
else
Н
else
Cr
Н/60
=
=
Неопределенность
Temp)
R)/(V
(V
Temp)
G)/(V
(V
Cg
Temp)
Cb
B)/(V
(V
цвет между желтым и пурпурным
Cb
V then H
Cg
if R
цвет между голубым и желтым
end if
-
=
-
=
I
Floor (H)
=
F
H
=
M
-
I
V * A
=
N
=
V * A
К
=
V * A
(/?, С, В)
т.
S)
-
S * A
-
=
-
-
=
=
S * F)
-
-
=
-
-
F))
(K, Kt M)
if G
означает
R
=
V
G
=
К, В
=
=
-
V then H = 2 + Cr
-
Cb
цвет между пурпурным и голубым
Сг
V then Н = 4 + Cg
if В
М и
д.
-
=
if I = 1
if I
=
if I
=
if I
=
if 1
=
if I
=
then
(R, G, B)
2 then (R, G, B)
3 then
=
=
(R, G, B)
=
4 then (R, G, B)
=
5 then
=
(R, G, В)
6 then (R, G, B)
=
(V, К, М)
(N, V, M)
(M, V, K)
(M, N, V)
(К, М, V)
(V, M, N)
перевод в градусы
Н
if Н < 0 then Н
Джоблов и Гринберг [5-53] рассматривают другое представлене шестигранный
представление пространства HSV, в котором применяется
да1шому
пиже
алгоритму,
также
S
480
—
красный, зеленый, синий;
цветовой тон @-—360V, 0°
насыщенность
основные цвета
—
красный
@—1)
Гл. 5. Построение реалистических изображений
конус,
а
двойного шестигранного конуса является расширением одидля самоодиночного конуса HLS. Так как мочель HLS применяется
самосветящихся предметов, светлота здесь обозначает яркость, опредеRGB
определенную в начале этого раздела. В модели HLS цветовой куб
со
проецируется так, что получается двойной шестиграпный конус
в виде
@—I)
цилиндр.
Цветовая модель HLS (цветовой тон, светлота, насыщенность)
взятому у Смита:
—
—
Н + 360
finish
Алгоритм преобразования RGB в HSV
Н
=
end if
Преобразование из цветового пространства RGB в HSV прово-
RGB
60 * Н
приведение к положительным величинам
end if
finish
проводится по
=
481
Цист
else
Ошибка вследствие неверных данных
end if
else
расчет координат RGB
Зелены fl
call RGB (H + 120, Ml, M2; Value)
R
Цветовом
Го пубой
Value
=
call RGB (H, Ml, M2; Value)
Value
G
гон
S
=
Красный
call RGB (H
Value
В
-
120, Ml, M2; Value)
=
Синим
end if
Пурп>рньШ
finish
подпрограмма расчета
О I ЧерПЫМ
конус цветовой модели HLS.
subroutine RGB (H, Ml, M2; Value)
красный
цветовой тон @—360°) 0°
диапазона
приведение цветового тона и заданного
—
H
светлотой по оси от
0 (черный) в одной вершине до 1
—
(белый) во
if Н < 0 then Н = Н + 360
360
Н
if Н > 360 then Н
второй (рис. 5.63). Как и в модели HSV, насыщенность определяетопределяется радиальным расстоянием от
центральной оси.
при
5=1,
определение координат
МП- (М2
if Н < 60 then Value
[5-55]
if Н > 60 and Н < 180 then Value
if Н ^ 180 and Н < 240 then Value
=
при S = О Н нсопределено.
Алгоритм
перевода HLS
в
L
S
цветовой
—
тон
взят
из
работ [5-54]
и
(О—360°)
0°
(О—1)
насыщенность (О—1)
RGB
красный, зеленый, синий;
—
Н)/60
B40
if H > 240 and
красный
=
Ml
=
Ml
+
(М2
-
Ml) *
H ^ 360 then Value
—
основные цвета
L ^ 0.5 then
М2
L* A
=
Алгоритм преобразования RGB
+
(О—I)
S)
—
—
—
L
end if
—
S
Мах
насыщенность
—
2 * L
=
-
M2
проверка на нулевую насыщенность
if S
0 then
=
if H
=
R
=
L
G
=
L
В
=
L
HLS
красный, зеленый, синий; основные цвета @—1)
красный
цветовой тон @—360е), 0°
светлота @—1)
RGB
Н
Ml
в
Алгоритм преобразования RGB в HLS
else
Неопределенность
функция определения максимума
Min— функция определения минимума
определение светлоты
Ml
=
Max (R, G, В)
Min (R, G, В)
М2
L
(Ml + M2)/2
=
1"л. 5. Пос! роение реплнетических
изображений
@—1)
—
=
482
М2
return
—
if
Ml) * Н/60
-
*
светлота
—
-
=
RGB
Алгоритм преобразования HLS в RGB
Н
-
=
Полностью насы-
насыщенные основные цвета и их дополнения
расположены
а
координат RGB
Рис. 5.63. Двойной шестигранный
483
Цвет
определение насыщенности
ахроматический случаи
if Ml
М2 then
=
s
o
=
Н = Неопределенность
else
хроматический случай
if L ^ 0.5 then
S
(Ml
M2)/(MI + М2)
=
-
else
Рис. 5.64. Концептуальное
S
=
(Ml
-
M2)/B
-
Ml
M2)
end if
определение цветового тона
Ст
(Ml
R)/(M1
M2)
Cg
(Ml
G)/(M1
M2)
Cb
(Ml
B)/(M1
M2)
if R
Ml then H
Cb
Cg
if G
Ml then H
2 + Cr
Cb
=
-
=
МКО служили промежуточным
=
if В
H
60
Ml then H
*
=
Cr
только
H
как
Отсюда
if H < 0 then H
end if
=
МКО XYZ,
а
затем
получили некоторые цвета Манселла, которые раньше
-
-
цветам
основным
-
4 + Cg
координаты
стандартным цветовым проМанселла преобразуются к
переводятся в координаты
RGB для цветного монитора. Этим способом Мейер и Гринберг по-
-
=
сначала
пространством:
-
=
=
та
-
=
цветов
Мавселла.
-
=
системы
представление
-
=
пред-
-
экстраполяция существующих
видно
практическое
значение
были известны
образцов.
стандартного
цветового
особенно важно при
пространства МКО. В машинной графике оно
H + 360
finish
создании пли
моделировании красок для репродукций на основе су-
существующих
промышленных
красителей. Примером
может
слу-
выбор и изображение цветов на шевроле Камаро, см. вклейто не нужвклейку 1. Если цвет краски выбирается из цветов монитора
Это
нужно разрабатывать спецификацию для производства красителей.
в основные
делается преобразованием RGB координат монитора
служить
Цилиндрическое представление используется также в цветовой
[5-56], основанной на наборе образцов цвета.
системе Манселла
Система Манселла
стандарт восприятия. В этой системе
цвет определяется цветовым тоном, насыщенностью
(чистотой) и
светлотой (количеством света). На
центральной оси цилиндра нахо—
это
находятся значения интенсивности от черного на нижней
грани до
белого
на верхней. При увеличении
бело-
МКО. Изготовитель переводит их в свои характеристики, на-
цвета
и светлоту по Манселлу. Еснапример, цветовой тон, насыщенность
Если
же
нужно оценить окраску готовой машины,
то
спецификация
—
радиального расстояния от оси
возрастает насыщенность, или чистота, цвета.
Цветовой тон опре-
определяется углом, как показано на рис. 5.64. Главное
преимущество
системы Мансепла, благодаря которому она
широко применяется
в промышпенности, состоит в
что
одинаковые приращения
том,
насыщенности, тона и интенсивности вызывают ощущения одинаодинаковых изменений при восприятии. В
цилиндре есть незаполненные
места.
цвета
Существует преобразование субъективного
в системе
[5-57]). Мейер
и
Гринберг [5-58]
успешно
Манселла при выводе на цветной дисплей.
-184
Гл. 5.
представления
Манселла в основные цвета МКО (см., например,
пользовались
При
Построение реалистических изображений
цветами
красителя переводится в систему МКО, а затем
на экран.
в
RGB для вывода
Пространство МКО применяется также во многих других
задачах.
Если предполагается,
что зависимость между значениями, полуна элек-
предыдущих цветовых моделей и напряжением
является линейной, то
электронных пушках телевизионного монитора,
на экране необходимо
для получения качественного изображения
полученными из
произвести калибровку.
Интенсивность свечения
напряжению, поданному
этом основные цве-
на
экрана
электронную пушку:
/=
485
Цвет
монитора пропорциональна
на-
Для вывоза интенсивности Л напряжение должно быть
5.16. ЛИТЕРАТУРА
5-1 Cornsweel, T.N.. Visual Perception, Academic Pre>»s. New York. 1У70.
5-2
Кэтмул [5-59] описывает подробную процедуру расчета констанконстанты и 7- Из экспериментов известно, что 1
^ 7 ^ 4, а для цветного
монитора обычно лежит в пределах 2.3—2.8. Результаты калибровиспользуются как значения
калибровки
Такая
только
таблице
цветов.
процедура,
называемая
гамма-коррекцией,
интенсивность
экрана. Для
калибровки
также знать цветности
люминофоров
в
МКО красного,
цвета
калибрует
необходимо
зеленого и синего люмино-
Коуэн [5-60] рассматривает процедуру настройки
экрана.
цветного телемопитора с учетом как гамма-коррекции,
так и цвет-
цветности
люминофоров.
При закраске цветных изображений методом Гуро или Фонга
(см. разд. 5.5. и 5.6) могут получиться самые неожиданные резульрезультаты. Они зависят от цветовой модели,
которая используется при
интерполяция,
и модели вывода на
экран. Если одну из них можно
перевести в другую с помощью аффинного преобразования (прямая
переходит в прямую), то на экрапе будет правильное изображение,
а если такого
преобразования нет, то возможно появление наруше-
нарушений визуальной непрерывности. Как показано
выше, между цветоцветовыми моделями
преобразование,
нет.
а
МКО, RGB, CMY и YIQ есть аффинное преобра-
между
Нечто
этими
похожее
моделями
и
системами
HSV
или
HLS
—
происходит при наложении цветных прозрач-
прозрачных
поверхностей, например в алгоритме удаления невидимых поповерхностей.
Наконец, существует проблема цветовой гармонии, т. е. подбоподбора радующих глаз цветов. Этой теме посвящено множество работ,
знакомство с которыми лучше всего начать с книг
или
Джадда
и
Вышсцки [5-45]. Один
из
основных
Маркуса [5-61]
принципов
—
упорядоченный подбор цветов, например вдоль определенной тратраектории пли в одной плоскости цветовой модели. Лучше всего вы-
129, NT1S ADA 008 786. A condensed version is given in СЛСМ. Vol.
часто
заимствуются
из
природы, например последовапоследовательность оттенков зеленого. Также можно выбирать цвета одинаодинаковой насыщенности или тона, т. е. более или менее похожие.
5-3 Gouraud. H., "Computer Display of Curved Surfaces," doctoral thesis. University
of Utah. 1971. Also as Сотр. Sci. Dept. Rep. UTIIC-CSc-71-113 and NTIS AD
762 018. A condensed version is given in IEEE Trans. C-20. pp. 623-628, 1971.
5-4 Duff, Т.. -Smooth Shaded Renderings of Polyhedral Objects on Raster Displays,"
Computer Graphics. Vol. 13, pp. 270-275. 1979 {Proc. S1GGR \PH 79).
5-5 Warn. David R., "Lighting Controls for Synthetic Images." Computer Graphics,
Vol. 17, pp. 13-21. 1983 (Proc. SIGGRAPH 83).
5-6 Torrance. K.F., and Sparrow. E.M.. "Theory for Off-Specular Reflection from
Roughened Surfaces," Journal of the Optical Society of America. Vol. 57. pp. 1105
-1114, 1967.
5-7 Blinn, James F.. "Models of Light Reflection for Computer Synthesized Pictures."
Computer Graphics. Vol. 11. pp. 192-198, 1977 (Proc. SIGGR \PH 77).
5-8 Cook. Robert L., "A Reflection Model for Realistic Image Synthesis," master's
thesis, Cornell University, 1982.
5-9 Cook, Robert L.. and Тоггалсе. K.E., "A Reflectance Model for Computer GraphGraphics." ACM Trans, on Graphics, Vol. 1. pp. 7-24, 1982.
5-10 Bcckmann. P.. and Spizzichino, A.. Scattering of Electromagnetic Waves from
Rough Surfaces, MacMillan. New York. 1963. pp. 1-33. 70-У8.
5-11 Purdue University. Thennophysical Properties of Matter, Vol. 7: Thermal Radiative
Properties of Metals, Vol. 8: Thermal Radiative Properties of Nonmeiallic Solids,
Vol. 9: Thermal Radiative Properties of Coatings. Plenum. New York. 197U.
5-12 Newell, VI.E., Newell, R.G., and Sancha. T.L., "A Solution to the Hidden Surface
Problem." Proc. ACM Annual Conf., Boston. August 1972, pp. 443-450.
5-13 Kay. Douglas Scott, 'Transparency. Refraction and Ray Tracing for Computer
Synthesized Images," master's thesis. Cornell University. 1979.
5-14 Kay. Douglas Scott, and Grecnberg. Donald. "Transparency for Computer
Synthc- sized Images."' Computer Graphics. Vol. 13, pp. 158-164. 1979 (Proc.
SIGGRAPH 79).
5-15 Myers, Allen J.t "An Efficient Visible Surface Program," Rep. to NSF, Div. of
Math, and Сотр. Sci.. Computer Graphics Res. Group. Ohio State University.
July 1975.
5-16 Appel. Arthur, "Some Techniques for Shading Machine Rendering of Solids."
SJCC 1968, Thompson Books, Washington. D.C.. pp. 37-45.
5-17 Bouknight. Jack. "A Procedure for Generation of Three-dimensional Half-toned
Computer Graphics Presentations." CACM. Vol. 13. pp. 527-536. 1970.
5-18 Kelley, Karl C. "A Computer Graphics Program for the Generation of Halt-tone
Images with Shadows," master's thesis, University of Illinois. 1970.
S-19 Bouknight. Jack, and Kelley. Karl C, "An Algorithm for Producing Half-tone
Computer Graphics Presentations with Shadows and Movable Light Source;»."
SJCC 1970, AFIPS Press, Montvale, N.J. pp. 1-10.
5-20 Williams, lance,
Гл.
5.
Построение |>ги ииммчи-кнх
18, pp.
311-317. 1975.
выбирать цвета, дающие одинаковое различие ощущений. ГармоничГармоничные цвета
Bui-Tuong. Phong, "Illumination for Computer Generated Images." doctoral
thesis. University of Utah. 1973. Also as Сотр. Sci. Dcpt. Rep. UTEC-CSc-73-
487
.'Iiirepui>pa
"Casting Curved Shadows on
Curved Surfaces,"
Computer
for Generating
154-162, 1980
Graphics, Vol. 12. pp. 270-274. 1978 (Proc. SIGGRAPH 78).
5-21 Atherton. Peter R., "Polygon Shadow Generation with Application to Solar
Rights." master's thesis. Cornell University. 1978
5-22 Atherton. Peter R., VVeiler, Kevin, and Greenbcrg. Donald. "Polygon Shadow
Models
5-42 Marshall. R., Wifcon. 11.. and Carlson. Wivnc, "Procedural
Generation," Computer Graphics, Vol 12. pp. 275-281, 197K (Proc SIGGRAPH
78).
5-23 CatmuII, Edwin, "A Subdivision Algorithm for Computer Displav of Curved Sur-
Vol. 17. pp. 137-139. 1983 {Proc. SIGGR \PH Ю).
1967.
5-44 Wyszccki. G.. and Stiles, W.S.. Color Science, VVilcv. New York.
fnduslrv.
Wiley.
G., Color in Husiness* Science and
5-45 Judd. D.B.. and
Surfaces." doctoral thesis. University of Utah, 1974. Also as UTEC-CSc-74-133, NTLS
АП04968.
5-24 BHnn. James F., and Newell, Martin. E., "Texture and Reflection in Computer
Generated Images." CACM. Vol. 19, pp. 542-547. 1976.
5-25 Blinn. James F., "Simulation of Wrinkled Surfaces." Computer Graphics, Vol. 12.
pp. 286-292, 1978 (Proc. SIGGRAPH 78).
5-26 Carpenter. Loren C, "Computer Rendering of Fractal Curves and Surfaces." pp.
Proc. SIGGRAPH 80, August 1980.
1-8. suppl.
5-27 Fournier. Alain, and Fusscll. Don. "Stochastic Modeling in Computer
Graphics."
to
pp. 9-15, suppl. to Proc. SIGGRAPH 80, August 1980
5-28 Mandelbrot, В.. Fractals: Form, Chance, and Dimension, W. H. Freeman. San
Francisco, 1977.
5-29 Kajiya. James Т., '"New Technique for Ray Tracing Procedurally Defined Objects,"
Computer Graphics. Vol. 17. pp. 91-102, 1У83 (Proc. SIGGRAPH 83). Also in
ACM Tram: on Graphics. Vol. 2. pp. 161-181. 1983.
5-30 Whittcd, Turner, "An Improved Illumination Model for Shaded
Display.'* CACM,
Vol. 23. pp. 343-349. 1980.
5-31 Potmcsil. M., and Chakravarty,
I., "A I ens and Aperture Camera Model for
Synthetic Image Generation." Computer Graphics, Vol. 15. pp. 297-305, 1981
(Proc
SIGGRAPH Щ.
5-32 Potmesil, M.. and Chakravarty. I., "Synthetic Image Generation with a Lens and
Aperture Camera Model," ACM Trans, on Graphics. Vol. 1. pp. 85-108, 1982.
5-33 Barr, Alan H., private communication.
5-34 Hall, Roy A.. "A
Methodology for Realistic Image Synthesis," master'* thesis,
Cornell University. 1983.
5-35 Hall. Roy A., and Grccnberg, Donald. "A Testbcd for Realistic Image Synthesis,"
lEFh Computer Graphics and Applications, Vol
5-36 Moravec, Hans P.,
3. pp. 10-20. 1983.
D
Graphics and the Wave Theory." Computer Graphics. Vol.
15. pp. 289-296. 1981 (Proc. SfGGRAPH 81).
5-37 Korein, J., and Badler. V.R., "Temporal Anti-Aliasing in Computer Generated
Animation." Computer Graphics, Vol. 17. pp. 377-388, 1983 (Proc. SIGGRAPH
83).
5-38 Potmcsil, M.. and Chakravarty. I., '"Modeling Motion Blur in Computer-Generated
Images." Computer Graphics. Vol. 17, pp. 389-399. 1983 (Proc. SIGGR \PH 83).
5-39 Reeves, William Т.. "Particle Systems—A Technique for Modeling a Class of
Fuzzy Objects." Computer Graphics. Vol. 17. pp. 359-376, 1983 (Proe. SIGSIGGR \PH 83), and ACM Trans, on Graphics, Vol. 2, pp. 91-108. 1983.
5-40 Blinn. James F.. "Light Reflection Functions tor Simulation of Clouds and Dusty
Surfaces." Computer Gniphics. Vol. 16, pp. 21 29. 1982 (Proe. SIGGRAPH 82).
5-41 Dungan. W. "A Terrain and Cloud Computer Image Generation Model."
Computer Graphics, Vol. 13. pp 143-15U. 1979 (Proc. SIGGRAPH 79).
48H
Гл. 5. Построение pvu.iiici ических нзоораженни
Three-dimensional Terrain," Compute Graphics, Vol. 14, pp.
(Proc SIGGRAPH Si)).
r
5-43 Csuri. С A., "Panel; The Simulation of Natural Phenomena," Comput Graphics.
Wys/ecki.
New ^ork. 1975.
5-46 Hunt. R.W.G.. The Reproduction
>f Color. 3d eel., Wiley. New York, 1975.
New York, 1975.
5-47 Hunter. Richard S., The Measurement of \ppeurance. Wiley.
of Computer
5-48 Meyer, Gary W.. "Colorimetiy and Computer Graphics," Program
Graphics, Report Number ьЗ-1. Cornell University. April 1983.
Circular 478, 1950.
5-49 Judd. Dcanc В.. '"Colonmeuy." Nation.il Bureau of Standards
in Nimerof. L. "Colorimetiy." NBS monograph 104, 1968.
Updated
IEEE Trans.
5-50 Pruchard. D.H. "I'S Color Television Fundamentals—\ Review."
Comumer Electronics, Vol. CE-23. pp. 467-478. 1977.
London. 1931.
5-51 Ostwald. N.. Colour Science. Vols. I and II. Wimsor Л Winsor.
Vol.
5-52 Smith. Alvcy Ray. "Color Gamut Tiansformation Pairs." Computer Graphics.
m
12, pp. 12-19, 1978 [Proc. SIGGRAPH 78).
for Computer
5-53 Jobkne. George IL, .«id Greenbcrg. Donald. "Color Spaces
1978 (Proc. SIGGRAPH
Graphics." Computer Graphics. Vol 12, pp. 20-25.
78).
Vol.
5-54 "Status Report of the Graphics Standards Committee," Computer Graphics,
13. August 1979.
'
5-55 Raster
600 N.
Graphics Handbook. Conrac Division. Conrac Corporation.
Rimsdale Ave.. Covina. California 91722.
Baltimore,
5-56 Munsell. A.H., Л Color ,\V (utinn. 9th ed., Munsell Color Company.
2441
1941. The latest Book of Color is available Irom Munsell Color Compam.
North Calven Street. Baltimore. Maryland 21218.
J.P.. and Judd. D.B..
5-57 Kccgan. H.J.. Rhcinboldt. W.C.. Schlcier. J-C. Menard.
Munsell Renotations." Journal
"'Digit.il Reduction oJ Spcctrophotometric Data to
Vol. 48. p. 863. 1958.
oj the Optical Society of \merica.
Color Spaces for Computer
5-58 Meyer. Gary W., and Greenbcrg, Donald. "Perceptual
SIGGRAPH
Computer Graphics, Vol. 14. pp. 254-261, 1980 (Pro?.
Graphics."
80).
Vol.
5-59 CatmuII. Edwin. "Tutorial on Compensation Tables," Computer Graphics.
13. pp. 1-7, 1979 (Proc. SIGGRAI'HIV).
of a Colour Monitor
5-60 Cowan. William В.. "An Inexpensive Scheme for Calibration
Vol. 17, pp. 315in Terms of CTF Standard Coordinates", Computer Graphics.
321, 19S3 (Proc. SIGGR A PH 83).
5-61 Marcus. Aaron. "Color—A Tool for Computer Graphics Communication."
I9N2.
up. Vol. 13. pp. 1-9. August
Close-
1ИТПРАГУРА НА РУССКОМ ЯЗЫКЕ
[5-451
Джал Д., Внишсцкн Дж.
Цвет в
науке
и
технике
—
.
М.: Мир,
1978.
теры
—
в имени
строчные, если только использование прописных букв
не поможет
основной части книги. Однолитерные имена могут
так и прописными буквами. Для большей наглядности могут
согласовать записи в алгоритме и
быть как строчными,
использоваться литеры
Псевдокод
с
индексами,
например. Flag, P{, х, у.
А.4. Массивы
индексированной совокупности величин. Для имен массивов дейко всему массиву осудействуют те же соглашения, что и для переменных. Обращение
Массив
—
имя для
осуществляется
по его
имени,
а
скобках следует список индексов.
за которым в
элементам
к индивидуальным
—
по
имени
массива,
В качестве примера приведем
Win-
Window, Window(l, 3).
А.5.
Описываемый псевдокод предназначен для обеспечения понимания и
реализации
представленных в тексте алгоритмов. Он не задумывался как точный, сии гаксически
Оператор присваивания
Знак «равно» используется для присваивания переменной,
части
оператора, значения выражения
А.6.
Арифметические выражения
—
части.
правой
из
расположенной в левой
корректный и полный язык. Элементы псевдокода заимствованы из нескольких обобщеизвестных языков программирования: Бейсика, Фортрана, Паскаля и т. д. В псевпсевдоколе
содержатся структурные конструкции, например iMhen-else
и
while. Для
удобства в язык включен оператор безусловного перехода go to. Оператор никла
for-next взят из Бейсика. В язык входя г также подпрограммные модули.
Функции
Обычные арифметические операции: умножение,
обозначаются злаками •» /, « + », « —».
деление,
сложение
и
вычитание
и специальные подпрограммы,
например Min, Max, Push, Pop, определены в алгоалгоритмах индивидуально. Назначение таких процедур, как Draw и Plot, понятно из
А.7. Логические операции
и
операции отношения
названия.
Коротко приведем здесь общие соглашения, используемые при описании алгориталгоритмов. Все ключевые слова набраны строчными буквами
жирным шрифтом. Все инструкшш
в
теле
операторов
if-then-else, while или цикла foMiext выделены при
Комментарии набраны курсивом и располагаются с таким же oiстуттом, как и инструкции, к которым ошт относятся. Многолитерные имена
перепомощи отступа.
переменных
начинаются
Однолитерные
с
прописной
буквы,
остальные
имена могут быть представлены как
литеры
—
соглашения
АЛ.
описываются
подробно.
является
или
равно» обозначаются знаками
логическое значение «истина»
А.8.
курсивом.
или
=,
^, <, >.
«ложь».
Оператор finish
Оператор finish
используется для обозначения конца
А.9. Операторы while
Комментарии
Комментарии набраны
^, ^ соответпроверки
соответственно. Эти операции используются для проверки условий. Результатом
равно», «больше
строчные.
прописной, так и строчной бук-
буквой. Функции выделены жирным шрифтом и начинаются с прописной буквы. Далее
эта
Логические операции and и or, как это здесь показано, выделяются жирным шриф«больше», «меньше пли
шрифтом. Операции отношения «равно», «не равно», «меньше»,
Операторы и относящиеся к ним комментарии
и
работы алгориша.
end while
Операторы, расположенные внутри блока while
=
end while, цикчически выполня-
пока истинно некоторое условие.
Значение условия
проверяется
расположены с одинаковым отступом. В начале алгоритма помешаются коммента-
выполняются
комментарии, кратко описывающие назначение алгоритма и определяющие используемые пе-
в самом начале блока. Когда условие перестает быть истинным, выполнение пров бпопрограммы продолжается с оператора, следующего за end while. Все операторы
переменные.
ке
А.2. Константы
тех
пор,
располагаются
с
отступом.
Обшая форма оператора
while (условие)
[операторы, которые необходимо выполнить]
end while
Все константы считаются десятичными
иное.
до
Например, все числа 9, -3,
числами, если в комментариях не оговорено
6.732, 1 10"", -5.83 являются константами.
•
Пример
А.З. Переменные
Переменная
изменяться.
490
—
i =0
это имя, используемое для
хранения
Длинные имена переменных начинаются с прописной
Приложат
\
Псч» i«
while (i < 5)
значения, которое может изме-
x
=
x +
5
буквы, остальные ли-
491
Приложение
А.
Псевдокод
такова:
Оператор for-next
А. 12.
end while
Циклическое управление можно реализовать с помощью оператора for-next аналоаналогично оператору while. Циклическое выполнение операторов, расположенных внут-
finish
A. 10.
внутри тела цикла for-next, осуществляется до тех пор» пока значение переменной цикла
Оператор if-then
находится в заданных пределах. Все операторы внутри
Оператор if-then используется в зависимости от истинности некоторого условия для
располагаются
с
изменения последовательности вьтолнения программы либо для присваивания перепеременной другого значения.
Если аргументом then служи! номер оператора и условие истинно, то
>правле>правление перелается на оператор с данным номером. В
противном случае выполняется
следующий по
оператор. Номера операторов являются их метками.
Если аргументом then служит оператор присваивания и условие истинно, то
припорядку
присваивание выполняется.
В противном случае присваивание не выполняется, а управ-
управление передается сразу на следующий оператор. Общая
if
форма оператора
гакова:
форма оператора такова:
Общая
отступом.
блока for-next располагают-
знач) to (кон знач) step (шаг
[операторы, которые надо выполнить]
next (пер иккла)
for (пер
цикла)
=
Если отсутствует шаг
(нач
цикла)
цикла, то он полагается равным единице.
Допустимы отри-
отрицательные значения шага. В качестве начального, конечного значений
а
шага цикла
могут выступать переменные.
Пример
(условие) then (номер оператора)
for х
if (условие) then (оператор присваивания)
1
=
next
n
step a
у + х
=
у
to
х
Примеры
if (i < 10) then 3
if (i < 10) then x
А. 13.
=
x +
Оператор до to вызывает безусловный переход на оператор, задаваемый аргуменаргументом. Общая форма оператора гакова:
Операторы if-then-else и end if
A.11.
go to (номер оператора)
Оператор if-then-else используется для выбора в зависимости от истинности неконекоторого условия одного из двух блоков операторов. Для обозначения конца блока
оператора if-then-else используется оператор end if. В этом операторе не подразуподразумевается никакого повторения, выполняется лишь один in двух блоков. После этого
выполнение программы продолжается с оператора, идущего следом за end if. Все
операторы внутри блока if-then-else располагаются с отступом. Общая форма опе-
оператора
if (условие) then
выполняемые, если условие
[операторы,
end if
выполняемые,
если условие
истинно)
ложно]
+
отдельный программный модуль, который вызывается с поsubroutiпомощью оператора call. Начало подпрограммы определяется оператором
Подпрограмма
—
оператором return. После
выхода из подпрограммы управление передается на оператор из вызывающей про-
Выход
из
поцпрограммного модуля обозначается
программы,
следующей
входных
и
call
I
список
за
оператором
выходных
call. Оператор subroutine содержит
переменных.
имя
(входные переменные;
=
x
-
переменные)
переменные)
выходные
return
1
Списки входных и выходных переменных для операторов call и subroutine раз-
end if
Если оператор if-then-else записывается на одной строке, то
оператор end if опуопускается. Заметим, что когда опускается else и вторая
группа операторов, то у нас
блочный
получается
оператор.
разделяются
имени
точкой
с запятой
—
подпрограммы
и должны
(х.
у;
Flag)
if х < у then
493
Ч. Псевдокод
Приложение А. Псевдокод
Первая буква
строчные. Пример подпро-
соответствовать друг другу.
прописная, все остальные
«раммы:
subroutine Проверка
Прнпожекис
список
Связь между вызывающей прО1раммой
выходные
subroutine имя (входные переменные;
else
x
А. 14. Подпрограммные модули
подпрограммой осуществляется только через этп переменные, все другие переменпеременные в подпрограммном модуле являются локальными. Общая форма операторов
call, subroutine и return такова:
if (i > 0) then
x
оператора.
и
Пример
=
Номера операторов являются метками, они располагаются у самого левого края
subroutine.
[операторы,
else
x
Оператор go to
1
—
Flag
else
0
Flae
1
end If
return
A. 15.
Задачи
Функции
В алгоритмах, описанных в данной
книге, определены разнообразные функции. Имефункций выделяются жирным шрифтом и начинаются с
прописной буквы. В какачестве примера приведем
функцию
Имена
Мах (хь
,
которая возвращает большее из значений xt
и
х2.
Так
как изучение машинной
использования,
здесь
ряд задач.
приводится
графическое устройство,
сложности и
улучшения
устройство
с
графики немыслимо без ее практического использоваЕсли
в
вашем
распоряжении имеется растровое
то рекомендуется для уменьшения вычислительной слож-
наглядности
использовать растр
32 X 32.
размером
Если есть
большим разрешением, то в качестве единицы надо использовать групЕсли
подобрать группу пикселов,
векторный дисплей,
то сетка 32 х 32 изображается так, как это показано на рис. 4.43, с. Активация
пиксела обозначается помещенной на нем цифрой или штриховкой. Предлагаемые
группу
пикселов.
пиксел
не
квадратный,
то
следует
как можно более близкую к квадрату. Если в наличии имеется
задачи группируются
К
главе
по
главам.
2
2.1. Используя ЦДЛ (разд. 2.2) и алгоритм Бреэенхема (разд. 2.5), напишите пропрограмму для вычерчивания отрезков из
псевдорастре 32 х 32.
одной произвольной точки в другую на псев-
псевдобуфер кадра в виде одномерного массива
сначала для хранения изображения, а затем для вывода его из псевдобуфера на
экран. Демонстрационный текст должен состоять по крайней мере из 16 отрезков
Используйте
с началом в центре окружности и концами, равномерно расположенным по окружокружности.
Обеспечьте возможность
точку растра.
устанавливать
центр окружности в произвольную
Визуально сравните результаты. Напечатайте список активированных
@, 0) в (-8, -3) чля обоих алгоритмов. Как воздействует
пикселов для отрезка из
на результат
инициализация? Сравните вычислительную эффективность двух алго-
алгоритмов путем
хронометрирования разложения в растр 100 случайно выбранных от-
отрезков.
Окружность, разложенную в растр, можно получить с помощью алгоритма
Брезенхема для генерации окружности, описанного в разд. 2.6. Ее можно также сгесгенерировать путем разложения в растр ребер вписанного многоугольника с помощью
алгоритма Брезенхема для отрезка. Напишите программу, реализующую оба мето2.2.
метода, и разложите в растр окружность радиуса R
=
15
на
растре
результаты для вписанных многоугольников с 4, 8, 16, 32, 64 и
32 X 32. Сравните
128 сторонами для
алгоритма генерации окружности. Используйте псевдобуфер кадра в виде одномер-
496
Пршюзиемме В.
Задачи
изображения, а затем для вывода его из псевдо-
2.9, Используя конфигурации ячеек 2x2, показанные на рпс. 2.62, разработайте
псевдобуфера на дисплей. Предусмотрите вы чачу списка растровых точек, используя
формат «строка-колонка» для каждого алгоритма в предположении, что начало кокоординат @, 0) находится в левом нижнем углу. Результаты сравните визуально и
программу для вывода восьми полутонов «серого» слева направо в растре 32 х 32.
ного массива сначала для хранения
Повторите результат для растра размера 64 х 64 и 128 х 128 и сравните результарезультаты.
Добавьте к расгру 128 X 128 упорядоченное возмущение и сравните результаты.
К
главе
численно.
2.3. Пусть задан многоугольник с внешней частью, определяемой точками D,4),
D,26), B0,26), B8,18). B1,4), B1,8), A0,8) и A0,4) и внутренним отверстием, описыописываемым точками A0,12), A0,20), A7,20), B1.16) и B1,12) на растре 32 х 32. Напиши-
используюшую простой алгоритм с упорядоченным списком ребер,
который описан в разд. 2.18. для развертки и изображения сплошной области, лежа-
Напишите программу,
лежащей внутри многоугольника.
расположено
в
нижнем
левом
углу
формате «строка-колонка»
в
Предполагается, что начало координат @, 0) располорастра.
порядке
Выведите
список
заполненных
сканирования сверху
вниз
и
пикселов
слева
в
направо.
3.1. Реализуйте отсечение отрезков по двумерному прямоугольному окну с попомощью простого алгоритма из разд. 3.1, алгоритма Сазерленда
Коэна из
и
из
3.2
точкой
3.3.
разд.
алгоритма разбиения средней
Сравните эффективразд.
эффективность работы этих алгоритмов. Алгоритмы должны с первого захода определять
и изображать полностью видимые отрезки, а также определять и отвергать полнос—
полностью
разд. 2.19.
ребер,
эффективный
и
область внутри многов
сплошную
Преобразуйте
изобразите
растровую форму
многоугольника. Используйте список активных ребер. Для реализаций групповой сортисортировки по .v используйте связный список. Напечатайте содержимое списка активных
ребер для строки 18 в растре 32 х 32. Напечатайте в поря 1ке сканирования изобраописанный
изображаемые пикселы
и
содержимое связанного
в
отсечения отрезков
2.5. Напишите программы, реализующие алгоритмы заполнения по ребрам п с
перегородкой, описанные в разд. 2.20. для развертки сплошной области, располо-
невыпуклые отсекающие многогранники. Для частного случая прямоугольника сравсравните полученные результаты с результатами задача 3.1. Изменяйте число сторон
в отсекающем
изображения, и для
псевдобуфер кадра
последующего вывода после развертки каждого ребра. Сравните результаты. СравСравните вычисленную эффективность и эффективность ввода вывода двух алгоритмов.
виде
двумерного
массива
для
хранения
Можно ли с помощью этих алгоритмов правильно выполнить растровую развертку
всего
многоугольника,
включая внутреннее
отверстие?
числа
от
прямоугольнике и фиксируйте зависимость времени работы алгорит-
сторон. Какая получается зависимость?
3.3. Обобщите задачу 3.2 на случай произвольного трехмерного выпуклого полиполигонального отсекающего
расположенной внутри внешней границы многоугольника из задачи 2.3. Используйте псевдов
—
произвольного выпуклого полигонального окна. Этот алгоритм должен определять и отвергать
алгоритма
списка.
невидимые отрезки.
3.2. Напншнте программу, реализующую двумерную версто алгоритма отсечеБека как внутренней, так и внешней областью произвольноКируса
2.4. Для многоугольника из задачи 2.3 напишите программу, реализующую более
алгоритм с упорядоченным списком
3
множества
(см. разд. 3.11).
3.4. Напншите программу, реализующую алгоритм Сазерленда
отсечения многоугольников, который был описан в разд. 3.16.
—
Ходжмена для
Ограничьтесь случаем
Изображай-
произвольных многоугольников, отсекаемых прямоугольными окнами.
Изображайте
результирующий многоугольник после каждого этапа отсечения. В качестве теста
возьмите многоугольник с вершинами (-4,2),
D,6), @,2), отсекаемый окном @,10,0,10).
2.6. Напишите программу, реализующую алгоритм заполнения по ребрам и фла-
(8.14), (8,2), A2,6), A2,-2), D,-2),
3.5. Обобщите задачу 3.4 на случай произвольных выпуклых окон.
2.21, для растровой развертки сплошной области, располо-1
внешней границы многоугольника из задачи 2.3. Используйте
флагу, описанный в разд.
женной
внутри
псевдобуфер кадра в виде двумерного массива для хранения изображения и для по-
псевдобуфера кадра на дисплей. Изобразите содержимое буфера
после
определения контура и после завершения развертки. Сравните с резулькадра
последующего вывода
результатами задачи
2.5. Можно ли с помошыо данного алгоритма правильно преобразо-
форму весь многоугольник, включая и внутреннее отверстие/ Если
да. го модифицируйте, если это требуется, программу для обработки всею многомногоугольника. Если нет, то почему?
преобразовать в растровую
3.6.
разд.
2.24.
аппликаты
равны
±0.3.
многоугольников
Выполните
вершинами
Сазерленда
—
эту
задачу,
0.3, а экстремальные апплика-
используя
алгоритм
отсечения
Ходжмена. Воспользуйтесь также алгоритмом Кп-
Бека отсечения отрезков для вычисления витимостн концевых точек отрезруса
отрезков и точек пересечения отрезков с поверхностью. Не забудьте, что щпиндр имеет
—
Этот
цилиндр нужно задать
Изобразите цилиндр
32 сторонами.
многоугольник, используя подходящее видо-
вписанным
и отсеченный им
многогранником
с
преобразование. Распечатайте список вершин многоугольника после отсечения.
видовое
3.7.
Воспользуйтесь данными из упр.
3.6 и измените алгоритм
Сазерленда
—
Ходжмена так, чтобы отсечь многоугольник относительно внешней области цилин-
Изобразите цилиндр и отсеченный многоугольник, применив подходящее видовидовое преобразование. Распечатайте список вершин многоугольника после отсечения.
описанного
3.8. Видоизмените алгоритмы, созданные в задачах 3.6 и 3.7У для отсечения одно-
Сравните результаты.
одного шшинлра другим так,
497
4У6
заданного
цилиндра.
стека?
2.8. Выполните задачу 2.7 лая построчного алгоритма с затравкой,
в
многоугольника,
литщра, ось которого совпадает с осью z, радиус равен
—
глубина
плоского
отсечение
Р5(-0.4,0.4,0), /ДО. 1.0.1.0), Р3@.3.0.3,0). Р4@.2,0,0), Р5(О.З,-0.2,0). Рб@.1,-0.1,0),
Pi(- 0.4, -0.4,0), Р»(-0.2,0,0) и повернутого на 45° вокруг оси х относительно ии-
торцы.
2.7. Напишите программу, реализующую простой гранлчно-заполняюший алгоалгоритм с затравкой для заполнения внутренней части мно» оуголышка из задачи 2.3.
Обеспечьте выдачу списка граничных пикселов. Сгенерируйте и выдайте на печать
пиксел A4,20). Обеспечьте возможсписок заполненных пикселов, если затравка
возможность просмотра содержимого стека в любой момент. Какова максимальная глуби-
Произведите
Прило-кение В. Задачи
чтобы имелась возможность применить классические тео-
Приложение В, За <ачи
ретико-множсственные операции объединения и пересечения. Это упражнение нмеег
отношение
к
формы сплошных тел.
моделированию
Вейлсра
—
Азертона отсече-
нёвыпуклых многоугольников, который был описан в разд. ЗЛ7.
Распечатайте списки входных
и
пересечения. Распечатайте списки
выходных точек
В качестве теста возьмите обрабатывае-
вершин результата отсечения и отсекателя.
обрабатываемый многоугольник с внешней границей @,0), B0,0).
дырой G,-13), A3,-13),
B0,-20), @,-20) и внутренней
A3,-7), G,-7) и отсекающий многоугольник с внешней
границей (- 10,-10), (- 10.10), A0,10). A0,-10) и внутренней дырой (-5,-5), E,25),
E.5), B5,5). Обратите впимание на рис. 3.34, с. Изобразите исходные отсекающий
и
обрабатываемый многоугольники,
а
получившийся отсеченный
также
Решите задачи 4.4—4.11. используя в качестве контрольной основную сцену, описансостоит из
описанную в примере 4.19, и ее модификацию. Основная контрольная сцена
треугольника, который протыкает прямоугольник изнутри. Используется растр, состояшнй из 32.x 32 элементов. Если нужно, то можно использовать двумерный
буфера кадра. Координаты угловых точек прямоугольника татаковы:
Р,A0,5.10), Р2A0,25,10), Л125,25,!0), Р4B5,5,10), а вершин треуготышка:
PsA5,15,15), Р«C0,1О,5), Р7B5,25,5). В измененной сцене треугольник не протыкает
прямоугольник, а Р< заменяется на PjA5,15,5).
массив для имитации
много-
4.4. Напишите программу, реализующую основную версию алгоритма Варнока,
которая описана в разд. 4.4. Изобразите результат для обоих описанных выше кон-
многоугольник.
контрольных сиен.
К
контрольный пример.
оценку из задачи 4.2 как
3.9. Напишите программу,
реализующую алгоритм
отсечения относительно
4.3. Напишите программу, реализующую алгоритм Робертса. Испопьзуйте оцен-
главе
4
процессе
4.1. Напишите программу для ЭВМ, которая использует мегоа плавающего гогоризонта, описанный в разд. 4.2. Программа должна удалять невидимые линии для
поверхности,
обработки сцены.
алгоритма из задачи 4.4 путем создания более
сложного теста непересечения. Включите в алгоритм, кроме того, возможность рас4.5.
Повысьте
эффективность
распознавать единственный охватывающий, единственный внутренний и единственный
функцией:
описанной
Изобразите каждое окно или подокно, которое образуется в процес-
пересекающий многоугольники. Включите
F(.v,r)
=
Точка наблюдения расположена
оценка
повернута
R
8cos{\.2R)/(R + I)
на
описанной ниже. Сиена
VX2 + z2
бесконечности
в
25° вокруг оси
4.2. Используя метод
=
л\
а
затем
на
на
-2л
<
^
xyz
положительной
15° вокруг
2л
z\
полуоси
па-
блюд атель расположен в бесконечности на положительной полуоси г. ПреобразоваПреобразование диметрии,
за
матрицей 4x4,
исключением проецирования на плоскость z
описывающей это
=
0,
задается
в
[1-1J
преобразование в однородных координатах:
алгоритм средства устранения
0.13363
-0.35355
0
0
0.92541
0.35355
0
0.37796
-0.32732
0.86603
0
0
0
0
I J
,
Обратной для этой матрицы преобразования является ее транспозиция. Сцена состосостоит
из
4.6.
Напишите
программу,
реализующую
498
Приложение
параллелепипед
алгоритм
Вейлера
—
Чзертона
(см. разд. 4.5), используя в качестве контрольных примеров описанные выше сцепы.
4.7. Реализуйте алгоритм ^-буфера (см. разд. 4.7). В качестве контрольных припримеров используйте две описанные выше сиены. После обработки каждого многоограничить точность значений z
в
и
г-буфера. Чго получится,
если
буфере соответственно до 32, 16, 8, 4 бит?
4.8. Напишите программу, реализующую описанный в разд. 4.8 алгоритм Ньюэ-
Санча, использующий список приоритетов. Добавьте к вышеописценам
вышеописанным
ромб с вершинами PrA5,20,20), /^B0,25,20),
контрольным
РюB5,20,20), РцB0,15,20). Изображайте содержимое г-буфера после обработки кажла
—
каждого
куба и прямоугольного параллелепипеда, заданных координатами вершин:
куб
приоритету
эффекта ступенчатости (разд. 2.26). Для проверки и
многоугольника изобразите содержимое буфера кадра
0.92582
по
сравнения этих алгоритмов воспользуйтесь более сложными сценами.
оси у.
преобразования лпмгтрни;
посредством
алгоритм сортировку
глубины. Добавьте списковую структуру данных для реализации выигрыша от испоиспользования информации, полученной на более ранней стадии решения. Включите в
Робертса, удалите вручную невидимые линии из сцены,
изображается
в
Ньюэла
—
многоугольника.
4.9. Реализуйте описанный в разд. 4.10 алгоритм построчного сканирования,
ис-
использующий г-буфер. В качестве контрольных примеров возьмите те две сцены, кокоторые были описаны выше. Результат изображайте построчно, строка за строкой.
1
II
1
2
7
6
1
11
10
2
7
Предусмотрите возможность визуализации для каждой сканирующей строки списков
активных многоугольников и ребер.
6
4
11
10
3
7
4.10. Реализуйте интервальный алгоритм построчного сканирования (Уоткинса),
3
4
11
I
3
7
3
1
8
1
2
1
6
I
8
10
который описан в разд. 4.11. В качестве контрольных примеров используйте те две
сцены, которые были указаны выше. Результат изображайте построчно, строка за
строкой. Предусмотрите возможность визуализации для каждой сканирующей стростроки списка активных ребер и стека пересечений.
6
4
8
10
3
4
8
1
В Зятачи
1
4.11. Реализуйте описанный в разд. 4.13 алгоритм трассировки лучей для случая
непрозрачных поверхностей. Для проверки работы программы воспользуйтесь двудвумя описанными выше сценами. Считайте, что наблюдатель находится в бесконеч-
4ЧЧ
Приложение В. За чачи
Изображайте результат пиксел за пикселом, по
мере их формирования. Предусмотрите возможность визуализации при обработке
каждого пиксела списка активных объектов. Повысьте эффективность этого алго-
5.7. Напишите программу нанесения узора, показанную на рис. 5.34, на октант
ности на положительной полуоси z.
алгоритма путем вычисления прямоугольной оболочки всей сцены
проецирования ее
на картинную плоскость. Все пикселы, находящиеся за пределами области проекции,
можно не обрабатывать.
и
Сравните результаты работы алгоритма до и после этого
изменения.
К
5
Следующие задания обычно
выполняются
интенсивности или цветами.
на
растровом
дисплее
с
16
или
более
Чем больше уровней или цветов, тем лучше
Для того чтобы выполнить задания на векторном дисплее,
нужно перевести двоичное представление из /i-разрядного буфера кадра в десятичное
выглядят результаты.
число
и
алго-
Сравните
его
с
занести
его
в
соответствующее
место
описанную в разч.
радиуса R с осью, перпендикулярной направлению наблюдения. Напишите програм-
15, используя простую модель освещения,
изображающую цилиндр радиуса R
и
любой
подходящий
описываемую уравнением E.1),
алгоритм удаления невидимых
8, 16, 32. Взгляните на рис. 5.3. Единственный источник света
поверхностей для л
=
программу,
=
наблюдатель расположены в бесконечности на положительной полуоси г. Поверна 90° вокруг оси z и сравните результаты.
Поверните цилиндр
Закрасьте цилиндр из задачи 5.1 методом Гуро (разд. 5.5), используя прос-
простую модель освещения. Сравните результаты. Введите в модель освещения зеркаль-
зеркальное отражение (см. ур.
5.7). Измените параметр л.
5.3. Закрасьте цилиндр из задачи 5.1 методом Фонга (разд. 5.6). Сравните резульрезультат с изображениями из задачи 5.1 и 5.2.
Добавьте в модель зеркальное отражение
(см. уравнение E.7)). Сравните результаты, в частности форму зеркальных бликов,
с закраской Гуро.
5.4. Для сцены из четырехугольника и треугольника (задачи 4.4—4.11) напишите
изображающую прозрачный треугольник (см. разд. 5.9) н непрозрачный
Ньюэла
Санча (см. разд. 4.8) или с почетырехугольник методом Ньюэла
помощью интервального алгоритма построчного сканирования (см. разд. 4.11). Препрограмму,
—
—
Интенсивность
поверхностей
рассчитывается как линейная комбинация видимой прозрачной поверхности и непро-
Преломление
не
учитывается.
в
местах
наложения
непрозрачной грани, лежащей за ней. Каковы буду г результаты, если изменить коэффици-
прозрачности? Сделайте прямоугольник прозрачным, а треугольник непрозрачнепрозрачным и сравните изображения.
коэффициент
5.5. Внесите в интервальный алгоритм построчного сканирования из задачи 4.10
построение теней. Пусть и треугольник, и четырехугольник непрозрачны. НаблюдаНаблюдатель расположен в бесконечности на положи гельной полуоси z. Один точечный исисточник
находится
в
точке
х =
30,
у = 40.
Как построить
тень
от
прозрачного
треугольника?
5.6. Внесите построение теней в алгоритм выделения видимых непрозрачных поповерхностей трассировки лучей из задачи 4.11. Пусть треугольник и четырехугольник
непрозрачны, наблюдатель находится
z, а единственный источник
прозрачного
500
растре 64 х 64.
5.12
(рис. 5.42—5.44). Для проверки программы используйте
5.9. Напишите программу, рисующую на экране разноцветные квадраты разного
чтобы цвет текущего квадрата можно было приразмера. Измените программу так.
с помощью этой
прибавлять, вычитать и заменять на цвет предыдущего. Проверьте
например
5-15),
(см.
разд.
систему
цветовую
аддитивную
программы
пурпурный. Исследуйте эффект одновременного контраста, изокрасный + синий
=
изображая
квадратов.
5.2.
на
5.8. Постройте глобальную модель освещения с алгоритмом трассировки лучей,
растра.
5.1. Рассмотрим л-гранное полигональное представление непрозрачного цилиндра
и
результатом
простую сиену из примера 5.9.
главе
уровнями
сферы методом разбиения (см. разд. 5.11). С помощью наиболее подходящего
на растре 32 х 32. Сравниалгоритма удаления невидимых граней изобразите результат
треугольника?
Прниоксиис П.
—
в
в точке jc
бесконечности
=
30, у
=
на положительной полуоси
40. Как построить тень от про-
маленький
пурпурный
квадрат
внутри ярко-красного
и
ярко-синего
ква-
2.19. Более эффективные алгоритмы
с
>норидоченным списком
99
105
107
110
ребер
ребрам
ребер и флагом
2.22. Алгоритмы заполнения с затравкой
2.23. Простой алгоритм заполнения с затравкой
2.20. Алгоритм заполнения по
2.21. Алгоритм
ОГЛАВЛЕНИЕ
^о
списком
2.24. Построчный алгоритм заполнения
2.25. Основы
методов
устранения
111
114
затравкой
с
119
ступенчатости
123
Простой метод устранения лестничного «ффекта
2.27. Свертка и устранение ступенчатости
2.26.
127
131
2.28. Аппроксимация полутонами
139
2.29. Литература
Предисловие редакторов перевела
5
русскому изданию
7
Предисловие
к
Предисловие
ГЛАВА
3.1.
9
ГЛАВА 1. ВВЕДЕНИЕ В МАШИННУЮ ГРАФИКУ
3.2.
13
3.
142
ОТСЕЧЕНИЕ
143
отсечение
Двумерное
Алгоритм отсечения Сазерленда
разбиении отрезка
—
158
1.1.
1.2.
1.3.
1.4.
1.5.
Обзор машинной графики
Типы графических устройств
13
15
16
Графические дисплеи на запоминающей грубке
Векторные графические дисплеи с регенерацией изооражсния ..18
23
Растровые графические дисплеи с регенерацией изображения
3.4.
3.5.
Алгоритм Кируса
3.6.
Внутреннее
3.7.
Онредепенне факта выпуклости многоугольника
1.6.
Устройство "электронно-лучевой трубки
30
3.8.
Разбиение невыпуклых миого>голышков
1.7.
Устройство цветной растровой ЭЛТ
Системы с телевилюниьш растром
31
3.9.
Трехмерное отсечешь
33
3.10. Трехмерный алгоритм
1.8.
и
—
внешнее
его внутренних
раз153
Алгоритм разбиения средней точкой
Обобщение: отсечение двумерного отрезка
3.3.
на
Коэна, основанный
выпуклым
.166
окном
170
Бека
..181
огсечепие
и
вычисление
182
нормалей
..
187
188
192
разбиепия средней точкой
194
Бека
3.11. Трехмерный алгоритм Кируса
3.12. Отсечение в однородных координатах
—
1.9.
Диалоговые устройства
1.10. Резюме
1.11. Литература
36
46
46
ГЛАВА 2. РАСТРОВАЯ ГРАФИКА
3.13. Определение выпуклости трехмерного
198
гела
и
вычисление
внут-
201
внутренних нормалей к его граням
3.14. Разрезание невыпуклых тел
48
203
206
3.15. Отсечение
2.1.
2.2.
2.3.
2.4.
2.5.
Алгоритмы вычерчивания отрезков
Цифровой дифференциальный анализатор
Алгоритм Брезснхема
Целочисленный догори гм Брезенхема
Обшип алгори гм Брезенхема
2.6.
Алгоритм
2.7.
способ генерация изображения
Растровая развертка
Растровая развертка в реальном времени
Групповое кодирование
2.8.
2.9.
Брезенхема для
генерации
многоугольников
3.16. Последовательное отсечение многоугольника
48
50
54
59
окружности
—
—
зерленла
3.17. Невынуклые
алгоритм Са-
207
Ходжмапа
отсекающие
области
—
алгоритм
:
Азертона
60
3.18. Отсечение литер
63
3.19. Литература
Вейлера
220
227
228
73
ГЛАВА 4. УДАЛЕНИЕ НЕВИДИМЫХ ЛИНИИ И
73
ПОВЕРХНОСТЕЙ ..230
80
230
Введение
85
4.2.
Алгоритм
2.12. Адресация растра
2.13. Изображение отрезков
87
4.3.
Алгоритм Робергса
89
4.4.
Алгоритм
2.14.
91
4.5.
92
4.6.
Азертона
поверхностен
криволинейных
Алгоритм разбиения
Алгоритм, использующий г-буфер
Алгоритмы, использующие список приоритетов
2.11. Буферы
83
кодирование
кадра
Изображение титср
2.15. Растровая развергка
2.16. Заполнение
2.17. Растровая
сплошных областей
развертка
2.18. Простой anropirrvt
с
94
многоугольников
упорядоченным
4.7.
4.8.
93
многоугольников
списком
ребер
плавающего горизон га
О« лавлешм
233
250
290
Варнока
Атгоритм Вейлера
97
503
Оглавление
—
,
4.1.
2.10. Клеточное
502
—
—
315
320
321
329
4.9.
Алгоритмы построчного сканирования
4.10. Алгоритм построчного сканирования, использующий
338
339
z-буфер
4.11. Интервальный алгоритм построчного сканирования
4.12. Алгоритмы иострочного сканирования для криволинейных
345
поверхностен
4.13. Алгоритм определения видимых поверхностей путем трастрассировки лучен
4.14. Резюме
4.15. Литература
355
360
373
374
ГЛАВА 5. ПОСТРОЕНИЕ РЕАЛИСТИЧЕСКИХ ИЗОБРАЖЕНИЙ ....377
377
5.1.
5.2.
Введение
5.3.
Определение нормали
5.4.
•
Простая
модель
Определение
5.5.
380
освещения
вектора
к
386
поверхности
388
отражения
Гуро
Закраска
5.6. Закраска Фонга
5.7. Простая модель освещения со специальными эффектами
5.8. Более полная модель освещения
методом
391
394
399
401
5.9. Прозрачность
5.10. Тени
410
5.11. Фактура
427
5.12. Глобальная модель освещения
416
с
nvqeft
трассировкой
5.13. Более полная глобальная модель освещения с
437
трассировкой
454
457
458
487
лучей
5.14. Направления современных исследований
5.15. Цвет
5.16. Литература
1
Приложение А. Псевдокод
Приложение В. Задачи
490
495
Учебное издание
Дэвнл Роджерс
АЛГОРИТМИЧЕСКИЕ ОСНОВЫ МАШИННОЙ ГРАФИКИ
Заведующий редакцией чл.-корр АН СССР В. И. Арнольд
Зам. зав. редакцией А.С. Попов
Ст. H&V4H. редактор И. А. Маховая. Мл. научи, редактор Л. А. Королева
Художник В. А. Медников. Художественный редактор В. И. Шаповалов
Технические редакторы Н. И. Борисова, Т.Л. Чистякова
Корректоры Т. Е. Луганова, М. Г. Орлова
ИБ N° 6679
Подписано к печати 27.10.89. Формат 60x90'/i6. Бумага офсетная № 1. Гарнитура тайме.
Печать обсегная. Объем 16,00. Усл. псч. л. 32,00 в т.ч. 0,50 п.л. вкл. Усл. кр.-отт. 65,00.
Уч.-изд:
л.
33,33. Изд. № 1/6187. Тираж 20000 экз. Зак.1378.
Цена 2 р. 80 к.
ИЗДАТЕЛЬСТВО «МИР»
В/О «Совзкспорткнига» Государственного комигета СССР по печати.
129820. ГСП, Москва И-ПО. 1-й Рижский пер., 2.
Набрано в Мсжизда гелъеком фотонаборном центре
издательства
Можайский полиграФкомбтшт В/О «Совэкспорткнига»
Государственного комитета СССР по печати.
143200, Можайск, ул. Мира. 93.
«Мир»
Download