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">⇐ Предыдущая| |Следующая ⇒