}
}
-/*
-==================
-SnapWeldVectorAccu
-
-Welds two vectors into a third, taking into account nearest-to-integer
-instead of averaging.
-==================
-*/
-void SnapWeldVectorAccu(vec3_accu_t a, vec3_accu_t b, vec3_accu_t out)
-{
- // I'm just preserving what I think was the intended logic of the original
- // SnapWeldVector(). I'm not actually sure where this function should even
- // be used. I'd like to know which kinds of problems this function addresses.
-
- // TODO: I thought we're snapping all coordinates to nearest 1/8 unit?
- // So what is natural about snapping to the nearest integer? Maybe we should
- // be snapping to the nearest 1/8 unit instead?
-
- int i;
- vec_accu_t ai, bi, ad, bd;
-
- if (a == NULL || b == NULL || out == NULL)
- Error("SnapWeldVectorAccu: NULL argument");
-
- for (i = 0; i < 3; i++)
- {
- ai = Q_rintAccu(a[i]);
- bi = Q_rintAccu(b[i]);
- ad = fabs(ai - a[i]);
- bd = fabs(bi - b[i]);
-
- if (ad < bd)
- {
- if (ad < SNAP_EPSILON) out[i] = ai;
- else out[i] = a[i];
- }
- else
- {
- if (bd < SNAP_EPSILON) out[i] = bi;
- else out[i] = b[i];
- }
- }
-}
-
-
-
/*
FixWinding() - ydnar
removes degenerate edges from a winding
w = s->winding;
if (!w)
continue;
- ClipWindingEpsilon (w, plane->normal, plane->dist,
- 0 /*PLANESIDE_EPSILON*/, &cw[0], &cw[1]);
+ ClipWindingEpsilonStrict (w, plane->normal, plane->dist,
+ 0 /*PLANESIDE_EPSILON*/, &cw[0], &cw[1]); /* strict, in parallel case we get the face back because it also is the midwinding */
for (j=0 ; j<2 ; j++)
{
if (!cw[j])