2015-03-12 2 views
2

Im пытается вычислить нормальную матрицу для моих шейдеров GLSL на OpenGL 2.0.нормальная матрица для неравномерного масштабирования

Теория: нормальная матрица - это верхняя левая матрица 3х3 модели, транспонированная и перевернутая.

Это кажется правильным, поскольку я правильно показывал свои сцены, пока не импортировал модель из майи и не нашел неравномерные масштабы. Загруженные модели имеют странное освещение, в то время как мои процедурные правильны, поэтому я вкладываю деньги в вычисление нормальной матрицы.

Как он рассчитывается с неравномерной шкалой?

ответ

2

Вы уже поняли, что вам нужна транспонированная перевернутая матрица для преобразования нормалей. Для матрицы масштабирования это легко вычислить.

Неравномерное масштабирование 3x3 матрица выглядит следующим образом:

[ sx 0 0 ] 
[ 0 sy 0 ] 
[ 0 0 sz ] 

с sx, sy и sz быть коэффициенты масштабирования для 3 координатных направлений.

Инверсия это:

[ 1/sx 0  0  ] 
[ 0  1/sy 0  ] 
[ 0  0  1/sz ] 

Перенося это ничего не меняет, так что это уже ваша нормальная матрица преобразования.

Обратите внимание, что эта матрица преобразования, в отличие от вращения, не будет поддерживать нормализацию векторов при ее применении к нормированному вектору. Поэтому, применяя эту матрицу в своем шейдере, вам придется повторно нормализовать результат, прежде чем использовать его для подсчета освещения.

+0

Один вопрос, если я вращаю модель, нормали тоже должны вращаться, когда я их объединяю по нормальной матрице, но если я поверю модель, затенение идет не так, любая идея о том, почему это так? –