
- •1. Цвет в компьютерной графике 13
- •2. Геометрические преобразования 20
- •3. Представление геометрической информации 37
- •4. Удаление невидимых поверхностей и линий 45
- •5. Проекции пространственных сцен 55
- •5.4. Вопросы и упражнения 67
- •10.6 Вопросы и упражнения 108
- •12.4 Вопросы и упражнения 118
- •Введение Предмет и область применения компьютерной графики
- •1. Отображение информации
- •2. Проектирование
- •3. Моделирование
- •4. Графический пользовательский интерфейс
- •Краткая история
- •Технические средства поддержки компьютерной графики
- •Вопросы и упражнения
- •1. Цвет в компьютерной графике
- •1.1. О природе света и цвета
- •1.2. Цветовой график мко
- •1.3. Цветовые модели rgb и cmy
- •1.4. Другие цветовые модели
- •1.5. Вопросы и упражнения
- •2. Геометрические преобразования
- •2.1. Системы координат и векторы на плоскости и в трёхмерном пространстве
- •2.2. Уравнения прямой и плоскости
- •2.3. Аналитическое представление кривых и поверхностей
- •2.4. Пересечение луча с плоскостью и сферой
- •2.5. Интерполяция функций одной и двух переменных
- •2.6. Матрицы
- •2.7. Геометрические преобразования (перенос, масштабирование, вращение)
- •2.8. Переход в другую систему координат
- •2.9. Задача вращения относительно произвольной оси
- •2.10. Вопросы и упражнения
- •3. Представление геометрической информации
- •3.1. Геометрические примитивы
- •Полигональные модели
- •Воксельные модели
- •Поверхности свободных форм (функциональные модели)
- •3.2. Системы координат: мировая, объектная, наблюдателя и экранная
- •3.3. Однородные координаты
- •3.4. Вопросы и упражнения
- •4. Удаление невидимых поверхностей и линий
- •4.1. Алгоритм Робертса
- •4.2. Метод z-буфера
- •4.3. Методы приоритетов (художника, плавающего горизонта)
- •4.4. Алгоритмы построчного сканирования для криволинейных поверхностей
- •4.5. Метод двоичного разбиения пространства
- •4.6. Метод трассировки лучей
- •4.7. Вопросы и упражнения
- •5. Проекции пространственных сцен
- •5.1. Основные типы проекций
- •Параллельные проекции
- •Центральные проекции
- •5.2. Математический аппарат
- •Ортогональные проекции
- •Косоугольные проекции
- •Центральные проекции
- •5.3. Специальные картографические проекции. Экзотические проекции земной сферы
- •Стереографическая проекция
- •Гномоническая проекция
- •Ортографическая проекция
- •Проекции на цилиндр
- •Проекция Меркатора
- •Проекции на многогранник
- •Необычные проекции
- •5.4. Вопросы и упражнения
- •6. Растровое преобразование графических примитивов
- •6.1. Алгоритм Брезенхема растровой дискретизации отрезка
- •6.2. Алгоритмы Брезенхема растровой дискретизации окружности и эллипса
- •6.3. Алгоритмы заполнения областей
- •6.4. Вопросы и упражнения
- •7. Закрашивание. Рендеринг полигональных моделей
- •7.1. Простая модель освещения
- •7.2. Закраска граней Плоское закрашивание
- •Закраска методом Гуро
- •Закраска методом Фонга
- •7.3. Более сложные модели освещения
- •7.4. Устранение ступенчатости (антиэлайзинг)
- •7.5. Вопросы и упражнения
- •8. Визуализация пространственных реалистических сцен
- •8.1. Трехмерный графический конвейер
- •8.2. Свето-теневой анализ
- •8.3. Глобальная модель освещения с трассировкой лучей
- •8.4. Текстуры
- •8.5. Вопросы и упражнения
- •9. Введение в вычислительную геометрию
- •9.1 Вычислительная сложность алгоритмов
- •9.2 Основные геометрические объекты
- •9.3 Вопросы и упражнения
- •10. Триангуляция Делоне и диаграмма Вороного
- •10.1 Введение
- •10.2 Разбиение Делоне
- •10.3 Разбиение Вороного
- •Многогранник Вороного
- •Теорема о разбиении Вороного
- •10.4 Дуальность разбиений Вороного и Делоне
- •10.5 Алгоритм построения тетраэдризации Делоне
- •Триангуляция Делоне
- •Ячейки Вороного
- •10.6 Вопросы и упражнения
- •11. Алгоритмы построения выпуклой оболочки и триангуляции
- •11.1. Алгоритм построения выпуклой оболочки с использованием метода сортировки
- •11.2 Алгоритм построения триангуляции
- •12. Алгоритмы геометрического поиска
- •12.1 Поиск в плоском случае
- •12.2 Поиск на множестве тетраэдров
- •12.3 Поиск на множестве произвольных несамопересекающихся многогранников е3
- •12.4 Вопросы и упражнения
- •Список литературы
4.1. Алгоритм Робертса
Этот алгоритм, предложенный в 1963 г., является первой разработкой такого рода и предназначен для удаления невидимых линий при штриховом изображении объектов, составленных из выпуклых многогранников. На нём мы остановимся подробнее.
Выпуклый многогранник однозначно
определяется набором плоскостей,
образующих его грани, поэтому исходными
данными для алгоритма являются
многогранники, заданные списком своих
граней. Грани задаются в виде плоскостей,
заданных в канонической форме (см. гл.
2) в объектной системе координат:
.
Рис. 4.2. Внешние нормали тетраэдра
Таким образом, каждая плоскость
определяется четырехмерным вектором
,
а каждая точка
,
заданная в однородных координатах,
также представляет собой четырехмерный
вектор:
.
Принадлежность точки плоскости можно
установить с помощью скалярного
произведения, т. е. если
,
то точка принадлежит плоскости, а если
же нет, то знак произведения показывает,
по какую сторону от плоскости эта точка
находится. В алгоритме Робертса плоскости
строятся таким образом, что внутренние
точки многогранника лежат в положительной
полуплоскости. Это означает, что вектор
является внешней нормалью к
многограннику (рис. 4.2). Из векторов
плоскостей строится прямоугольная
матрица порядка
,
которая называется обобщенной
матрицей описания многогранника:
.
Умножая столбцы матрицы на вектор
,
получим n-мерный
вектор,
и если все его компоненты неотрицательны,
то точка принадлежит многограннику.
Это условие будем записывать в виде
(имеется в виду умножение вектор-строки
на матрицу).
В алгоритме рассматриваются только отрезки, являющиеся пересечением граней многогранника.
Из обобщенной матрицы можно получить
информацию о том, какие грани многогранника
пересекаются в вершинах. Действительно,
если вершина
принадлежит граням
,
то она удовлетворяет уравнениям:
.
Эту систему можно записать в матричном виде:
,
где
.
где
— матрица, составленная из вектор-столбцов
.
Значит, координаты вершины определяются
соотношением
,
т. е. они составляют последнюю строку обратной матрицы. А это означает, что если для каких-либо трех плоскостей обратная матрица существует, то плоскости имеют общую вершину.
Алгоритм прежде всего удаляет из каждого многогранника те ребра или грани, которые экранируются самим телом. Робертс использовал для этого простой тест: если одна или обе смежные грани обращены своей внешней поверхностью к наблюдателю, то ребро является видимым. Тест этот выполняется вычислением скалярного произведения координат наблюдателя на вектор внешней нормали грани: если результат отрицательный, то грань видима.
Затем каждое из видимых ребер каждого многогранника сравнивается с каждым из оставшихся многогранников для определения того, какая его часть или части, если таковые есть, экранируются этими телами. Для этого в каждую точку ребра проводится отрезок луча, выходящего из точки расположения наблюдателя. Если отрезок не пересекает ни одного из многогранников, то точка видима. Для решения этой задачи используются параметрические уравнения прямой, содержащей ребро, и луча.
Если заданы концы отрезка
и
,
а наблюдатель расположен в точке
,
то отрезок задается уравнением:
,
а прямая, идущая в точку, соответствующую параметру t, — уравнением
.
Для определения той части отрезка,
которая закрывается каким-либо телом,
достаточно найти значения
и
,
при которых произведение вектора
на обобщенную матрицу положительно.
Для каждой плоскости
записывается неравенство
.
Эти условия должны выполняться для всех плоскостей.
Полагая
,
получаем систему уравнений, решения
которой дают нам точки «смены видимости»
отрезка. Результат можно получить путем
совместного решения всевозможных пар
уравнений из этой системы. Число
всевозможных решений при N
плоскостях равно
.
Так как объем вычислений растет с увеличением числа многоугольников, то желательно сокращать их число по мере возможности, т. е. если мы аппроксимируем некоторую поверхность многогранником, то в качестве граней можно использовать не треугольники, а более сложные многоугольники. При этом, разумеется, встает проблема, как построить такой многоугольник, чтобы он мало отклонялся от плоской фигуры.