/// <summary> /// Checks whether the current BoundingFrustum intersects a BoundingBox. /// </summary> /// <param name="box">The BoundingBox to check for intersection with.</param><param name="result">[OutAttribute] true if the BoundingFrustum and BoundingBox intersect; false otherwise.</param> public void Intersects(ref BoundingBox box, out bool result) { if (this.gjk == null) { this.gjk = new Gjk(); } this.gjk.Reset(); Vector3 result1; Vector3.Subtract(ref this.cornerArray[0], ref box.Min, out result1); if ((double)result1.LengthSquared() < 9.99999974737875E-06) { Vector3.Subtract(ref this.cornerArray[0], ref box.Max, out result1); } float num1 = float.MaxValue; result = false; float num2; do { Vector3 v; v.X = -result1.X; v.Y = -result1.Y; v.Z = -result1.Z; Vector3 result2; this.SupportMapping(ref v, out result2); Vector3 result3; box.SupportMapping(ref result1, out result3); Vector3 result4; Vector3.Subtract(ref result2, ref result3, out result4); if ((double)result1.X * (double)result4.X + (double)result1.Y * (double)result4.Y + (double)result1.Z * (double)result4.Z > 0.0) { return; } this.gjk.AddSupportPoint(ref result4); result1 = this.gjk.ClosestPoint; float num3 = num1; num1 = result1.LengthSquared(); if ((double)num3 - (double)num1 <= 9.99999974737875E-06 * (double)num3) { return; } num2 = 4E-05f * this.gjk.MaxLengthSquared; }while (!this.gjk.FullSimplex && (double)num1 >= (double)num2); result = true; }
public void Intersects(ref BoundingBox box, out bool result) { Vector3 closestPoint; Vector3 vector2; Vector3 vector3; Vector3 vector4; Vector3 vector5; if (this.gjk == null) { this.gjk = new Gjk(); } this.gjk.Reset(); Vector3.Subtract(ref this.cornerArray[0], ref box.Min, out closestPoint); if (closestPoint.LengthSquared() < 9.99999974737875E-06) { Vector3.Subtract(ref this.cornerArray[0], ref box.Max, out closestPoint); } float maxValue = float.MaxValue; result = false; Label_006C: vector2.X = -closestPoint.X; vector2.Y = -closestPoint.Y; vector2.Z = -closestPoint.Z; this.SupportMapping(ref vector2, out vector3); box.SupportMapping(ref closestPoint, out vector4); Vector3.Subtract(ref vector3, ref vector4, out vector5); if ((((closestPoint.X * vector5.X) + (closestPoint.Y * vector5.Y)) + (closestPoint.Z * vector5.Z)) <= 0.0) { this.gjk.AddSupportPoint(ref vector5); closestPoint = this.gjk.ClosestPoint; float num3 = maxValue; maxValue = closestPoint.LengthSquared(); if ((num3 - maxValue) > (9.99999974737875E-06 * num3)) { float num2 = 4E-05f * this.gjk.MaxLengthSquared; if (!this.gjk.FullSimplex && (maxValue >= num2)) { goto Label_006C; } result = true; } } }