public OctTree( Vector3 center, Vector3 radius, int stopdepth) { this.center = center; this.radius = radius; AABBOctTree = new OctTreeNode <AABB> (center, radius); SphereOctTree = new OctTreeNode <Sphere> (center, radius); if (stopdepth < 0) { return; } AABBOctTree.BuildOctTree(center, radius, stopdepth); SphereOctTree.BuildOctTree(center, radius, stopdepth); }
public void BuildOctTree( Vector3 center, Vector3 r, int stopdepth) { if (stopdepth < 0) { return; } depth = stopdepth; r = r / 2; for (int i = 0; i < 8; ++i) { Vector3 offset = Vector3.zero; float step; for (int j = 0; j < 3; ++j) { step = r[j] / 2; offset[j] = (i & (1 << j)) > 0 ? step : -step; } child[i] = new OctTreeNode <T>(center + offset, r); child[i].BuildOctTree(center + offset, r, stopdepth - 1); } }