Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ВОПРОСЫ_И_Лекции по КГ

.pdf
Скачиваний:
31
Добавлен:
22.03.2016
Размер:
2.17 Mб
Скачать

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

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

Триангуляция поверхностей

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

- треугольник – это простейшая фигура, вершины которого однозначно задают

грань;

-любую область можно гарантированно разбить на треугольники;

-алгоритмы разбиения на треугольники менее сложные;

-визуализация треугольников наиболее проста;

Для треугольника легко определить трех ближайших соседей, имеющих с ним общие грани.

Процесс разбиения полигональной области со сложной конфигурацией называется триангуляцией.

Геометрические задачи визуализации

Главная геометрическая задача визуализации – это отсечение элементов, не попавших в область отображения сцены и удаление элементов, заслоненных другими элементами от наблюдателя.

Алгоритмы визуализации Отсечение Двумерное отсечение

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

-двумерными (окно дисплея) или трехмерными (призма или пирамида);

-регулярными (прямоугольники и параллелепипеды со сторонами, параллельными осям координат), и нерегулярными, имеющими произвольную форму;

-аппаратными, реализованными микропроцессорными средствами СБИС ЦП, контроллеров, графических ускорителей и т. д. Обычно аппаратные отсекатели бывают регулярными или выпуклыми 2d и 3d формами;

111

- программными, более медленными по сравнению с аппаратными.

Алгоритмы отсечения бывают дву- и трехмерные. На рис. 3.1 показана плоская сцена и отсекающее окно регулярной формы. Окно задается левым (Л), правым (П), верхним (В) и нижним (Н) двумерными ребрами. Регулярным отсекающим окном является прямоугольник, стороны которого параллельны осям координат объектного пространства или осям координат экрана. Целью алгоритма отсечения является определение тех точек, отрезков или их частей, которые лежат внутри отсекающего окна. Эти точки, отрезки или их части остаются для визуализации. А все остальное отбрасывается.

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

j

l i

В

k

n

.p

b

Л П j a

i

j

i

.q

m

i

j

Н

Рис 3.1

Точки, лежащие внутри отсекающего окна, удовлетворяют условию: xл <= х <= xп, yн <= y <= yв. Знак равенства здесь показывает, что точки, лежащие на границе окна, считаются находящимися внутри него. Отрезок лежит внутри окна и, следовательно, является видимым, если обе его концевые точки лежат внутри окна, например отрезок ab на рис. 3.1. Однако если оба конца отрезка лежат вне окна, то этот отрезок не обязательно лежит целиком вне окна, например отрезок mn на рис. 3.1. Если же оба конца отрезка лежат справа, слева, выше или ниже окна, то этот отрезок целиком лежит вне окна, а значит, невидим. Проверка последнего условия устранит все отрезки, помеченные ij на рис. 3.1. Но она не устранит ни отрезка mn, который видим частично, ни отрезка kl, который целиком невидим.

112

Пусть а и b - концы отрезка, тогда можно предложить алгоритм, определяющий все полностью видимые и большинство невидимых отрезков:

Простой алгоритм определения видимости

a, b - концевые точки отрезка в координатном пространстве (х, у)

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

if хa < хл оr хa > хп then 1 if хb < хл оr хb > хп then 1 if ya < yн оr ya > yв then 1 if yb < yн оr yb > yв then 1

отрезок полностью видимый визуализировать отрезок

go to 3

проверить полную невидимость отрезка если оба конца отрезка лежат слева, справа, сверху или снизу от окна, то факт невидимости отрезка тривиален

if хa < хл and хb < хл then 2 if хa > хп and хb > хп then 2

if ya > yв and yb > yв then 2 if ya < yн and yb < yн then 2

отрезок частично видим или пересекает продолжение диагонали, оставаясь невидимым определить пересечения отрезка с окном

отрезок невидим переход к следующему отрезку

