Трехмерное аффинное преобразование

реклама
1
Тема 7. Удаление невидимых граней. Метод Робертса
В настоящее время наиболее распространены устройства отображения информации на плоскости — экран, бумага и т.д. Для создания объемного изображения используют проекции. Проекции задают способ отображения объектов на
графическом устройстве. При отображении пространственных объектов на экране
необходимо знать координаты объектов. Мы будем рассматривать две системы
координат. Первая – мировые координаты, которые описывают истинное положение объектов в пространстве с заданной точностью. Вторая — система координат устройства отображения, в которой осуществляется вывод объектов в заданной плоскости.
Пусть мировые координаты будут трехмерными декартовыми координатами. Для получения изображения в плоскости необходимо рассчитать координаты
проекции — экранные координаты.
Пусть мировые координаты соответствуют следующим обозначениям: Z –
вертикальная ось; X- горизонтальная в право от наблюдателя; Y горизонтальная
на наблюдателя. Таким образом две мировые оси Z и Х совпадают с экранными.
Для отображения точки по этим осям достаточно сделать операцию сдвига в
плоскости. Для учета координаты Y необходимо сделать операцию поворота на
угол ¾ π.
Ниже представлена программа преобразования мировых координат X,Y,Z в
экранные x, y. Программа использует умножение соответствующих матриц на
листе Excel. (Cм. Тему 6).
Public Sub XYZ(wx, vy, uz, qX, qY)
'отображение точки с координатами x,y,z на экране
'wx, vy, uz - входные трехмерные координаты
'qX, qY - выходные экранные координаты
Алгоритм Робертса
2
'1 шаг отметка по оси Y
'определение угла между осями
al = 3 * 3.14 / 4
Call поворот(al, 0, 0, vy, 0, qX, qY)
' по оси X
Call сдвиг(100 + wx, 0, qX, qY, qX, qY)
'осьZ
Call сдвиг(0, 100 - uz, qX, qY, qX, qY)
End Sub
Аналогичным образом построена программа рисования координатных осей.
Для рисования двух осей достаточно операции сдвига для третьей необходима
операция поворота.
Public Sub оси()
'создание координатных осей (100*100*100)
xa = 100
ya = 100
al = 3 * 3.14 / 4
' ось X
Call сдвиг(100, 0, xa, ya, xb, yb)
'осьZ
Call сдвиг(0, -99, xa, ya, xc, yc)
'осьY
Call поворот(al, xa, ya, xb, yb, xd, yd)
' рисование осей
Call отрезокЦДА(xa, ya, xb, yb)
Call отрезокЦДА(xa, ya, xc, yc)
Call отрезокЦДА(xa, ya, xd, yd)
End Sub
Алгоритм Робертса
3
АЛГОРИТМ РОБЕРТСА
Алгоритм Робертса представляет собой первое известное решение задачи об
удалении невидимых линий. Это математически элегантный метод, работающий в
объектном пространстве. Алгоритм прежде всего удаляет из каждого тела те ребра
или грани, которые экранируются самим телом. Затем каждое из видимых ребер
каждого тела сравнивается с каждым из оставшихся тел для определения того, какая его часть или части, если таковые есть, экранируются этими телами. Поэтому
вычислительная трудоемкость алгоритма Робертса растет теоретически как квадрат числа объектов. Это в сочетании с ростом интереса к растровым дисплеям, работающим в пространстве изображения, привело к снижению интереса к алгоритму
Робертса. Однако математические методы, используемые в этом алгоритме, просты, мощны и точны. Наконец, более поздние реализации алгоритма, использующие предварительную приоритетную сортировку вдоль оси z и простые габаритные или минимаксные тесты, демонстрируют почти линейную зависимость от
числа объектов.
В алгоритме Робертса требуется, чтобы все изображаемые тела или объекты
были выпуклыми. Невыпуклые тела должны быть разбиты на выпуклые части. В
этом алгоритме выпуклое многогранное тело с плоскими гранями должно представляться набором пересекающихся плоскостей. Уравнение произвольной плоскости в трехмерном пространстве имеет вид
ах + by + cz+d = О
(4.1)
В матричной форме этот результат выглядит так:
Алгоритм Робертса
4
или где [Р]т = [a b e d] представляет собой плоскость. Поэтому любое выпуклое твердое тело можно выразить матрицей тела, состоящей из коэффициентов уравнений плоскостей, т. е.
где каждый столбец содержит коэффициенты одной плоскости.
Напомним, что любая точка пространства представима в однородных координатах вектором
[S] = [х у z 1]
Бо л е е то го, е сл и то ч ка [ S] л е жи т на п л о ск о сти , т о п р ои з ве д е ни е [S] • [Р]т = О. Если же [S] не лежит на плоскости, то знак этого скалярного
произведения показывает, по какую сторону от плоскости расположена точка. В
алгоритме Робертса предполагается, что точки, лежащие внутри тела, дают положительное скалярное произведение. Чтобы проиллюстрировать эти идеи, рассмотрим следующий пример.
Эту матрицу тела следует проверить с помощью одной из тех точек, о которых известно, что они лежат внутри тела, чтобы убедиться, что знаки каждого
Алгоритм Робертса
5
уравнения плоскости выбраны верно. Если знак скалярного произведения для какой-нибудь плоскости меньше нуля, то соответствующее уравнение плоскости
следует умножить на - 1. Точка внутри куба с координатами х = 1/4, у = 1/4, z =
1/4 представляется в однородных координатах в виде вектора
[S] = [1/4 1/4 1/4 1] = [1
1
1 4]. Скалярное произведение этого век-
тора на матрицу объема равно:
Здесь результаты для первого, третьего и пятого уравнений плоскостей
(столбцов) отрицательны, и, следовательно, они составлены некорректно. Умножая эти уравнения (столбцы) на —1, получаем корректную матрицу тела для
данного куба:
Алгоритм Робертса
6
В приведенном примере корректность уравнений плоскостей была проверена экспериментально. Разумеется, это не всегда возможно. Существует несколько полезных методов для более общего случая. Хотя уравнение плоскости
(4.1) содержит четыре неизвестных коэффициента, его можно нормировать так,
чтобы d = 1. Следовательно, трех неколлинеарных точек достаточно для определения этих коэффициентов. Подстановка координат трех неколлинеарных точек (х1, у1, z1,), (х2, у2, z2), (x3, y3, z3) в нормированное уравнение (4.1) да-
ет:
В матричной форме это выглядит так:
Решение этого уравнения дает значения коэффициентов уравнения плоскости: [C] = [X]-1 [D].
Перед началом работы алгоритма удаления невидимых линий или поверхностей для получения желаемого вида сцены часто применяется трехмерное видовое преобразование. Матрицы тел для объектов преобразованной сцены можно получить или преобразованием исходных матриц тел или вычислением новых матриц тел, используя преобразованные вершины или точки.
Если [В] — матрица однородных координат, представляющая исходные вершины тела, а [ Т] — матрица размером 4x4 видового преобразования, то преобразованные вершины таковы:
[ВТ] = [В][Т]
(4.6)
Алгоритм Робертса
7
где [ВТ] — преобразованная матрица вершин. Использование уравнения (4.2)
позволяет получить уравнения исходных плоскостей, ограничивающих тело:
[B][V] = [D]
(4.7)
где [ V] — матрица тела, a [D] в правой части — нулевая матрица. Аналогично
уравнения преобразованных плоскостей задаются следующим образом:
[BT][VT] = [D]
(4.8)
где [ VT] — преобразованная матрица тела. Приравнивая левые части уравнения (4.7) и (4.8), получаем
[BT][VT] = [B][V]
Подставляя уравнение (4.6), сокращая на [В] и умножая слева на
[T]-1, имеем
[VT] = [T]-1[V]
Итак, преобразованная матрица тела получается умножением исходной матрицы тела слева на обратную матрицу видового преобразования. Следующий пример служит этому иллюстрацией.
Пример 4.5. Преобразование тела
Рассмотрим перенос единичного куба с центром в начале координат на три
единицы в положительном направлении оси х. Соответствующая матрица
преобразования размером 4x4 имеет вид
1
0
[T ]  
0

