Главная -
Статьи -
Проекты -
Ссылки -
Скачать -
Из гельминтов -
Юмор, приколы -
Почитать -
Обо мне -
Мысли -
Гостевая -

Как в вершинном шейдере правильно преобразовывать нормали и другие вектора, "привязанные" к объекту

Пусть у нас есть некоторое преобразование, применяемое к вершинам объекта (грани). Не ограничивая общности можно считать, что это линейное преобразования (т.е. в нем нет переноса), так как перенос никак не влияет на вектора, "прикрепленные" к объекту.

Тогда это преобразование задается матрицей 3х3 (в вершинных шейдерах в качестве этой матрицы выступает верхняя левая 3х3 подматрица матрицы modelView) М.

Рассмотрим треугольник ABC. Пусть также задана нормаль n к нему. Тогда выполняются следующие два равенства (через круглые скобки обозначено скалярное произведение):

(n, B-A) = 0

(n, C-A) = 0

Матрица М переводит точки A,B и C в точки M*A, M*B и M*C, также образующие треугольник. Обозначим через n' нормаль к этому треугольнику.

Тогда выполняются следующие равенства:

(n', M*B-M*A) = 0

(n', M*C-M*A) = 0

Преобразуем их, воспользовавшись свойствами скалярного произведения.

0 = (n', M*(B-A)) = (MT*n', B - A )

0 = (n', M*C-M*A) = (MT*n', C - A )

Из этих равенств следует что вектор MT*n' отличается от нормали n к треугольнику ABC только длиной. Поскольку длина нас не интересует (направления все равно нормируются), то будем считать, что этот вектор просто совпадает с нормалью.

Тогда мы имеем:

MT*n' = n

n' = ((MT)-1)*n'

Таким образом вектора, "прикрепленные" к объекту (нормаль, касательная, бинормаль и т.п.) преобразуются при помощи верхней левой 3х3 подматрицы матрицы modelView транспонированной и обращенной.

Обратите внимание, что если матрицы modelView задает только повороты и перенос, то верхняя левая 3х3 подматрица будет ортогональной, т.е. M-1> = MT.

Тогда имеет место следующее тождество:

(MT)-1 = (M-1)-1 = M

Т.е. в этом случае можно для преобразования векторов использовать просто верхнюю левую 3х3 подматрицу матрицы modelView.


Copyright © 2006 Алексей В. Боресков

Используются технологии uCoz