Open CASCADE Technology 7.8.2.dev
|
Performs fast BVH construction using LBVH building approach. Algorithm uses spatial Morton codes to reduce the BVH construction problem to a sorting problem (radix sort – O(N) complexity). This Linear Bounding Volume Hierarchy (LBVH) builder produces BVH trees of lower quality compared to SAH-based BVH builders but it is over an order of magnitude faster (up to 3M triangles per second). More...
#include <BVH_LinearBuilder.hxx>
Public Types | |
typedef BVH::VectorType< T, N >::Type | BVH_VecNt |
Public Types inherited from Standard_Transient | |
typedef void | base_type |
Returns a type descriptor about this object. | |
Public Member Functions | |
BVH_LinearBuilder (const Standard_Integer theLeafNodeSize=BVH_Constants_LeafNodeSizeDefault, const Standard_Integer theMaxTreeDepth=BVH_Constants_MaxTreeDepth) | |
Creates binned LBVH builder. | |
virtual | ~BVH_LinearBuilder () |
Releases resources of LBVH builder. | |
virtual void | Build (BVH_Set< T, N > *theSet, BVH_Tree< T, N > *theBVH, const BVH_Box< T, N > &theBox) const override |
Builds BVH. | |
Public Member Functions inherited from BVH_Builder< T, N > | |
Public Member Functions inherited from BVH_BuilderTransient | |
Standard_Integer | MaxTreeDepth () const |
Returns the maximum depth of constructed BVH. | |
Standard_Integer | LeafNodeSize () const |
Returns the maximum number of sub-elements in the leaf. | |
Standard_Boolean | IsParallel () const |
Returns parallel flag. | |
void | SetParallel (const Standard_Boolean isParallel) |
Set parallel flag contolling possibility of parallel execution. | |
Public Member Functions inherited from Standard_Transient | |
Standard_Transient () | |
Empty constructor. | |
Standard_Transient (const Standard_Transient &) | |
Copy constructor – does nothing. | |
Standard_Transient & | operator= (const Standard_Transient &) |
Assignment operator, needed to avoid copying reference counter. | |
virtual | ~Standard_Transient () |
Destructor must be virtual. | |
virtual const opencascade::handle< Standard_Type > & | DynamicType () const |
Returns a type descriptor about this object. | |
Standard_Boolean | IsInstance (const opencascade::handle< Standard_Type > &theType) const |
Returns a true value if this is an instance of Type. | |
Standard_Boolean | IsInstance (const Standard_CString theTypeName) const |
Returns a true value if this is an instance of TypeName. | |
Standard_Boolean | IsKind (const opencascade::handle< Standard_Type > &theType) const |
Returns true if this is an instance of Type or an instance of any class that inherits from Type. Note that multiple inheritance is not supported by OCCT RTTI mechanism. | |
Standard_Boolean | IsKind (const Standard_CString theTypeName) const |
Returns true if this is an instance of TypeName or an instance of any class that inherits from TypeName. Note that multiple inheritance is not supported by OCCT RTTI mechanism. | |
Standard_Transient * | This () const |
Returns non-const pointer to this object (like const_cast). For protection against creating handle to objects allocated in stack or call from constructor, it will raise exception Standard_ProgramError if reference counter is zero. | |
Standard_Integer | GetRefCount () const noexcept |
Get the reference counter of this object. | |
void | IncrementRefCounter () noexcept |
Increments the reference counter of this object. | |
Standard_Integer | DecrementRefCounter () noexcept |
Decrements the reference counter of this object; returns the decremented value. | |
virtual void | Delete () const |
Memory deallocator for transient classes. | |
Protected Types | |
typedef NCollection_Array1< BVH_EncodedLink >::iterator | LinkIterator |
Protected Member Functions | |
Standard_Integer | emitHierachy (BVH_Tree< T, N > *theBVH, const NCollection_Array1< BVH_EncodedLink > &theEncodedLinks, const Standard_Integer theBit, const Standard_Integer theShift, const Standard_Integer theStart, const Standard_Integer theFinal) const |
Emits hierarchy from sorted Morton codes. | |
Standard_Integer | lowerBound (const NCollection_Array1< BVH_EncodedLink > &theEncodedLinks, Standard_Integer theStart, Standard_Integer theFinal, Standard_Integer theDigit) const |
Returns index of the first element which does not compare less than the given one. | |
Protected Member Functions inherited from BVH_Builder< T, N > | |
BVH_Builder (const Standard_Integer theLeafNodeSize, const Standard_Integer theMaxTreeDepth) | |
Creates new abstract BVH builder. | |
void | updateDepth (BVH_Tree< T, N > *theBVH, const Standard_Integer theLevel) const |
Updates depth of constructed BVH tree. | |
Protected Member Functions inherited from BVH_BuilderTransient | |
BVH_BuilderTransient (const Standard_Integer theLeafNodeSize, const Standard_Integer theMaxTreeDepth) | |
Creates new abstract BVH builder. | |
Additional Inherited Members | |
Static Public Member Functions inherited from Standard_Transient | |
static constexpr const char * | get_type_name () |
Returns a type descriptor about this object. | |
static const opencascade::handle< Standard_Type > & | get_type_descriptor () |
Returns type descriptor of Standard_Transient class. | |
Protected Attributes inherited from BVH_BuilderTransient | |
Standard_Integer | myMaxTreeDepth |
Maximum depth of constructed BVH. | |
Standard_Integer | myLeafNodeSize |
Maximum number of objects per leaf. | |
Standard_Boolean | myIsParallel |
Parallel execution flag. | |
Performs fast BVH construction using LBVH building approach. Algorithm uses spatial Morton codes to reduce the BVH construction problem to a sorting problem (radix sort – O(N) complexity). This Linear Bounding Volume Hierarchy (LBVH) builder produces BVH trees of lower quality compared to SAH-based BVH builders but it is over an order of magnitude faster (up to 3M triangles per second).
For more details see: C. Lauterbach, M. Garland, S. Sengupta, D. Luebke, and D. Manocha. Fast BVH construction on GPUs. Eurographics, 2009.
BVH::VectorType<T,N>::Type BVH_LinearBuilder< T, N >::BVH_VecNt |
|
protected |
BVH_LinearBuilder< T, N >::BVH_LinearBuilder | ( | const Standard_Integer | theLeafNodeSize = BVH_Constants_LeafNodeSizeDefault, |
const Standard_Integer | theMaxTreeDepth = BVH_Constants_MaxTreeDepth ) |
Creates binned LBVH builder.
|
virtual |
Releases resources of LBVH builder.
|
overridevirtual |
Builds BVH.
Implements BVH_Builder< T, N >.
|
protected |
Emits hierarchy from sorted Morton codes.
|
protected |
Returns index of the first element which does not compare less than the given one.