Template Class BVSplitter

Inheritance Relationships

Derived Type

Class Documentation

template<typename BV>
class BVSplitter

A class describing the split rule that splits each BV node.

Subclassed by boost::serialization::internal::BVSplitterAccessor< BV >

Public Functions

inline BVSplitter(SplitMethodType method)
inline virtual ~BVSplitter()

Default deconstructor.

inline void set(Vec3s *vertices_, Triangle *tri_indices_, BVHModelType type_)

Set the geometry data needed by the split rule.

inline void computeRule(const BV &bv, unsigned int *primitive_indices, unsigned int num_primitives)

Compute the split rule according to a subset of geometry and the corresponding BV node.

inline bool apply(const Vec3s &q) const

Apply the split rule on a given point.

inline void clear()

Clear the geometry data set before.

bool COAL_DLLAPI apply (const Vec3s &q) const
bool COAL_DLLAPI apply (const Vec3s &q) const
bool COAL_DLLAPI apply (const Vec3s &q) const
bool COAL_DLLAPI apply (const Vec3s &q) const

Protected Functions

inline void computeRule_bvcenter(const BV &bv, unsigned int*, unsigned int)

Split algorithm 1: Split the node from center.

inline void computeRule_mean(const BV &bv, unsigned int *primitive_indices, unsigned int num_primitives)

Split algorithm 2: Split the node according to the mean of the data contained.

inline void computeRule_median(const BV &bv, unsigned int *primitive_indices, unsigned int num_primitives)

Split algorithm 3: Split the node according to the median of the data contained.

void COAL_DLLAPI computeRule_bvcenter (const OBB &bv, unsigned int *primitive_indices, unsigned int num_primitives)
void COAL_DLLAPI computeRule_mean (const OBB &bv, unsigned int *primitive_indices, unsigned int num_primitives)
void COAL_DLLAPI computeRule_median (const OBB &bv, unsigned int *primitive_indices, unsigned int num_primitives)
void COAL_DLLAPI computeRule_bvcenter (const RSS &bv, unsigned int *primitive_indices, unsigned int num_primitives)
void COAL_DLLAPI computeRule_mean (const RSS &bv, unsigned int *primitive_indices, unsigned int num_primitives)
void COAL_DLLAPI computeRule_median (const RSS &bv, unsigned int *primitive_indices, unsigned int num_primitives)
void COAL_DLLAPI computeRule_bvcenter (const kIOS &bv, unsigned int *primitive_indices, unsigned int num_primitives)
void COAL_DLLAPI computeRule_mean (const kIOS &bv, unsigned int *primitive_indices, unsigned int num_primitives)
void COAL_DLLAPI computeRule_median (const kIOS &bv, unsigned int *primitive_indices, unsigned int num_primitives)
void COAL_DLLAPI computeRule_bvcenter (const OBBRSS &bv, unsigned int *primitive_indices, unsigned int num_primitives)
void COAL_DLLAPI computeRule_mean (const OBBRSS &bv, unsigned int *primitive_indices, unsigned int num_primitives)
void COAL_DLLAPI computeRule_median (const OBBRSS &bv, unsigned int *primitive_indices, unsigned int num_primitives)

Protected Attributes

int split_axis

The axis based on which the split decision is made. For most BV, the axis is aligned with one of the world coordinate, so only split_axis is needed. For oriented node, we can use a vector to make a better split decision.

Vec3s split_vector
CoalScalar split_value

The split threshold, different primitives are splitted according whether their projection on the split_axis is larger or smaller than the threshold.

Vec3s *vertices

The mesh vertices or points handled by the splitter.

Triangle *tri_indices

The triangles handled by the splitter.

BVHModelType type

Whether the geometry is mesh or point cloud.

SplitMethodType split_method

The split algorithm used.