private static BinarySpaceNode Subdivide(int maxdepth, int maxsize, BoundingBox bb, int depth, List<RenderItem> items, double total) { if(depth >= maxdepth || items.Count <= maxsize) { return new BinarySpaceNode(items.ToArray()); } int dim; double sweep = CalculateOptimalSplit(items, depth%0x03, bb, out dim, total); BoundingBox bbleft, bbright; bb.SplitAt(sweep, dim, out bbleft, out bbright); List<RenderItem> left = new List<RenderItem>(), right = new List<RenderItem>(); double leftsf, rightsf; Split(items, dim, sweep, left, right, bbleft, bbright, out leftsf, out rightsf); return new BinarySpaceNode(Subdivide(maxdepth, maxsize, bbleft, depth+0x01, left, leftsf), Subdivide(maxdepth, maxsize, bbright, depth+0x01, right, rightsf), sweep, dim); }