Трехмерная компьютерная графика
Рефераты >> Программирование и компьютеры >> Трехмерная компьютерная графика

Push Пиксел ( x, y )

else

Push Пиксел ( x - 1, y )

end if

Флаг = 0

end if

продолжим проверку, если интервал был прерван

Xвход = x

while (( Пиксел ( x, y ) = Гран_значение or

Пиксел ( x, y ) = Нов_значение ) and x < Xправ)

x = x + 1

end while

удостоверимся что координата пиксела увеличена

if x = Xвход then x = x + 1

end while

проверим, что строка ниже не является ни границей многоугольника, ни уже полностью заполненной

Эта часть алгоритма совершенно аналогична проверке для строки выше, за исключением, того что вместо y = y + 1 надо подставить y = y - 1

end while

finish

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

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

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

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

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

Объем вычислений для любого алгоритма, работающего в объектном пространстве, и сравнивающего каждый объект сцены со всеми остальными объектами этой сцены, растет теоретически как квадрат числа объектов ( n2 ). Аналогично, объем вычислений любо­го алгоритма, работающего в пространстве изображения и сравнивающего каждый объект сцены с позициями всех пикселов в систе­ме координат экрана, растет теоретически, как nN. Здесь n обозна­чает количество объектов (тел, плоскостей или ребер) в сцене, а N - число пикселов. Теоретически трудоемкость алгоритмов, работаюoих в объектном пространстве, меньше трудоемкости алгоритмов, работающих в пространстве изображения, при n < N. По­скольку N обычно равно ( 512 )2, то теоретически большинство алгоритмов следует реализовывать в объектном пространстве. Однако на практике это не так. Дело в том, что алгоритмы, работающие в пространстве изображения, более эффективны потому, что для них легче воспользоваться преимуществом когерентности при растро­вой реализации.

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

3.1. Алгоритм плавающего горизонта

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

F ( x, у, z ) = 0

Подобные функции возникают во многих приложениях в математи­ке, технике, естественных науках и других дисциплинах.

Существует много алгоритмов, использующих этот подход. Поскольку в приложениях в основном нас интересует описание поверхности, этот алгоритм обычно работает в про­странстве изображения. Главная идея данного метода заключается в сведении трехмерной задачи к двумерной путем пересечения ис­ходной поверхности последовательностью параллельных секущих плоскостей, имеющих постоянные значения координат x, y или z.

На рис. 3.2 приведен пример, где указанные параллельные плоскости определяются постоянными значениями z. Функция F ( x, у, z ) = 0 сводится к последовательности кривых, лежащих в каждой из этих параллельных плоскостей, например к последовательности

y = f ( x, z ) или y = g ( y, z )

где z постоянно на каждой из заданных параллельных плоскостей.

Итак, поверхность теперь складывается из последовательности

кривых, лежащих в каждой из этих плоскостей, как показано на рис. 3.3. Здесь предполагается, что полученные кривые являются однозначными функциями независимых переменных. Если спроецировать полученные кривые на плоскость z = 0, то сразу становится ясна идея алгоритма удаления невиди­мых участков исходной поверхности. Алгоритм сначала упорядочи­вает плоскости


Страница: