normal matrix for non uniform scaling

前端 未结 1 505

Im trying to calculate the normal matrix for my GLSL shaders on OpenGL 2.0.

The theory is : a normal matrix is the top left 3x3 matrix of the ModelView, transposed a

相关标签:
1条回答
  • 2020-12-11 12:04

    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.

    0 讨论(0)
提交回复
热议问题