]> de.git.xonotic.org Git - xonotic/netradiant.git/commitdiff
Fix by Rambetter (svn r371):
authorRudolf Polzer <divverent@alientrap.org>
Tue, 28 Dec 2010 19:31:25 +0000 (20:31 +0100)
committerRudolf Polzer <divverent@alientrap.org>
Tue, 28 Dec 2010 19:31:25 +0000 (20:31 +0100)
Following up on r371; found another optimization for math rounding errors
in BaseWindingForPlane().  This allows me to get rid of an extra call to
VectorSetLength() which contain floating point multiplications.  Behavior
of BaseWindingForPlane() has been verified against base_winding regression
test (comparing output w/ logging patch).

tools/quake3/common/polylib.c

index b62d12ff34f762071ec6d5d17241546a54c034a3..7d5b8a83c8056a900b3280d28b0a22711af956b0 100644 (file)
@@ -253,13 +253,9 @@ winding_t *BaseWindingForPlane (vec3_t normal, vec_t dist)
                        vright[2] = normal[1];
                        break;
        }
                        vright[2] = normal[1];
                        break;
        }
-       CrossProduct(normal, vright, vup);
-
-       // IMPORTANT NOTE: vright and vup are NOT unit vectors at this point.
-       // However, normal, vup, and vright are pairwise perpendicular.
-
-       VectorSetLength(vup, MAX_WORLD_COORD * 2, vup);
+       // NOTE: vright is NOT a unit vector at this point.
        VectorSetLength(vright, MAX_WORLD_COORD * 2, vright);
        VectorSetLength(vright, MAX_WORLD_COORD * 2, vright);
+       CrossProduct(normal, vright, vup);
        VectorScale(normal, dist, org);
 
        w = AllocWinding(4);
        VectorScale(normal, dist, org);
 
        w = AllocWinding(4);