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