3
0
1
0
0
0
0
0

1
0
0
1
0
а обратная к ней матрица, которая может быть получена формально или
подбором, такова:
1
0
[T ]  
0

 3
0
1
0
0
0
0
1
0
0
0
0

1
Умножение слева матрицы тела данною единичного куба, полученной в
Алгоритм Робертса
8
примере 4.2, на [T]-1 дает матрицу тела для перенесенного куба:
Перенос единичного куба с центром в начале координат на три единицы
вправо помешает левую грань на отметку х = 2,5. а правую грань — на отметку
3,5. Первый столбец в преобразованной матрице тела содержит коэффициенты
уравнения плоскости правой грани:
-2x + 7 = 0 или х = 3.5
что и требовалось. Аналогично второй столбец дает
2x -5 = 0 или х = 2.5
что и ожидалось для левой грани.
Напомним, что в примере 4.2 точка
[S] = |1/4
1/4
1/4
1/4] = [1
1
1
4]
лежала внутри непреобразованного тела. Следовательно,
[S] • [ К] > 0. Однако точка [S] лежит вне перенесенного тела.
Проверка скалярного произведения [S] и преобразованной матрицы тела
дает один отрицательный элемент во втором столбце, который соответствует левой грани куба.
Алгоритм Робертса
9
Это показывает, что данная точка лежит вне тела. Фактически она расположена слева от левой грани куба, т. е. с внешней стороны относительно левой
грани, что и показал отрицательный знак.
Если преобразование матрицы точки [S] получается умножением на матрицу пре образования, то
[ST]=[S][T]=[1 1 1 4] [T]= [13 1 1 4]=[3.25 0.25 0.25 1]
Проверка скалярного произведения преобразованной точки с х = 3,25 на
преобразованную матрицу тела дает
Этот результат показывает, что преобразованная точка лежит внутри преобразованного тела.
Тот факт, что плоскости имеют бесконечную протяженность и что скалярное произведение точки на матрицу тела отрицательно, если точка лежит вне
этого тела, позволяет предложить метод, в котором матрица тела используется
для определения граней, которые экранируются самим этим телом. В примере
4.5 показано, что отрицательное скалярное произведение дает только такая
плоскость (столбец) в матрице тела, относительно которой точка лежит снаружи. В примере 4.5 таковой объявляется левая плоскость (второй столбец) в преобразованной матрице тела [VT] и непреобразованная точка [S]. Эти рассуждения проиллюстрированы на рис. 4.15.
Если зритель находится в бесконечности на положительной полуоси z и
смотрит на начало координат, то его взгляд направлен в сторону отрицательной
полуоси z- В однородных координатах вектор такого направления равен :
[Е] = [О 0 - 1 0]
который служит, кроме того, образом точки, лежащей в бесконечности на
отрицательной полуоси z. Фактически [Е] представляет любую точку, лежащую
Алгоритм Робертса
10
на плоскости z =-  т. е. любую точку типа (х, у,-  ). Поэтому, если скалярное произведение [Е]
на столбец, соответствующий какой-нибудь плоскости в матрице тела, отрицательно, то [Е] лежит по отрицательную сторону этой плоскости. Следовательно,
эти плоскости невидимы из любой точки наблюдения, лежащей в плоскости z
—  , а пробная точка на z=-  экранируется самим телом, как показано на рис.
4.16. Такие плоскости называются нелицевыми, а соответствующие им грани —
задними. Следовательно,
[E][V]<0
является условием того, что плоскости — нелицевые, а их грани — задние.
Заметим, что для аксонометрических проекций
Алгоритм Робертса
11
(точка наблюдения в бесконечности) это эквивалентно поиску положительных значений в третьей строке матрицы тела.
Этот метод является простейшим алгоритмом удаления невидимых поверхностей для тел, представляющих собой одиночные выпуклые многогранники. Он
также используется для удаления нелицевых или задних граней из сцены перед
применением одного из алгоритмов удаления невидимых линий, которые обсуждаются в данной главе ниже. Этот способ часто называют отбрасыванием задних
плоскостей. Для выпуклых многогранников число граней при этом сокращается
примерно наполовину. Метод эквивалентен вычислению нормали к поверхности
для каждого отдельного многоугольника. Отрицательность нормали к поверхности показывает, что нормаль направлена в сторону от наблюдателя и, следовательно, данный многоугольник не виден. Этот метод можно использовать также и
для простой закраски. Интенсивность или цветовой оттенок многоугольника делается пропорциональным проекции нормали к поверхности на направление взгляда.
Следующий пример иллюстрирует данный подход.
Пример 4.6. Нелицевая плоскость
Алгоритм Робертса
12
Вновь рассмотрим единичный куб с центром в начале координат, как показано на рис. 4.16. Точка наблюдения находится на положительной полуоси г, ее
координаты равны [О О 1 0], взгляд направлен на начало координат. Скалярное
произведение указанного вектора на матрицу тела дает:
Отрицательное число в шестом столбце показывает, что грань с этим номером нелицевая; рис. 4.16 подтверждает это. Нулевые результаты соответствуют плоскостям, параллельным направлению взгляда.
Данный метод определения нелицевых граней в результате формирует аксонометрическую проекцию на некую плоскость, расположенную бесконечно далеко
от любой точки трехмерного пространства. Видовые преобразования, включая
перспективное, производятся до определения нелицевых плоскостей. Когда видовое преобразование включает в себя перспективу, то нужно использовать полное
перспективное преобразование одного трехмерного пространства в другое, а не
перспективное проецирование на некоторую двумерную плоскость. Полное перспективное преобразование приводит к искажению трехмерного тела, которое
затем проецируется на некую плоскость в бесконечности, когда нелицевые плоскости уже определены. Этот результат эквивалентен перспективному проецированию из некоторого центра на конечную плоскость проекции.
Видовое преобразование можно применить к телу так, чтобы точка
наблюдения оставалась фиксированной. При другом способе тело остается неподвижным. Соответствующие точка наблюдения и направление взгляда получаются умножением справа на матрицу, обратную матрице видового преобразования. Следующий пример служит иллюстрацией к этим методам.
Пример 4.7. Нелицевая плоскость с учетом видового преобразования.
Рассмотрим единичный куб с центром в начале координат, повернутый на 45°
Алгоритм Робертса
13
вокруг оси Y. Соответствующее видовое преобразование будет иметь вид:
Преобразованная матрица тела получается умножением исходной матрицы тела слева на матрицу, обратную матрице видового преобразования. Для чистого поворота обращение матрицы видового преобразования сводится к ее
транспонированию. Поэтому
Если смотреть на начало координат из точки наблюдения [О О 1 0], лежащей на положительной полуоси Z, то направление взгляда или пробная точка
задаются вектором.
[Е] = [0 0 -1 0]
Скалярное произведение [Е] на преобразованную матрицу тела равно:
грани
1
2
3
4
5
6
[E]*[VT]
-2/ 2
2/ 2
0
0
2/ 2
-2/ 2
Следовательно, первая и шестая плоскости, которым соответствуют левая
и задняя грани в исходном положении куба, — нелицевые (рис. 4.17 подтверждает
Алгоритм Робертса
14
это). Заметим также, что когда тело преобразовано и направление взгляда фиксировано, то поиск отрицательных членов в скалярном произведении пробной
точки на преобразованную матрицу тела эквивалентен поиску положительных
членов в третьей строке преобразованной матрицы тела.
Эквивалентная точка наблюдения для непреобразованного тела, соответствующая повороту вокруг оси .v, равна:
[0 0 0 1][Ry]-1=[-1/ 2
0 1/ 2 0] = [-1 0 1 0]
т. е. эта точка расположена на прямой -.x = у в бесконечности в направлении
положительной полуоси z, как показано на рис. 4.17 Ь. Аналогично определяются
эквивалентное направление взгляда и пробная точка:
Эта точка расположена на прямой –x = z в бесконечности в направлении
отрицательной полуоси z. Скалярное произведение этого эквивалентного
направления взгляда на исходную матрицу тела равно:
Оно вновь показывает, что первая и шестая плоскости нелицевые.
это.
Алгоритм Робертса
Скачать