КГ_4глава (1024110), страница 9

Файл №1024110 КГ_4глава (Компьютерная графика) 9 страницаКГ_4глава (1024110) страница 92017-07-12СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 9)

Рис. 4.51. Это изображение получено обратной трассировкой лучей

Запишем базовую операцию обратной трассировки лучей в виде функции, которую назовем ЛУЧ. Она вычисляет значение интенсивности для текущего

трассируемого луча. Для описания функции используем псевдокод, близкий по синтаксису языку С.

интенсивность ЛУЧ(номер итерации ind, тип луча,

направление луча dir, номер объекта по) I

Находим точку пересечения луча с ближайшим объектом. Если точка найдена, то {

по = номер пересекаемого объекта.

Вычисляем нормаль к видимой стороне поверхности объекта. Если [Ка > 0) то //задано свойство диффузного отражения

{

Id = Интенсивность для диффузного отражения.

} Если (Ks > 0) то //зеркальные блики от источников света

{

Определяем направление отраженного луча dirR.

Is = Интенсивность зеркальности.

} Если г > 0) то //зеркальное отражение других объектов

{

Определяем направление отраженного луча dirR.

Ir = ЛУЧ (i.nd+1, отраженный, dirR, no) .

} Если [Kt > 0) то //объект полупрозрачный

{

Определяем направление преломленного луча dirT.

It = ЛУЧ {ind+1, преломленный, dirT, no).

}

return Ka Ia С + Kd Id С + Ks Is + Kr Ir + Kt It . }

