public static bool ProjectAlongPlane(idVec3 t, idVec3 normal, float epsilon, float overBounce) { idVec3 cross = t.Cross(normal).Cross(t); // normalize so a fixed epsilon can be used cross.Normalize(); float len = normal * cross; if (idMath.Fabs(len) < epsilon) { return(false); } cross.opMul(overBounce * (normal * t) / len); t.opSub(cross); return(true); }
public static void ProjectOntoPlane(ref idVec3 t, idVec3 normal, float overBounce) { float backoff = t * normal; if (overBounce != 1.0) { if (backoff < 0) { backoff *= overBounce; } else { backoff /= overBounce; } } t.opSub(normal * backoff); }
public static bool ProjectAlongPlane(idVec3 t, idVec3 normal, float epsilon, float overBounce) { idVec3 cross = t.Cross(normal).Cross(t); // normalize so a fixed epsilon can be used cross.Normalize(); float len = normal * cross; if (idMath.Fabs(len) < epsilon) return false; cross.opMul(overBounce * (normal * t) / len); t.opSub(cross); return true; }
public static void ProjectOntoPlane(ref idVec3 t, idVec3 normal, float overBounce) { float backoff = t * normal; if (overBounce != 1.0) { if (backoff < 0) backoff *= overBounce; else backoff /= overBounce; } t.opSub(normal * backoff); }