Формирование преломленного луча 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Формирование преломленного луча



 

 

Обозначим преломленный луч, имеющий единичную длину, через T 1. Единичный вектор нормали - через N 1. А вектор, направленный противоположно падающему лучу - через S 1. Разложим вектор S1 на A и Ns, а вектор T1 на B и NT. Вектор равен

 

.

 

Найдем вектор NT. Этот вектор противоположен по направлению вектору нормали, а длина его равна

 

.

 

Таким образом

 

.

 

Для того, что бы определить cosα 2, запишем закон преломления

 

.

 

Воспользуемся тождеством

 

 

Получим

 

 

Значение для cosα 1 можно выразить через скалярное произведение единичных векторов S 1 и N 1 . С учетом этого можно записать выражение для вектора

 

NT:

 

Найдем вектор B. Он располагается на одной прямой с вектором A, причем

 

.

 

Найдем отношение длин векторов A и B:

 

. Отсюда

.

 

Если подкоренное выражение отрицательно, то это соответствует полному внутреннему отражению. В этом случае преломленный луч создаваться не будет. Учтем то, что вектор S равен (0, 0,1).

 

 

Оболочки

 

В алгоритме трассировки лучей от 70 до 90 процентов временных затрат занимает процедура определения пересечений луча с объектами сцены. Если перебирать все объекты сцены, то время будет пропорционально Cn, где С - количество пикселей, а n - число объектов на сцене. Улучшить алгоритм можно, если каким-нибудь образом попробовать сократить число перебираемых объектов. Очень простой, но эффективной является идея иерархических оболочек. Предположим, что нам надо изобразить содержимое полки с посудой. Проведем мысленно большую сферу вокруг полки, так чтобы она включала и полку, и посуду на ней. Затем сферу вокруг каждого предмета посуды. Теперь представим себе процесс рендеринга. Проверяем, пересекается ли луч с самой большой сферой. Если нет, то это значит, что луч не пересекает внутренние оболочки, переходим к другому лучу. Если пересекает, то смотрим пересечение луча с подсферами данной сферы. Как видно из такого примера, многие лучи могут совершить всего одну проверку и отсеяться.

При построении оболочек необходимо, чтобы главная оболочка целиком включала все ее подоболочки, иначе не будет работать правило: "Если луч не пересекает главную оболочку, то он не пересекает и все ее подоболочки". Так же при построении оболочек желательно, чтобы оболочки, имеющие один порядок вложенности, пересекались по как можно меньшему объему. Это улучшит эффективность алгоритма. Метод оболочек помогает сделать время рендеринга пропорциональным Clog (n).



Поделиться:


Последнее изменение этой страницы: 2020-03-14; просмотров: 161; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.96.159 (0.005 с.)