if(isInShadow(…)) continue:
чтобы убрать любое тестирование на отбрасывание теней.) Зеркальная составляющая определяется в соответствии с уравнением (14.21), для чего требуется вычислить вектор h и использовать коэффициент зеркального отражения (и показатель степени/), хранящийся в my0bj->mtrl .specular.
На рис. 14.16 показана сцена, визуализация объектов которой производилась с учетом фонового, диффузного и зеркального света, однако без вычисления теней. Из-за зеркальных бликов объекты кажутся изготовленными из блестящей пластмассы.
Практическое упражнение
14.7.1. Преобразование нормального вектора Напишите подпрограмму
void xfrmNormal(Vector3& res. Affine4S aff.-Vector3& v).
в которой вектор v умножается на транспонированную матрицу, в исходном виде хранящуюся в äff, в результате чего получается вектор res. Данная подпрограмма используется в трассировщике луча посредством вызова
xfrmNormal(normal. myObj->invTransf. h.hitNormal).
14.7. Рисование закрашенных изображений сцен
Рис. 14.16. Объекты, освещенные фоновым, диффузным и зеркальным светом Это означает, что нормальный вектор h.hitNormal в базовых координатах преобразуется посредством матрицы, обратной матрице myObj-> invTransf, которая записана в объекте соударения, после чего получается нормальный вектор normal в мировых координатах.
14.7.3. Физически обоснованные модели закраски"opengl1_963.html">⇐ Предыдущая| |Следующая ⇒