author havoc Tue, 21 Mar 2006 09:07:34 +0000 (09:07 +0000) committer havoc Tue, 21 Mar 2006 09:07:34 +0000 (09:07 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@6159 d7cf8633-e32d-0410-b094-e92efae38249

 mathlib.h patch | blob | history

index b40e6f3..2ce09e5 100644 (file)
--- a/mathlib.h
+++ b/mathlib.h
@@ -101,9 +101,14 @@ extern vec3_t vec3_origin;
// finally a comparison to determine if the light is infront of the triangle
// (the goal of this statement) we do not need to normalize the surface
// normal because both sides of the comparison use it, therefore they are
-// both multiplied the same amount...  furthermore the subtract can be done
-// on the vectors, saving a little bit of math in the dotproducts
-#define PointInfrontOfTriangle(p,a,b,c) (((p) - (a)) * (((a) - (b)) * ((c) - (b)) - ((a) - (b)) * ((c) - (b))) + ((p) - (a)) * (((a) - (b)) * ((c) - (b)) - ((a) - (b)) * ((c) - (b))) + ((p) - (a)) * (((a) - (b)) * ((c) - (b)) - ((a) - (b)) * ((c) - (b))) > 0)
+// both multiplied the same amount...  furthermore a subtract can be done on
+// the point to eliminate one dotproduct
+// this is ((p - a) * cross(a-b,c-b))
+#define PointInfrontOfTriangle(p,a,b,c) \
+( ((p) - (a)) * (((a) - (b)) * ((c) - (b)) - ((a) - (b)) * ((c) - (b))) \
++ ((p) - (a)) * (((a) - (b)) * ((c) - (b)) - ((a) - (b)) * ((c) - (b))) \
++ ((p) - (a)) * (((a) - (b)) * ((c) - (b)) - ((a) - (b)) * ((c) - (b))) > 0)
+
#if 0
// readable version, kept only for explanatory reasons
int PointInfrontOfTriangle(const float *p, const float *a, const float *b, const float *c)
@@ -115,7 +120,7 @@ int PointInfrontOfTriangle(const float *p, const float *a, const float *b, const
VectorSubtract(c, b, dir1);

// we have two edge directions, we can calculate a third vector from
-       // them, which is the direction of the surface normal (it's magnitude
+       // them, which is the direction of the surface normal (its magnitude
// is not 1 however)
CrossProduct(dir0, dir1, normal);