Вопрос о зеркальном отражении - PullRequest
1 голос
/ 13 декабря 2010

Кто-нибудь знает, почему Specular Reflection определяется как Reflection = 2 (Normal. Light) Normal - Light, где Normal - нормаль плоскости, а Light - вектор нормализации от источника света?

Ответы [ 2 ]

2 голосов
/ 13 декабря 2010

Чтобы отразить вектор, вам нужно обратить вспять компонент этого вектора, который лежит на определенной оси. Например, чтобы отразить вектор вне оси x, вы можете просто перевернуть знак компонента y. Другой способ посмотреть на это - умножить компонент y на коэффициент -1. Еще один способ достижения этой цели состоит в том, чтобы дважды вычесть компонент y из себя. Этот последний вариант используется в формуле вашего сайта.

Мы хотим вычесть некоторую кратную нормали поверхности из нашего вектора направления. Термин (Normal.Light) дает вам компонент вектора света, который расположен вдоль нормали (аналогично компоненту y в примере выше). Затем нам нужно удвоить эту сумму (отсюда и 2), и мы хотим изменить вектор в направлении нормали, чтобы это число нужно было умножить на нормаль. Вы, похоже, поменялись условиями на минус.

0 голосов
/ 13 декабря 2010

Возможно, это следствие общего размышления, описанного здесь:

http://en.wikipedia.org/wiki/Reflection_(mathematics)

Вам, вероятно, нужно знать немного векторную геометрию или линейную алгебру, чтобы понять почему.

...