#### Archived

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

# Normal vector

This topic is 6807 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## 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 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 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 on other sites
That doesn''t calculate the normals, it only normalizes them.

##### Share on other sites
Doesn''t it do it for lighting only though? Isn''t that the solution to Floru''s problem? It is of course a horrible way to do it.

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

1. 1
Rutin
70
2. 2
3. 3
4. 4
5. 5

• 21
• 10
• 33
• 20
• 9
• ### Forum Statistics

• Total Topics
633430
• Total Posts
3011825
• ### Who's Online (See full list)

There are no registered users currently online

×