// ===================================================================================== // SnapToPlane // ===================================================================================== void SnapToPlane(const dplane_t* const plane, vec_t* const point, vec_t offset) { #ifdef HLRAD_MATH_VL vec_t dist; dist = DotProduct (point, plane->normal) - plane->dist; dist -= offset; VectorMA (point, -dist, plane->normal, point); #else vec3_t delta; vec3_t proj; vec3_t pop; // point on plane VectorScale(plane->normal, plane->dist + offset, pop); VectorSubtract(point, pop, delta); ProjectionPoint(delta, plane->normal, proj); VectorSubtract(delta, proj, delta); VectorAdd(delta, pop, point); #endif }
// Will modify the plane with the new dist void TranslatePlane(dplane_t* plane, const vec_t* delta) { #ifdef HLRAD_FASTMATH plane->dist += DotProduct(plane->normal,delta); #else vec3_t proj; vec_t magnitude; ProjectionPoint(delta, plane->normal, proj); magnitude = VectorLength(proj); if (DotProduct(plane->normal, delta) > 0) //if zero, magnitude will be zero. { plane->dist += magnitude; } else { plane->dist -= magnitude; } #endif }