void Octree::initBuild( StdList<BaseTriangle*>& tris, int triPerNode ) { // add triangles involved to "triangleData" this->triangleData = LIST_TO_VECTOR(tris); this->trianglePerNode = triPerNode; // Create a big box BoundingBox bb; bb.computeFromTris(triangleData); // Transform and scale to node's coordinates double largeSize = Max(bb.xExtent, Max(bb.yExtent, bb.zExtent)); // Define our bounding box this->boundingBox = BoundingBox(bb.center, largeSize, largeSize, largeSize); // Build the tree this->build(); // Connect children with parent std::stack<Octree*> childStack; childStack.push(this); while(!childStack.empty()) { Octree * curr = childStack.top(); childStack.pop(); for(int i = 0; i < (int) curr->children.size(); i++) { curr->children[i].parent = curr; childStack.push(&curr->children[i]); } } }
void Octree::init( int triPerNode ) { this->trianglePerNode = triPerNode; BoundingBox bb; bb.computeFromTris(triangleData); //Transform and scale to node's coordinates double largeSize = Max(bb.xExtent, Max(bb.yExtent, bb.zExtent)); this->boundingBox = BoundingBox(bb.center, largeSize, largeSize, largeSize); parent = NULL; }