Normal Vector Transformation

Started by
6 comments, last by Eric Lengyel 7 years ago

Hi, community.

I wrote a new article about the Normal Vector Transformation

The post is the following

https://nbertoa.wordpress.com/2017/04/13/normal-vector-transformation/

If you have any suggestions (things to add, modify, things that are wrong, corrections, etc) please let me know, because the intention of this post (in addition to helping people with the same doubts than me) is to learn if my knowledge is correct or not.

Hope you find it useful!

Advertisement
proof.png

The last line needs a dot, just like the first one.

My other criticism of the article is that you are not consistent enough about whether the normal is a vector or not.


In 3D, the surface normal, or simply normal, to a surface at a point P is a vector that [...]


Although normals are superficially similar to vectors[...]


Make up your mind. :)
Thanks, Alvaro. I will improve the article based on your feedback.

If the block of math (pointed out by Alvaro) isn't self evident to a reader, then the article reads like this:

From a mathematical point of view, suppose N is the normal vector and V is the tangent vector. Since they are perpendicular their dot product is zero. Therefore, normals must be transformed by the inverse transpose of the transformation matrix.

Which doesn't read very well -- the "therefore" seems out of the blue. To me it feels like there should be an extra sentence below the block of math that explains it.

I'm personally not good at explaining this either -- I always draw pictures of spheres being scaled like you have too, and prove via example that M produces an incorrect normal while M-T works...

Thanks Hodgman for your suggestions! Yes, you are right. I am not native English speaker, so sometimes my phrases are not the correct ones.

I just updated the post with a better explanation of that part.

I think I would first show that the naive approach fails (e.g. either sphere or box under shear transform). The reason it doesn't work is that you are essentially transforming a vector which is a non-linear function of the underlying mesh surface. E.g. n = f( v1, v2, ...) and obviously R * n = R * f( v1, v2, ...) != f( R * v1, R * v2, ... )

The discussion if normals are vectors is not useful in this context. Eric gave a presentation about Grassman algebra here: http://www.terathon.com/gdc12_lengyel.pdf which covers this problem properly.

Thanks Dirk for your suggestions! I did not know that presentation of Grassman algebra.

In my blog, I write mainly about 2 things: improvements in a little DirectX12 engine I am developing + new things I learn (like this article about normal vector transformation)

I try to show the things I learn, how I learned, how I implemented what I learned and what resources I used to learn them. Some topics are very well covered but in different papers, books, articles, etc. I try to make questions and answer them in a blog post. I do not know if that contributes or not to the community, but sharing knowledge + source code can help. When I share these posts, I get invaluable feedback from people with more experience than me.

And yes, I agree that these posts are also useful for me too because if for example, I forgot something about the geometry space transformations, I have a post about that that will help me to refresh the topic.

Eric gave a presentation about Grassman algebra here: http://www.terathon.com/gdc12_lengyel.pdf which covers this problem properly.

Thanks for the mention. My book goes into much more detail about all of this:

https://www.amazon.com/dp/0985811749/?tag=terathon-20

This topic is closed to new replies.

Advertisement