public static OctreeNode Intersect(this OctreeNode a, Sphere s) { return a.Intersect(node => { if (node.AABB.Inside(s)) return OctreeNode.NodeIntersectResult.Inside; if (s.Intersects(node.AABB)) return OctreeNode.NodeIntersectResult.True; return OctreeNode.NodeIntersectResult.False; }); }
public IModel Generate() { var s1 = new Sphere { Center = Vect3.Zero, Radius = 4 }; var s2 = new Sphere { Center = new Vect3(-3, -3, -3), Radius = 4 }; var b = new OctreeNode(Vect3.Zero, 16, 8); var t1 = b.Intersect(node => { if (node.AABB.Inside(s1)) return OctreeNode.NodeIntersectResult.Inside; if (s1.Intersects(node.AABB)) return OctreeNode.NodeIntersectResult.True; return OctreeNode.NodeIntersectResult.False; }); var t2 = b.Intersect(node => { if (node.AABB.Inside(s2)) return OctreeNode.NodeIntersectResult.Inside; if (s2.Intersects(node.AABB)) return OctreeNode.NodeIntersectResult.True; return OctreeNode.NodeIntersectResult.False; }); return new OctreeModel(t1.Subtract(t2), "Test Octree"); return new OctreeModel( new OctreeNode(Vect3.Zero, 16.0, 9).Intersect(s1), "Test Octree"); }