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); }