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 void NormalVectors(ref idVec3 left, ref idVec3 down) { float d = x * x + y * y; if (d == 0) { left.x = 1; left.y = 0; left.z = 0; } else { d = idMath.InvSqrt(d); left.x = -y * d; left.y = x * d; left.z = 0; } down = left.Cross(this); }
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; }