Пример #1
0
        public bool hit(Ray r, double tMin, double tMax, ref HitRecord rec)
        {
            HitRecord tempRec      = new HitRecord();
            bool      hitAnything  = false;
            double    closestSoFar = tMax;

            for (int i = 0; i < hitArray.Length; i++)
            {
                if (hitArray[i].hit(r, tMin, closestSoFar, ref tempRec))
                {
                    hitAnything  = true;
                    closestSoFar = tempRec.t;
                    rec          = tempRec;
                }
            }

            return(hitAnything);
            //return hitBVH(r, tMin, tMax, ref rec);
        }
Пример #2
0
        public bool hit(Ray r, double tMin, double tMax, ref HitRecord rec)
        {
            if (box.hit(r, tMin, tMax))
            {
                HitRecord leftRec   = new HitRecord();
                HitRecord rightRec  = new HitRecord();
                bool      hit_left  = left.hit(r, tMin, tMax, ref leftRec);
                bool      hit_right = right.hit(r, tMin, tMax, ref rightRec);

                if (hit_left && hit_right)
                {
                    if (leftRec.t < rightRec.t)
                    {
                        rec = leftRec;
                    }
                    else
                    {
                        rec = rightRec;
                    }

                    return(true);
                }
                else
                {
                    if (hit_left)
                    {
                        rec = leftRec;
                        return(true);
                    }
                    else if (hit_right)
                    {
                        rec = rightRec;
                        return(true);
                    }
                }
            }

            return(false);
        }
Пример #3
0
 public bool hit(Ray r, double tMin, double tMax, ref HitRecord rec)
 {
     throw new NotImplementedException();
 }