Sign in to follow this  
nbertoa

Normal Vector Transformation

Recommended Posts

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!

Share this post


Link to post
Share on other sites
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. :)

Share this post


Link to post
Share on other sites

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...

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.

Edited by Dirk Gregorius

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this