コード例 #1
0
        public bool IntersectRay(Ray pRay, ref float pMaxDist, bool pStopAtFirstHit, ModelIgnoreFlags ignoreFlags)
        {
            if (iModel == null)
            {
                return(false);
            }

            float time = pRay.intersectionTime(iBound);

            if (float.IsInfinity(time))
            {
                return(false);
            }

            // child bounds are defined in object space:
            Vector3 p        = iInvRot * (pRay.Origin - iPos) * iInvScale;
            Ray     modRay   = new(p, iInvRot *pRay.Direction);
            float   distance = pMaxDist * iInvScale;
            bool    hit      = iModel.IntersectRay(modRay, ref distance, pStopAtFirstHit, ignoreFlags);

            if (hit)
            {
                distance *= iScale;
                pMaxDist  = distance;
            }
            return(hit);
        }