Normal transformations
Whenever vertices are transformed, normal vectors should also be transformed, so they point in the right direction. We could think of using the Model-View matrix that transforms vertices to do this, but there is a problem: The Model-View matrix will not always keep the perpendicularity of normals.
This problem occurs if there is a unidirectional (one axis) scaling transformation or a shearing transformation in the Model-View matrix. In our example, we have a triangle that has undergone a scaling transformation on the y-axis. As you can see, the normal N' is not normal anymore after this kind of transformation. How do we solve this?
Calculating the Normal matrix
If you are not interested in finding out how we calculate the Normal matrix and just want the answer, please feel free to jump to the end of this section. Otherwise, stick around to see some linear algebra in action!
Let's start from the mathematical definition of perpendicularity. Two vectors are perpendicular...