public override void IntersectDF(BBTreeNode cdTree, List <DirectDetectData> res) { //if (aAABB.Intersect(cdTree.bBall.vCentre, cdTree.bBall.dRange)) if (children != null) { for (int i = 0; i < children.Length; i++) { AABBTreeNode ch = (AABBTreeNode)children[i]; if (MathEx.BoundingSphereIntersects(ref cdTree.ball, ref ch.aabb)) //(cdTree.bBall.Intersect(ref ch.aAABB)) { cdTree.IntersectDF(ch, res); //相互遍历 } } } else { Triangle t = (Triangle)faceData; cdTree.IntersectDF(ref t, res); } }
public override void IntersectDF(BBTreeNode cdTree, List <DirectDetectData> res) { //if ((cdTree.bBall.vCentre ^ bBall.vCentre) <= r * r) if (children != null) { for (int i = 0; i < children.Length; i++) { BBTreeNode ch = (BBTreeNode)children[i]; float r = (cdTree.ball.Radius + ch.ball.Radius); if (MathEx.DistanceSquared(ref cdTree.ball.Center, ref ch.ball.Center) <= r * r) { cdTree.IntersectDF(ch, res); //相互遍历 } } } else { // 有一个到了根节点 // 那就就让另一个直接到根节点判断,就是 Triangle t = (Triangle)faceData; cdTree.IntersectDF(ref t, res); } }