28 Ф. Хилл

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

ство квадрата. Затем он соударяется с правой плоскостью при t - 1,8, также входя во внутреннее полупространство. Луч соударяется с левой плоскостью при t = 2,7 и выходит из внутреннего полупространства; наконец, он выходит из нижней плоскости при t = 2,9. '

Предположим, что мы проверяем плоскости (стороны) квадрата в указанном порядке, начиная с плоскости 1 и заканчивая плоскостью 4. Вначале устанавливаем интервал CI - (-°°, °°). Соударение с плоскостью 1 дает время выхода 2,9, поэтому нам понятно, что луч после этого момента времени должен быть вне квадрата, следовательно, CI = (-°°, 2,9). Тестирование с плоскостью 2 показывает, что фактически луч выходит еще раньше, в момент времени 2,7, поэтому полагаем rout равным 2,7. Тест с плоскостью 3 показывает, что луч не может войти раньше, чем при t - 1,6, поэтому присваиваем tm это значение. Наконец, тестирование с плоскостью 4 показывает, что фактически rjn составляет 1,8. Тогда окончательный CI - [1,8, 2,7]. На каждом этапе tm и rout вычисляются с помощью следующего кода:

озеленение и благоустройство детских садов.

if (the ray is entering at thit)
tin - raax(tm. thit) else if(the ray is exiting at tint)
tout - min(tout. thit)

Переходя к деталям, предположим, что луч имеет уравнение S + ct и что рассматриваемая плоскость имеет внешнюю нормаль m и содержит в себе точку В. Неявная форма уравнения этой плоскости имеет вид F(P) - m (Р - В), поэтому луч соударяется с ней, когда m (5 + ct - В) - 0, или в момент соударения

l - numer t Где числитель numer - m (В - 5), а знаменатель denom - m с. (14.17) denom

Таблица 14.2. Пересечение луча с внутренним полупространством плоскости

Ситуация

Условие

Проходит вовнутрь

denom < 0

Выходит наружу

denom > 0

Целиком внутри

denom = 0, numer > 0

Целиком снаружи

denom = 0, numer < 0

Луч переходит во внешнее полупространство плоскости, если denoш > 0 (поскольку векторы тис в этом случае образуют угол, меньший 90°), и переходит во внутреннее полупространство, если denom < 0. Если же йепот - 0, то луч параллелен плоскости и значением числителя питег определяется, лежит он целиком с внутренней или с внешней стороны плоскости, как было показано в разделе «Алгоритм Сайруса-Бека» главы 4. Четыре имеющиеся возможности приведены в табл. 14.2. Все это работает как в двух, так и в трех измерениях. Для базового куба значения питег и denom могут быть вычислены очень быстро: скалярные произведения вычисляются тривиально, поскольку каждый вектор т имеет по два нулевых компонента. Для плоскостей из табл. 14.1 получаются следующие значения (проверьте их).


⇐ Предыдущая| |Следующая ⇒