   calculate the normal vector
  Hello friends. I need help to complete a project that I designed. The problem is: I have a 3D model generated at runtime that has misdirected the normal vector of some of their faces. What I need is an algorithm that corrects all sides. And tried to make an algorithm but I have not been able to operate. What we tried to do is reverse the edges of all adjacent faces, but I was complicated because I do not know how to determine which seed to use the normal vector is correct, then generate it from all sides correct.......c....b....d...e........./|....|\....\..|......../.|....|.\....\.|......./..|....|..\....\|.... ..a.-.b....c.-.d....b.... .face 1   face  2 face 3    neighboringI also tried to calculate the normal vector of the triangle and make a dot product with a reference point, but did not work either because the object is irregular in their faces. I do not know what to do, how they could solve the problem?[Edited by - I CAN DO on April 30, 2009 8:57:16 AM]
  I'm not sure I understand your whole problem but I'll take a shot at it. Most triangular meshes have a winding, either clockwise or counter clockwise. What this means is if you have clockwise winding and you are looking at the outside of the object, your points will be in clockwise order.  In structures that also store edges, instead of faces being directly linked to points, the edges can't all have the correct winding.  So this case you may sometimes need to disregard the direction of the edge  and just concentrate on the polygon winding. This assumes the triangle has some way of determining winding.For instance in my the case of my world mesh, edge1 always goes from point 1 to point 2, edge 3 goes from point 1 to point 3 but edge 2 can go either from point 2 to point 3 or point 3 to point 2. I can therefore rely on a point winding of:Point 1 = Edge 1 first pointPoint 2 = Edge 1 second pointPoint 3 = Edge 3 second pointAgain I don't use Edge 2 for this because it can go either way. There are lots of other schemes for determining winding, this is just an example. In any case once you have your points in order then you can just do a cross product to get the normal:N = Normalize( CrossProduct( Vector(  Point2-Point1 ),  Vector( Point3-Point1) ) )In this case I am assuming clockwise winding and a left handed coordinate system, but you can make it work for any system. ;  You might find this recent blog post useful: http://meshlabstuff.blogspot.com/2009/04/on-computation-of-vertex-normals.html