if(transparency > 0.5)…
В силу того, что при определенных условиях лучи могут бесконечно порождать новые отраженные и преломленные лучи (рассмотрим, например, сцену, состоящую из четырех абсолютных зеркал, установленных под такими углами, что луч отражается от них бесконечно), необходимо наложить некоторые ограничения на глубину рекурсии. Это нетрудно сделать путем контроля каждым лучом своей «глубины»: поле recurseLevel (уровень рекурсии), уже упоминавшееся в связи с затенением, является частью записи каждого луча. Для лучей, исходящих из глаза, значение recurseLevel устанавливается в нуль. Каждый раз, когда формируется отраженный или преломленный луч, этот уровень увеличивается на единицу. Если уровень луча достигает предельного значения maxRecursionDepth (которое хранится в поле объекта Scene и задается в SDL-файле, например, так: maxRecursionDepth 5), то больше никаких отраженных или преломленных лучей не испускается. Обычно при максимальном уровне рекурсии 4 или 5 получаются достаточно реалистичные изображения.
14.11.1. Преломление света Будь радугой для жизненных невзгод, Лучом вечерним, что окрасит тучи И нам предскажет завтрашний восход!
Лорд Байрон (Lord Byron)
Когда луч света соударяется с прозрачным объектом, то часть этого луча проходит сквозь этот объект, как показано на рис. 14.48. Если скорость света в среде № 1 и в среде N° 2 различна, то луч изменит свое направление с dir на t. (Вектор t продолжает лежать в той же плоскости, что и направление dir, и нормаль т.) Если угол падения луча обозначить через 9,, то согласно закону Снелла (Snell's law) угол преломления 92 определяется следующим уравнением [Halliday, 98]:
sin(Q2) = sin (9 J (1445) сг с, где с, - скорость света в среде 1, а с2 - скорость света в среде 2, как показано на рисунке. Важно только отношение этих скоростей с2/с,. Его часто называют коэффициентом преломления (index of refraction) среды 2 относительно среды I1. Отметим, что если угол падения 9, равен нулю, то это же
1 Поскольку под коэффициентом преломления одни понимают с,/с2, а другие с2/с,, то мы будем избегать в формулах его обозначения, а будем писать прямо: с2/с,.