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:

- Eric Haines at Udacity
- The Red Book appendix F
- The GLSL online book