On transforming normals

You should know that in general, it is not safe to use the same modeling and viewing transform on vertex normals that you do with vertices themselves.

However, it is often safe. Any translation or rotation can be used on a vector safely. Any uniform scale can also be used on a vector safely. It is the non-uniform scale, which doesn't use the same factor in all dimensions, that is not safe.

The model transforms in our current assignment can be safely applied without the extra work below.

When it's not safe, given a modeling transform M, you should apply inverse(transpose(M)) to the vectors. I won't bother going into the math of why this is true now.

If you would like more detail, here are three sources: