exam39 - MiAneko24/bmstu-cg GitHub Wiki
39. Определение нормали к поверхности и вектора отражения (4 способа) в алгоритмах построения реалистических изображений.
Определение нормали к поверхности
1. Если известно аналитическое описание поверхности - нормаль вычисляется через градиент в точке.
grad(F(x, y, z))
2. Если заданы уравнения плоскостей, проходящие через полигональные грани, то нормаль к их общей вершине равна среднему значению нормалей ко всем многоугольникам, сходящимся в этой вершине.
N = (A1 + ... + An)i + (B1 + ... + Bn)j + (C1 + ... + Cn)k
- An - коэффициенты уравнений плоскостей.
3. Если не заданы уравнения плоскостей. В таком случае, нормаль ищется путём усредненяя векторного произведения векторов, построенных на всех ребрах, пересекающихся в вершине.
N = v1v2 + v2v3 + v3v1
- v1 - v3 векторы ребер инцидентных вершине в которой ищется нормаль.
Требуется найти только внешние нормали.
Если нормаль к поверхности используется для определения интенсивности и для изображения объекта или сцены выполняется перспективное преобразование, то нормаль следует вычислять до перспективного преобразования. Иначе направление нормали будет искажено, что приведет к неправильному определению интенсивности, задаваемой моделью освещения.
Определение вектора отражения.
Основная идея: по закону отражения вектор падающего света, нормаль к поверхности и вектор отражения лежат в одной плоскости, причем на этой плоскости угол падения равен углу отражения.
Существует диффузное и зеркальное отражение.
При диффузном: свет поглащается поверхностью на которую падает и вновь излучается этой поверхностью по всем направлениям. Цвет совпадает с цветом поверхности.
При зеркальном: цвет концентрируется вокруг вектора отражения, то есть это направленное отражение. Цвет зеркального отраженного света совпадает с цветом падающего света.
Отражение происходит не строго по вектору, а вблизи. Его можно получить возведением косинуса в степень. Чем выше степень, тем более концентрированное распределение.
Первый способ
Это решение подходит для случая, когда свет падает вдоль оси Z. Удобно использовать для модели освещения с одним точечным источником. Переносят начало СК в точку поверхности, проекция вектора нормали и отражения (на плоскость ху) будут лежать на одной прямой.
- Угол между единичным вектором нормали и осью Z - θ.
- cos(θ) - составляющая вектора нормали по оси z.
Итоговые формулы:
Второй способ
Использовать можно когда не подходит первый метод (свет не падает по оси z или источников несколько).
Нормаль поворачивается параллельно оси Z, точка P - начало координат. В таком случае, плоскость xy - касательная к поверхности, х и у составляющие векторов падения и отражения будут иметь разные знаки, z составляющая - одинаковая. Далее: обратное преобразование и получение координат вектора отражения в исходной СК.
В перемещенной и повернутной CК:
Метод удобен, когда преобразования реализованы аппаратно или микропрограммно.
Третий способ
Основано на векторном произведении. Равенство углов падения и отражения выражается через скалярные произведения произведения векторов:
Четвертый способ
ЧИСТО АНАЛИТИЧЕСКИЙ СПОСОБ!
- t - угол падения
- Вектор R представляется суммой векторов L и n с некоторыми коэфами альфа и бета
- Решается сис-ма из двух уравнений и находятся эти коэфы.
Ну а дальше дело техники: домножаем на один кеф вектор нормали, на другой - вектор падения и получаем вектор отражения!
Следующий вопрос: 40. Построение теней при создании реалистических изображений. Учет теней в алгоритмах удаления невидимых поверхностей.
Предыдущий вопрос: 38. Построение реалистических изображений. Закраска Фонга (улучшение аппроксимации кривизны поверхности).