Exemplo n.º 1
0
 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);
     }
 }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
 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);
     }
 }