Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора переделанная.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
581.63 Кб
Скачать

Алгоритм сканирующей прямой Уоткинса

Данный алгоритм достаточно прост в аппаратной реализации как для векторных, так и для растровых дисплеев. Он выполняется в картинной плоскости. Изображение имеет вид многоугольников, предоставляющих собой ортогональные проекции плоских граней трехмерных объектов. Сканирующие прямые в картинной плоскости параллельны оси Х (т.е. у=const) и являются проекциями сканирующих плоскостей, параллельных оси Z, рассекающих плоские грани трехместных объектов.

Очередной шаг алгоритма состоит в обработке очередной сканирующей прямой. Сканирующая прямая разбивается на отрезки, соответствующие проекциям плоских граней трехмерных объектов в сканирующей плоскости. Находятся так называемые "пробные интервалы", соответствующие одновременно проекциям различных граней. Далее для пробных интервалов определяются видимые грани.

  1. Поиск пробных интервалов

    1. На сканирующей прямой находятся отрезки, лежащие внутри каждого из многоугольников. Эти отрезки определяются крайними точками (пересечения сканирующей прямой и граничных линий многоугольников).

Рисунок 11.1 Алгоритм сканирующей прямой Уоткинса

    1. Находятся все перекрывающиеся отрезки (S12 и S13). Все остальные отрезки видимы, т.к. они не перекрываются.

    2. На множестве перекрывающихся отрезков находятся пробные интервалы. Пробные интервалы определяются своими крайними точками, в которых начинается и заканчивается перекрытие отрезков, и характеризуются тем, что число содержащих их отрезков постоянно больше 1 (пробный интервал 1).

  1. Определение видимости отрезка на пробном интервале Видимость определяется тестом глубины 3 (ТГ3) для начальных и конечных точек отрезков на пробном интервале. Наиболее близкий отрезок является видимым.

  2. Видимые отрезки раскрашиваются с интенсивностью в соответствии со значением координаты Z и заданным цветом фигуры.

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

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

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

aх + by + cz + d = 0

Если любая точка S(xs, ys, zs) лежит на плоскости, то axs + bys + czs + d = 0. Если же S не лежит на плоскости, то знак этого скалярного произведения показывает, по какую сторону от плоскости расположена точка. В алгоритме Робертса предполагается, что точки, лежащие внутри тела, дают положительное скалярное произведение.

Пусть F1, F2, ..., Fn - грани многогранника. Рассмотрим одну из граней. Обозначим вершины, инцидентные грани, через V1, V2, ..., Vk. Найдем вектор нормали к грани, вычислив векторное произведение любых двух смежных ребер этой грани V1V2 = [x1,y1,z1] и V2V3 = [x2,y2,z2]:

ni = [V1V2,V2V3] =

i     j    k x1  y1  z1 x2  y2  z2

= (y1z2 - y2z1)·i + (z1x2 - z2x1)·j + (x1y2 - x2y1)·k = Ai·i + Bi·j + Ci·k

Тогда опорная функция грани имеет вид:

Li(x,y,z) = Aiх + Biy + Ciz + D

Величина D вычисляется с помощью произвольной точки на плоскости. В частности, если компоненты этой точки на плоскости (х1,y1,z1), то:

D = -(ах1 + by1 + cz1)

Так как многогранник выпуклый, коэффициенты Ai, Bi, Ci легко выбрать так, чтобы ni(Ai, Bi, Ci) был вектором внешней нормали. Для этого найдем какую-либо внутреннюю точку, например, барицентр многогранника:

W = (V1 + V2 + ... + Vk)/k

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

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

Для каждого тела из приоритетного списка:

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

  2. Провести проверки экранирования для прямоугольных объемлющих оболочек пробного объекта и пробного тела.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]