normal matrix for non uniform scaling

隐身守侯 提交于 2019-11-28 12:53:13

You already figured out that you need the transposed inverted matrix for transforming the normals. For a scaling matrix, that's easy to calculate.

A non-uniform 3x3 scaling matrix looks like this:

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

with sx, sy and sz being the scaling factors for the 3 coordinate directions.

The inverse of this is:

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

Transposing it changes nothing, so this is already your normal transformation matrix.

Note that, unlike for example a rotation, this transformation matrix will not keep vectors normalized when it is applied to a normalized vector. So after applying this matrix in your shader, you will have to re-normalize the result before using it for lighting calculations.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!