Archived

This topic is now archived and is closed to further replies.

Floru

Normal vector

Recommended Posts

Is there a function to calculate the normal vector for given points (for example 3 points). I''m using Direct3D and I have problems with lightning because I can''t calculate the normal vector. Thanks

Share this post


Link to post
Share on other sites
You''ll want to use the crossproduct, like so:

VECTOR V1,V2,V3, N;

N = Normalize(CrossProduct(V2-V1,V3-V1));

Remember that the direction of the normal depends on the order of its arguments so you must be consistent in the ordering.

Share this post


Link to post
Share on other sites
If you don''t want to calculate normals yourself and want dx to calculate lighting and your app is not realtime, then you can use d3ddev.setrenderstate D3DRENDERSTATE_NORMALIZENORMALS, TRUE.

Share this post


Link to post
Share on other sites
D3DRENDERSTATE_NORMALIZENORMALS should be set to true as your Direct3D drivers are usually much faster at normalizing than anything you can do yourself (unless you do some insane optimizations ). However, for the lighting to work you have to calculate the direction of the surface normal, and that is computed with the crossproduct as in my above answer.

The D3DRENDERSTATE_NORMALIZENORMALS state is usually used to be able to keep the right magnitude of the normals after transformations, for example scaling.

Share this post


Link to post
Share on other sites