Пересечение двух отрезков можно искать как параметрическим, так и непараметрическим способами. Очевидно, что уравнение бесконечной прямой, проходящей через точки Р11, y1) и Р22,y2), имеет вид y = m(х - х2) + y2 или у = m(х - х2) + у2, где m = (y2 - y1)/ (х2 - х1) - это наклон данной прямой. Точки пересечения этой прямой со сторонами окна имеют следующие координаты:

 

 

m

 

<>

с левой: хл, y = m(хл - х1) + y1 бесконечность

 

с правой: хп, y =

m(хп - х1) + y1 m <> бесконечность

с верхней: yв, х = х1

+ (1/m)(yв - y1)

m

<>

0

с нижней: yн, х = х1

+ (1/m)(yн - у1)

m <> 0

 

 

 

 

 

 

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

113

Трехмерное отсечение

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

отсекать и по нестандартным объемам.

Y Y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Z

 

 

Z

 

Рис. 3.4 a - Параллелепипед

b - Усеченная пирамида

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

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

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

a b c

Рис. 4.1 Необходимость удаления невидимых линий

114

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

Классификация алгоритмов удаления

По типу объектов

По способу описания

По способу

 

моделей объектов

выбора рабочего пространства

Линии

Аналитические

Объектные

Поверхности

Параметрические

Экранные

 

Полигональные

Гибридные

Большинство алгоритмов удаления работает с поверхностями, представленными системой полигональных плоских граней, в основном треугольников.

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

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

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

115

формирующие список приоритетов, работают попеременно в объектном и экранном пространствах.

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

Взаимодействие ускоряемой программы с тем или иным набором микросхем осуществляется с помощью драйверов, а на программном уровне с помощью графических библиотек, Direct3D в составе DirectX, OpenGL, QuickTime3D.

