Так же как в главе 8, мы распространим эти понятия на цветные лучи света и объекты. Тогда свет, достигающий глаза, будет иметь красный, зеленый и синий компоненты, задаваемые формулами:
7* = 7«*Р«* + 7*°* Х 1атЬеГС + 'адР* Х РП0П§/' (14-23> К = 1аь?аь+ 7дРд х 1атЬеП + 1!рЬр1Ь х рЬоп^, где различные / и р - соответственно интенсивности и коэффициенты отражения для отдельных составляющих цвета. Отметим в частности, что во всех трех составляющих цвета используются одни и те же коэффициенты 1атЬегС и phong, а также векторы т, в, Ь, поэтому трассировку луча достаточно произвести только один раз, и коэффициенты 1атЪеН и phong также требуется вычислять лишь однократно.
При вычислениях закрашивания необходимо знать точку соударения Ри, а также векторы Ь, в, т. Позднее мы рассмотрим проблему вычисления вектора т, для чего нам понадобится некоторая информация, целиком содержащаяся в записи пересечений.
14.7.1. Нахождение нормали в точке соударения Вектор т - это вектор, нормальный к поверхности соударения в точке, где это соударение произошло. Вначале мы находим вектор т наиболее простым способом - в базовых координатах - и затем преобразуем его в мировые координаты. В разделе «Влияние аффинного преобразования» главы 6 мы пока-
Введение в трассировку лучей
зали, что если один объект преобразуется в другой посредством матрицы М, то нормальный вектор m' преобразуется в нормальный вектор
m - Мтт', (14.24)
где М~Т означает транспонированную обратную к M матрицу. Поэтому искомая нормаль m может быть найдена путем вычисления нормали к поверхности базового объекта в точке соударения с последующим умножением этого вектора на матрицу М~т.
К счастью, мы уже вычислили и сохранили нормаль в точке соударения в базовых координатах; она размещается в поле hitNormal записи пересечений рассматриваемого соударения. Таким образом, ее можно преобразовать в мировые координаты (см. упражнение в конце следующего раздела).
14.7.2. Раскраска объектов в соответствии с материалами поверхностей