예제 #1
0
        public bool Hit(Ray r, double tMin, double tMax, out HitRecord hr)
        {
            if (!Box.Hit(r, tMin, tMax))
            {
                hr = default(HitRecord);
                return(false);
            }

            var hitLeft  = Left.Hit(r, tMin, tMax, out var hrl);
            var hitRight = Right.Hit(r, tMin, hitLeft ? hrl.T : tMax, out var hrr);

            if (hitRight)
            {
                hr = hrr;
                if (hr.Material == null)
                {
                    Console.WriteLine("Returning HRR with null material");
                }
                return(true);
            }

            if (hitLeft)
            {
                hr = hrl;
                if (hr.Material == null)
                {
                    Console.WriteLine("Returning HRL with null material");
                }
                return(true);
            }

            hr = default(HitRecord);
            return(false);
        }
예제 #2
0
 public bool Hit(Ray ray, float tMin, float tMax)
 {
     if (box == null)
     {
         return(false);
     }
     return(box.Hit(ray, tMin, tMax));
 }