Опубликован: 20.10.2007 | Уровень: специалист | Доступ: платный
Лекция 6:

Удаление невидимых поверхностей и линий

< Лекция 5 || Лекция 6: 12345 || Лекция 7 >
Аннотация: Исторический экскурс. Методы переборного типа. Метод Z-буфера. Методы удаления нелицевых граней многогранника. Алгоритмы Варнака и Вейлера — Азертона. Методы приоритетов (художника, плавающего горизонта). Метод двоичного разбиения пространства. Алгоритмы построчного сканирования для криволинейных поверхностей. Алгоритм определения видимых поверхностей путем трассировки лучей

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

Необходимость удаления невидимых линий, ребер, поверхностей или объемов проиллюстрирована на рис. 6.1. Рисунок наглядно демонстрирует, что изображение без удаления невидимых линий воспринимается неоднозначно.

Неоднозначность восприятия изображения куба

Рис. 6.1. Неоднозначность восприятия изображения куба

Сложность задачи удаления невидимых линий и поверхностей привела к появлению большого числа различных способов ее решения. Многие из них ориентированы на специализированные приложения. Единого (общего) решения этой задачи, годного для различных случаев, естественно, не существует: для каждого случая выбирается наиболее подходящий метод. Например, для моделирования процессов в реальном времени требуются быстрые алгоритмы, в то время как для формирования сложного реалистического изображения, в котором представлены тени, прозрачность и фактура, учитывающие эффекты отражения и преломления цвета в мельчайших оттенках, фактор времени выполнения уже не так существенен. Подобные алгоритмы работают медленно, и зачастую на вычисления требуется несколько минут или даже часов. Существует тесная взаимосвязь между скоростью работы алгоритма и детальностью его результата. Ни один из алгоритмов не может достигнуть хороших оценок для этих двух показателей одновременно. По мере создания все более быстрых алгоритмов можно строить все более детальные изображения. Реальные задачи, однако, всегда будут требовать учета еще большего количества деталей.

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

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

Мы приведем некоторые из алгоритмов, работающих как в объектном пространстве, так и в пространстве изображения, каждый из которых иллюстрирует одну или несколько основополагающих идей теории алгоритмов удаления невидимых линий и поверхностей.

Удаление нелицевых граней многогранника

Алгоритм Робертса

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

Выпуклый многогранник однозначно определяется набором плоскостей, образующих его грани, поэтому исходными данными для алгоритма являются многогранники, заданные списком своих граней. Грани задаются в виде плоскостей, заданных в канонической форме (см. "Геометрические преобразования" ) в объектной системе координат: ax+by+cz+d=0.

Внешние нормали тетраэдра

Рис. 6.2. Внешние нормали тетраэдра

Таким образом, каждая плоскость определяется четырехмерным вектором \overline{P}, а каждая точка \overrightarrow{r}, заданная в однородных координатах, также представляет собой четырехмерный вектор:

\overrightarrow{P}=
\begin{pmatrix}
a \\ b \\ c \\ d
\end{pmatrix},
\overrightarrow{r}=
\begin{pmatrix}
x \\ y \\ z \\ 1
\end{pmatrix}.

Принадлежность точки плоскости можно установить с помощью скалярного произведения, т.е. если (\overrightarrow{P}\cdot\overrightarrow{r})=0, то точка принадлежит плоскости, если же нет, то знак произведения показывает, по какую сторону от плоскости эта точка находится. В алгоритме Робертса плоскости строятся таким образом, что внутренние точки многогранника лежат в положительной полуплоскости. Это означает, что вектор (A,B,C) является внешней нормалью к многограннику (рис. 6.2). Из векторов плоскостей строится прямоугольная матрица порядка 4\times n, которая называется обобщенной матрицей описания многогранника:

M=
\begin{pmatrix}
a_1 & a_2 & a_3 & \ldots & a_n \\
b_1 & b_2 & b_3 & \ldots & b_n \\
c_1 & c_2 & c_3 & \ldots & c_n \\
d_1 & d_2 & d_3 & \ldots & d_n
\end{pmatrix}.

