A simple bounding volume hierarchy based on AlignedBox. More...
Public Types | |
enum | { Dim } |
typedef int | Index |
typedef _Object | Object |
typedef const Object * | ObjectIterator |
typedef std::vector< Object, aligned_allocator< Object > > | ObjectList |
typedef _Scalar | Scalar |
typedef AlignedBox< Scalar, Dim > | Volume |
typedef const int * | VolumeIterator |
typedef std::vector< Volume, aligned_allocator< Volume > > | VolumeList |
Public Member Functions | |
void | getChildren (Index index, VolumeIterator &outVBegin, VolumeIterator &outVEnd, ObjectIterator &outOBegin, ObjectIterator &outOEnd) const |
Index | getRootIndex () const |
const Volume & | getVolume (Index index) const |
template<typename Iter > | |
void | init (Iter begin, Iter end) |
template<typename OIter , typename BIter > | |
void | init (OIter begin, OIter end, BIter boxBegin, BIter boxEnd) |
template<typename Iter > | |
KdBVH (Iter begin, Iter end) | |
template<typename OIter , typename BIter > | |
KdBVH (OIter begin, OIter end, BIter boxBegin, BIter boxEnd) |
A simple bounding volume hierarchy based on AlignedBox.
_Scalar | The underlying scalar type of the bounding boxes |
_Dim | The dimension of the space in which the hierarchy lives |
_Object | The object type that lives in the hierarchy. It must have value semantics. Either internal::bounding_box(_Object) must be defined and return an AlignedBox<_Scalar, _Dim> or bounding boxes must be provided to the tree initializer. |
This class provides a simple (as opposed to optimized) implementation of a bounding volume hierarchy analogous to a Kd-tree. Given a sequence of objects, it computes their bounding boxes, constructs a Kd-tree of their centers and builds a BVH with the structure of that Kd-tree. When the elements of the tree are too expensive to be copied around, it is useful for _Object to be a pointer.
KdBVH | ( | Iter | begin, |
Iter | end | ||
) | [inline] |
Given an iterator range over Object references, constructs the BVH. Requires that internal::bounding_box(Object) return a Volume.
KdBVH | ( | OIter | begin, |
OIter | end, | ||
BIter | boxBegin, | ||
BIter | boxEnd | ||
) | [inline] |
Given an iterator range over Object references and an iterator range over their bounding boxes, constructs the BVH
void getChildren | ( | Index | index, |
VolumeIterator & | outVBegin, | ||
VolumeIterator & | outVEnd, | ||
ObjectIterator & | outOBegin, | ||
ObjectIterator & | outOEnd | ||
) | const [inline] |
Given an index of a node, on exit, outVBegin and outVEnd range over the indices of the volume children of the node and outOBegin and outOEnd range over the object children of the node
Index getRootIndex | ( | ) | const [inline] |
void init | ( | Iter | begin, |
Iter | end | ||
) | [inline] |
Given an iterator range over Object references, constructs the BVH, overwriting whatever is in there currently. Requires that internal::bounding_box(Object) return a Volume.
void init | ( | OIter | begin, |
OIter | end, | ||
BIter | boxBegin, | ||
BIter | boxEnd | ||
) | [inline] |
Given an iterator range over Object references and an iterator range over their bounding boxes, constructs the BVH, overwriting whatever is in there currently.