Шаг 71.
Основы компьютерной графики. Методы и алгоритмы трехмерной графики. Закрашивание поверхностей. Модели отражения света. Зеркальное отражение

    На этом шаге мы рассмотрим особенности реализации этой модели.

    Будем считать, что задан радиус-вектор S, направленный на источник света, а также известен радиус-вектор нормали N. Требуется найти косинус угла между отраженным лучом и направлением камеры.

    Вначале необходимо вычислить радиус-вектор отраженного луча. Обозначим его как R. Выполним некоторые геометрические построения, как показано на рисунке 1.


Рис.1. Векторы R1, S1 и N1 - единичной длины

    Для решения данной задачи вначале рассмотрим единичные векторы R1, S1 и N1. Поскольку векторы нормали, падающего луча и отраженного луча находятся в одной плоскости, то можно записать R1+ S1 = N', где N'- это вектор, соответствующий диагонали ромба и совпадающий по направлению с нормалью. Длина вектора N' равна 2cosθ. Так как вектор N' по направлению совпадает с N1, то

  N' = N12cosθ  ,
или
  R1 + S1 = N12cosθ  .

    Отсюда найдем единичный вектор отраженного луча:

    Найдем cosθ. Это можно сделать, используя скалярное произведение векторов N и S:

    Подставим это значение в выражение для R1:

    Полагая, что искомый вектор отраженного луча будет иметь такую же длину, что и вектор падающего луча, то есть R = |S|R1, получим:

    Это решение в векторной форме. Запишем координаты вектора R.

    Теперь осталось найти косинус угла между отраженным лучом и направлением камеры. Обозначим радиус-вектор, направленный на камеру, как K. Искомый косинус угла найдем, используя скалярное произведение векторов K и R:

    Очевидно, что для упрощения вычислений целесообразно задавать векторы S, N и K единичной длины (тогда и R будет единичным).

    На следующем шаге мы рассмотрим метод Гуро.




Предыдущий шаг Содержание Следующий шаг