Here's a C++ized version of what blender currently does (from arithb.c):
Code: Select all
point CalcNormXXX( point A, point B, point C, point &result )
{
result = point( A -B ).cross( B -C );
return result.normalize();
}
The common vertex is B, but only the first vector is relative to B. The second is relative to C. What this does is negate the direction of the BC vector, hence negating the direction of the face normal. In other words, the function should read:
Code: Select all
point CalcNormXXX( point A, point B, point C, point &result )
{
result = point( A -B ).cross( C -B );
return result.normalize();
}
Thanks for any illumination you can provide.