Умножая столбцы матрицы на вектор \overrightarrow{r}, получим n -мерный вектор, и если все его компоненты неотрицательны, то точка принадлежит многограннику. Это условие будем записывать в виде (\overrightarrow{r}\cdot M)\ge 0 (имеется в виду умножение вектор-строки на матрицу).

В своем алгоритме Робертс рассматривает только отрезки, являющиеся пересечением граней многогранника.

Из обобщенной матрицы можно получить информацию о том, какие грани многогранника пересекаются в вершинах. Действительно, если вершина \overrightarrow{v}=(x,y,z,1) принадлежит граням \overrightarrow{P}_1, \; \overrightarrow{P}_2, \; \overrightarrow{P}_3, то она удовлетворяет уравнениям

\left.
\begin{aligned}
(\overrightarrow{v}\cdot\overrightarrow{P}_1)=0 \\
(\overrightarrow{v}\cdot\overrightarrow{P}_2)=0 \\
(\overrightarrow{v}\cdot\overrightarrow{P}_3)=0 \\
(\overrightarrow{v}\cdot\overrightarrow{e}_4)=1
\end{aligned}
\right\}
, \quad \text{где} \quad \overrightarrow{e}_4=
\begin{pmatrix}
0 \\ 0 \\ 0 \\ 1
\end{pmatrix}
Эту систему можно записать в матричном виде:
\overrightarrow{v}\cdot Q = \overrightarrow{e}_4,
где Q - матрица, составленная из вектор-столбцов \overrightarrow{P}_1, \overrightarrow{P}_2, \overrightarrow{P}_3, \overrightarrow{e}_4. Значит, координаты вершины определяются соотношением
\overrightarrow{v}=\overrightarrow{e}_4\cdot Q^{(-1)},
т.е. они составляют последнюю строку обратной матрицы. А это означает, что если для каких-либо трех плоскостей обратная матрица существует, то плоскости имеют общую вершину.

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

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

Если заданы концы отрезка \overrightarrow{r} и \overrightarrow{s}, а наблюдатель расположен в точке \overrightarrow{u}, то отрезок задается уравнением

\overrightarrow{v}=\overrightarrow{r}+t\cdot(\overrightarrow{s}-\overrightarrow{r})\equiv\overrightarrow{r}+t\cdot\overrightarrow{d}, \quad 0 \le t \le 1,
а прямая, идущая в точку, соответствующую параметру t, - уравнением
\overrightarrow{w}=\overrightarrow{v}+\tau\cdot\overrightarrow{g}=\overrightarrow{r}+t\cdot\overrightarrow{d}+\tau\cdot\overrightarrow{g}.

Для определения той части отрезка, которая закрывается каким-либо телом, достаточно найти значения t и \tau, при которых произведение вектора \overrightarrow{w} на обобщенную матрицу положительно. Для каждой плоскости \overrightarrow{P}_i записывается неравенство

q_i=(\overrightarrow{v}\cdot\overrightarrow{P}_i)+t(\overrightarrow{d}\cdot\overrightarrow{P}_i)+\tau(\overrightarrow{g}\cdot\overrightarrow{P}_i)>0.
Эти условия должны выполняться для всех плоскостей.

Полагая q_i=0, получаем систему уравнений, решения которой дают нам точки "смены видимости" отрезка. Результат можно получить путем совместного решения всевозможных пар уравнений из этой системы. Число всевозможных решений при N плоскостях равно N\cdot(N-1)/2.

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

< Лекция 5 || Лекция 6: 12345 || Лекция 7 >
Сабина Бахриддинова
Сабина Бахриддинова
Дмитрий Трефилов
Дмитрий Трефилов

Александра Дельцова
Александра Дельцова
МГУ им. М.В. Ломоносова
Юлия Мелихова
Юлия Мелихова
Россия, Москва