Графические 3d-библиотеки или по-другому интерфейсы программных приложений (API) предназначены для того, чтобы с помощью некоторых общих методов обработки графических данных облегчить и ускорить процесс создания приложений, использующих трехмерную графику. При работе над графическим эффектом программисту необходимо обратиться к библиотечной функции, передать ей требуемые параметры и получить готовый результат. Многие графические библиотеки (например, Direct3D, рассчитаны на комбинированную работу как с акселераторами, так и с ЦП. Если акселератор в системе не найден, или не поддерживает данную функцию, то библиотека переложит работу на ЦП, при этом результат будет достигнут медленнее.

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

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

4.1 Алгоритм z-буфера (Точечные поверхности)

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

Определение порядка вывода точек криволинейной поверхности на экран: метод z-буферасамый распространенный, простой и достаточно эффективный метод визуализации произвольных поверхностей. Этот метод аппаратно реализован во всех современных графических ускорителях. Сущность метода заключается в переборе точек поверхности и записи в видеопамять цветовых кодов ближайших к наблюдателю точек. Для реализации процесса сортировки точек по глубине в памяти ЭВМ создаются две матрицы:

Буфер глубины Z, он хранит параметры удаления точек сцены,

116

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

Буфер кадра F, хранящий цвета точек окна вывода.

Перед началом обработки поверхностей объектов сцены выполняется инициализация буферов глубины и кадра фоновыми значениями дальности и цвета. Фон – это любая картинка, заполняющая окно вывода в отсутствии объектов. Дальность фона задается числом, большим удаленности самой дальней точки сцены от наблюдателя. Например, это может быть максимальное число разрядной сетки ЭВМ. Поверхности или их отдельные ячейки проецируются на экран, отсекаются границей вывода. Далее начинается сканирование точек каждой проекции, их можно перебирать в произвольном порядке. Эта процедура называется разложением проекции в растр – двумерную матрицу пикселей, закрашиваемых независимо друг от друга. Для каждой точки растра необходимо найти образ точки на соответствующей поверхности. Физически это означает, что из точек растра проводятся сканирующие лучи и рассчитываются точки пересечения этих лучей с поверхностями. Из нескольких точек, нанизанных на конкретный луч, наблюдатель увидит ближайшую. Именно эту точку и надо отобразить на экране, поэтому цвет ближайшей точки записывается в соответствующий пиксел буфера экрана. Если на луче нет ни одной точки. То цвет пиксела остается фоновым. Метод вычисления глубины d точки p зависит от используемой проекции изображения поверхности. После нахождения глубины d

проверяется состояние (i, j)-го элемента

z-буфера - Zi,j. При d<Zi,j точкаp находится к

наблюдателю ближе, чем другие точки поверхности (или фон), имеющие

такие же

экранные координаты [i j]. В z-буфер

записывается новое состояние

Zi,j=d, а в

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

Алгоритм Z-буфера работает в пространстве изображения и применяется в таких популярных графических библиотеках, как OpenGL и Direct3D

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

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

F(x,y,z) = 0

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

117

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

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

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

случае она невидима.

Y

 

 

 

 

 

 

X

 

 

 

 

 

 

Z4= c onst

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Z3= c onst

 

 

 

 

 

 

Z2= c onst

Z

 

 

 

 

 

Z1= c onst

 

 

 

 

 

 

Рис. 4.2 Кривые в секущих плоскостях с постоянной координатой Реализация данного алгоритма достаточно проста. Для хранения максимальных

значений y при каждом значении х используется массив, длина которого равна числу различимых точек (разрешению) по оси х в пространстве изображения. Значения, хранящиеся в этом массиве, представляют собой текущие значения «горизонта». Поэтому по мере рисования каждой очередной кривой этот горизонт «всплывает». Фактически этот алгоритм удаления невидимых линий работает каждый раз с одной линией.

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

118

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

Рис. 4.3 Обработка нижней стороны поверхности

В изложенном алгоритме предполагается, что значение функции, т. е. y, известно для каждого значения х в пространстве изображения. Однако если для каждого значения х нельзя указать (вычислить) соответствующее ему значение y, то невозможно поддерживать массивы верхнего и нижнего плавающих горизонтов. В таком случае используется линейная интерполяция значений y между известными значениями для того, чтобы заполнить массивы верхнего и нижнего плавающих горизонтов. Если видимость кривой меняется, то метод с такой простой интерполяциеЙ не даст корректного результата. А это может повлечь за собой дополнительные нежелательные эффекты. Следовательно, необходимо решать задачу о поиске точек пересечения сегментов текущей и предшествующей кривых.

Метод обратной трассировки лучей

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

119

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

Суть метода обратной трассировки лучей заключается в следующем.

1. Из точки наблюдения сцены посылается в пространство виртуальный луч, по траектории которого должно прийти изображение в точку наблюдения

2. Для определения параметров приходящего луча все объекты сцены проверяются на пересечение с траекторией наблюдения. Если пересечения не происходит, считается, что луч попал в фон сцены и приходящая информация определяется только параметрами фона. Если траектория пересекается с объектом, то в точке соприкосновения рассчитывается свет, уходящий в точку наблюдения в соответствии с параметрами материала.

3.Сначала просчитывается преломленный и отраженный свет, затем проверяется видимость из точки пересечения всех источников света и интенсивность светового потока. Также вычисляется наличие, резкость и ширина бликов от каждого источника света.

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

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

5. Построение реалистических изображений 5.1. Введение

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

Человеческий глаз - очень сложная система. Он имеет почти сферическую форму с диаметром около 20 мм. Воспринимаемый свет с помощью гибкого хрусталика фокусируется на сетчатке глаза, в которой есть два типа рецепторов: колбочки и палочки. В центре задней полусферы глаза собрано 6-7 млн. колбочек, чувствительных только к сравнительно высоким уровням освещенности, причем каждая из них присоединена к отдельному нерву. Колбочки позволяют различать

120