本文整理汇总了C++中BVHNode::addShape方法的典型用法代码示例。如果您正苦于以下问题:C++ BVHNode::addShape方法的具体用法?C++ BVHNode::addShape怎么用?C++ BVHNode::addShape使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BVHNode
的用法示例。
在下文中一共展示了BVHNode::addShape方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: BVHNode
BVHNode * BVHTree::buildSubTree(std::vector<Shape *> shapes, int depth) {
int size = (int) shapes.size();
int axis = depth % dims; // 0-2
// Construct leaf BVHNode containing shapes
if (size == shapesPerLeaf) {
BVHNode *leaf = new BVHNode();
leaf->addShape(shapes[0]); // Add shape and init bbox
leaf->leaf = true;
return leaf;
} else if (size == 0) {
return NULL;
}
// Otherwise split the shapes into two subsets, and divide them amongst
// the left and right child nodes
// Sort shapes based on the current axis
std::sort(shapes.begin(), shapes.end(), comparators[axis]);
// Find the median
int median = size / 2;
std::vector<Shape *>::iterator mid = shapes.begin() + median;
// Construct tree BVHNode
BVHNode *treeNode = new BVHNode();
// Construct left child BVHNode
std::vector<Shape *> lShapes(shapes.begin(), mid);
treeNode->left = buildSubTree(lShapes, depth + 1);
// Construct right child BVHNode
std::vector<Shape *> rShapes(mid, shapes.end());
treeNode->right = buildSubTree(rShapes, depth + 1);
// Store the bbox for the treeNode
treeNode->bbox = treeNode->left->bbox + treeNode->right->bbox;
return treeNode;
}