иначе {

Это означает, что луч уходит в свободное пространство. return значение интенсивности по умолчанию. } (

Функция ЛУЧ представлена здесь в схематичном и достаточно обобщенном виде (хотя и не в самом общем — например, здесь не предусмотрено диф­фузное преломление). Для правильного функционирования процесса обрат­ной трассировки необходимо предусмотреть еще некоторые действия, которые не описаны в тексте функции. Сделайте это самостоятельно в виде упражнения. Так, например, необходимо предусмотреть, чтобы при трассировке первичного луча можно было бы получить изображение источников света не заслоняемых другими объектами. Кроме того, когда выпускается преломленный луч от границы внутрь некоторого объекта, и далее, когда он достигнет внешней границы, то в этот момент можно заблокировать появление зеркального луча, направленного внутрь объекта (например, при моделировании стеклянной линзы, заданной в виде объема, ограниченного некоторой поверхностью). Также следует предусмотреть, чтобы зеркальный луч мог быть выпущен при трассировке преломленного луча, но только если луч пе­ресекает иной объект, нежели тот, от границы объема которого началось преломление (например, при изображении рыбок в аквариуме). Для этого предусмотрены аргументы "тип луча" и "номер объекта". Для предотвраще­ния "зацикливания" (например, при попадании луча внутрь пространства, ограниченного зеркальными стенками) предусмотрен аргумент "номер ите­рации". Этот же аргумент можно использовать для распознавания первично­го луча.

Вы, наверное, уже заметили, что определение функции ЛУЧ является рекур­сивным, то есть в теле функции присутствуют вызовы этой же функции. Так_ можно достаточно просто моделировать все дерево лучей: сначала первич­ный луч, затем — порождающиеся вторичные, третичные и так далее. Весь процесс обратной трассировки для одной точки изображения представляется в виде единственной строчки

I = ЛУЧ (\, первичный, направление проецирования, 0).

Для первичного луча необходимо задать направление, соответствующее вы­бранной проекции. Если проекция центральная, то первичные лучи расходят­ся из общей точки, для параллельной проекции первичные лучи параллель­ны. Луч можно задать, например, координатами начальной и конечной точек отрезка, координатой начальной точки и направлением, или же еще как-нибудь. Задание первичного луча полностью определяет проекцию изобра­жаемой сцены. В главе 2 мы рассматривали основные типы проекции и свя­занные с ними преобразования координат. А при обратной трассировке лучей какие-либо преобразования координат вообще не обязательны. Проекция по­лучается автоматически — в том числе, не только плоская, но и, например, цилиндрическая или сферическая. Это одно из проявлений универсальности метода трассировки.

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

ческой системе. Так, например, для объектов, представленных в виде много­гранников и полигональных сеток, можно использовать известные методы определения точки пересечения прямой и плоскости, рассматриваемые в ана­литической геометрии [16]. Однако если ставится задача определения пере­сечения луча с гранью, то необходимо еще, чтобы найденная точка пересече­ния лежала бы внутри контура грани.

Известны несколько способов проверки произвольной точки на принадлеж­ность полигону. Рассмотрим две разновидности, в сущности, одного и того же метода (рис. 4.52).

Рис. 4.52. Точка является внутренней, если: а — точка принадлежит секущему отрезку, б — число пересечений нечетно

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

Второй способ. Определяется точка, лежащая на одной горизонтали с испы­туемой точкой, причем требуется, чтобы она лежала вне контура полигона. Найденная внешняя точка и испытуемая являются концами горизонтального отрезка. Определяются точки пересечения данного отрезка с контуром поли­гона. Если количество пересечений нечетно, это значит, что испытуемая точ­ка является внутренней [32, 33].

Если точек пересечения луча с объектами несколько, то выбирается ближай­шая точка по направлению текущего луча.

В сложных сценах со многими объектами для нахождения ближайшей точки пересечения необходимо перебирать все объекты. Если каждый объект пред­ставляется многими гранями-полигонами, то нужно анализировать еще и каждую грань на предмет пересечения с лучом. Для ускорения этого процес­са используется метод оболочек [28]. Суть данного метода в том, что при

переборе объектов анализируются сначала не сами объекты, а более простые формы — оболочки. Оболочка должна удовлетворять следующим требова­ниям. Во-первых, она должна охватывать объект, который должен целиком умещаться в ней. Если луч не пересекает оболочку, значит, этот же луч не пересечет объект. Во-вторых, тороизддоа. о^р&дадеиил тред&чекшя я^чъ vi с&отуо«гезл ДОТСКЖ&. ^\яга> ъъъ ^ложло ъроще, а тлавное, наиболее быстрой. Использование оболочек позволяет в ходе перебора объектов сразу отбрасы­вать те, которые заведомо не пересекаются с лучом. Но если луч пересекает оболочку, тогда ищется точка пересечения луча с объектом. Очевидно, что если луч пересек оболочку, то не обязательно этот луч пересечет соответст­вующий объект — форма оболочки не совпадает с формой объекта.

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

Если объектов достаточно много, то объекты (или оболочки) можно объеди­нять в группы — для нескольких объектов одна оболочка. Таким образом, выстраивается ужа иерархия оболочек: на нижнем уровне оболочки для оди­ночных объектов, на следующем уровне — оболочки оболочек и так далее. Такая древовидная структура может иметь несколько уровней. Это позволяет существенно ускорить процесс перебора, сделать время работы пропорцио­нальным (теоретически) логарифму числа объектов.

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

Для упрощения некоторых операций, выполняемых в ходе обратной трасси­ровки, можно использовать следующий способ. Он разработан автором этой книги и заключается в следующем. В ходе трассировки лучей с каждым лу­чом связывается локальная система координат. Центр этой трехмерной де­картовой системы располагается в точке, из которой направляется текущий луч трассировки. Ось Z направлена противоположно лучу, расположение осей X и Г безразлично. Таким образом, координаты X и Y точки пересечения луча с объектами всегда равны нулю. Это позволяет упростить нахождение координат точки пересечения луча, поскольку направления луча всегда одно и то же, и вычислять нужно только координату Z. Для плоских полигональ­ных граней это можно сделать с помощью линейной интерполяции коорди­нат Z соответствующих вершин. Кроме того, упрощаются и некоторые дру­гие операции. В частности, для отбора ближайшей точки пересечения достаточно анализировать только координату Z. Следует заметить, что упрощение |

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

В главе 7 приведен пример графической программы (studexl3), реализующей данный способ, а здесь мы еще рассмотрим некоторые теоретические аспек­ты. На рис. 4.53 показаны локальные координаты.

Рис. 4.53. Локальные координаты для текущих лучей

Пусть из точки Pi выпущен i-й луч, который пересек ближайший объект в точке Рi+1. Координаты точки Рi+1 в системе координат (Xi, Yi, Zi) рав­ны (0, 0, zp). Предположим, что направление нового, (i+1)-го, луча опреде­ляется в виде параллельного ему радиус-вектора в этой же системе коорди­нат, то есть (Xi,Yi,Zi)Обозначим координаты этого радиус-вектора через r уr zr). Как определить новую систему координат, связанную с (i+ 1)-м лучом? Эту систему координат можно получить следующим образом. Вначале сдви­нуть систему (Xi, Yi, Zi) по оси Z, на величину zp, а затем выполнить поворот так, чтобы ось Zi+1 была бы направлена против нового луча. Запишем форму­лы преобразований в следующем виде:

X i+1 = Xi cos a - Yi sin a,

Y i+1 = Xi sin a cos β + Yi cos a cos β -(Zi - zp) sin β,

Z i+1 = Xi sin a sin β + Уi cos a sin β + (Zi - zp) cos β,

где а и β— углы поворота.

Выразим поворот не углами, а через координаты радиус-вектора, который указывает новое направление оси Z. Рассмотрим рис. 4.54. Пусть радиус вектор имеет координаты (х, у, z). Длина ра­диус-вектора равна R:

а длина проекция на плоскость (XOY):

Характеристики

Тип файла
Документ
Размер
627 Kb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6384
Авторов
на СтудИзбе
308
Средний доход
с одного платного файла
Обучение Подробнее