Курсовая работа: Построение реалистичного изображения методом обратной трассировки лучей
где x0 , y0 , z0 – координаты центра параболоида, A, B, C – длины полуосей параболоида. Ось параболоида расположена вдоль оси Oz мировой системы координат.
Для вычисления координат вектора нормали необходимо вычислить частные производные по x, y, z.
Координаты вектора нормали эллипсоида:
Xn = 2(x-x0 )/A2 ,
Yn = 2(y-y0 )/B2 ,
Zn = 2(z-z0 )/С2 .
Направление вектора не изменится, если все его координаты разделить на 2:
Xn = (x-x0 )/A2 ,
Yn = (y-y0 )/B2 ,
Zn = (z-z0 )/С2 .
Координаты вектора нормали параболоида вычисляются аналогично:
Xn = (x-x0 )/A2 ,
Yn = (y-y0 )/B2 ,
Zn = – (z-z0 )/С2 .
Нормаль для поверхности второго порядка придется вычислять непосредственно в теле трассировки, так как в разных точках фигуры нормали разные.
Вычисление отраженного луча
Пусть задан вектор падающего луча S, а также известен вектор нормали N. Требуется найти вектор отраженного луча R.
Рассмотрим единичные векторы R1 , S1 и N1 . Поскольку векторы нормали, падающего луча и отраженного луча находятся в одной плоскости, то можно записать R1 + S1 = N`, где N` - это вектор, соответствующий диагонали ромба и совпадающий по направлению с нормалью. Длина вектора N` равна 2cosθ. Так как вектор N` по направлению совпадает с N1 , то
N` = N`2cosθ.
Отсюда найдем единичный вектор отраженного луча:
R1 = N1 2cosθ – S1 = N/|N| 2cosθ – S/|S|.
Найдем cosθ. Это можно сделать, используя скалярное произведение векторов N и S:
cosθ = N*S/(|N|*|S|).
Полагая, что искомый вектор отраженного луча будет иметь такую же длину, что и вектор падающего луча, то есть R = |S| R1 , получим
R = N 2NS/|N|2 – S.
Это решение в векторной форме. Запишем координаты вектора:
xR = 2xN (xN xS +yN yS +zN zS )/(xN 2 +yN 2 +zN 2 ) – xS ,
yR = 2yN (xN xS +yN yS +zN zS )/(xN 2 +yN 2 +zN 2 ) – yS ,
zR = 2zN (xN xS +yN yS +zN zS )/(xN 2 +yN 2 +zN 2 ) – zS .