public static float MinDistanceFromPlane(Bounds bounds, Vector3 planeNormal, Vector3 planePoint) { using (new ScopedProfilerSample("MinDistanceFromPlane")) { float dist = float.MaxValue; var plane = new Plane(planeNormal, planePoint); var corners = new CornerEnumerator(bounds); while (corners.MoveNext()) { dist = Mathf.Min(dist, plane.GetDistanceToPoint(corners.Current)); } return(dist); } }
public static Bounds InverseTransform(Bounds bounds, Transform t) { using (new ScopedProfilerSample("InverseTransform")) { var worldToLocal = t.worldToLocalMatrix; var result = new Bounds(worldToLocal.MultiplyPoint(bounds.center), Vector3.zero); var corners = new CornerEnumerator(bounds); while (corners.MoveNext()) { result.Encapsulate(worldToLocal.MultiplyPoint(corners.Current)); } return(result); } }
public static float MaxProjectedDistanceFromPlane(Bounds bounds, Vector3 planeNormal, Vector3 planePoint, Vector3 projDir) { using (new ScopedProfilerSample("MaxProjectedDistanceFromPlane")) { float dist = 0.0f, projDist; var plane = new Plane(planeNormal, planePoint); var corners = new CornerEnumerator(bounds); while (corners.MoveNext()) { var ray = new Ray(corners.Current, projDir); if (plane.Raycast(ray, out projDist)) { dist = Mathf.Max(dist, projDist); } } return(dist); } }