1#ifndef BT_GIMPACT_BVH_H_INCLUDED
2#define BT_GIMPACT_BVH_H_INCLUDED
70 int startIndex,
int endIndex,
int splitAxis);
121 return nodeindex + 1;
127 return nodeindex + 1 +
m_node_array[nodeindex + 1].getEscapeIndex();
228 return boxQuery(transbox, collided_results);
300#ifdef TRI_COLLISION_PROFILING
301 static float getAverageTreeCollisionTime();
#define SIMD_FORCE_INLINE
Node Structure for trees.
void appy_transform(const btTransform &trans)
Apply a transform to an AABB.
The btAlignedObjectArray template class uses a subset of the stl::vector interface for its methods It...
void clear()
clear the array, deallocated memory. Generally it is better to use array.resize(0),...
void push_back(const GIM_PAIR &_Val)
Basic Box tree structure.
void _build_sub_tree(GIM_BVH_DATA_ARRAY &primitive_boxes, int startIndex, int endIndex)
int _calc_splitting_axis(GIM_BVH_DATA_ARRAY &primitive_boxes, int startIndex, int endIndex)
GIM_BVH_TREE_NODE_ARRAY m_node_array
int getRightNode(int nodeindex) const
void getNodeBound(int nodeindex, btAABB &bound) const
void setNodeBound(int nodeindex, const btAABB &bound)
int getNodeCount() const
node count
const GIM_BVH_TREE_NODE * get_node_pointer(int index=0) const
int getNodeData(int nodeindex) const
int getLeftNode(int nodeindex) const
int _sort_and_calc_splitting_index(GIM_BVH_DATA_ARRAY &primitive_boxes, int startIndex, int endIndex, int splitAxis)
bool isLeafNode(int nodeindex) const
tells if the node is a leaf
void build_tree(GIM_BVH_DATA_ARRAY &primitive_boxes)
prototype functions for box tree management
int getEscapeNodeIndex(int nodeindex) const
Structure for containing Boxes.
void buildSet()
this rebuild the entire set
bool isTrimesh() const
tells if this set is a trimesh
int getRightNode(int nodeindex) const
int getNodeCount() const
node count
btAABB getGlobalBox() const
bool isLeafNode(int nodeindex) const
tells if the node is a leaf
int getLeftNode(int nodeindex) const
bool boxQueryTrans(const btAABB &box, const btTransform &transform, btAlignedObjectArray< int > &collided_results) const
returns the indices of the primitives in the m_primitive_manager
bool boxQuery(const btAABB &box, btAlignedObjectArray< int > &collided_results) const
returns the indices of the primitives in the m_primitive_manager
void setPrimitiveManager(btPrimitiveManagerBase *primitive_manager)
void getNodeBound(int nodeindex, btAABB &bound) const
int getEscapeNodeIndex(int nodeindex) const
void getNodeTriangle(int nodeindex, btPrimitiveTriangle &triangle) const
bool hasHierarchy() const
tells if this set has hierarcht
btPrimitiveManagerBase * getPrimitiveManager() const
const GIM_BVH_TREE_NODE * get_node_pointer(int index=0) const
btGImpactBvh()
this constructor doesn't build the tree. you must call buildSet
int getNodeData(int nodeindex) const
bool rayQuery(const btVector3 &ray_dir, const btVector3 &ray_origin, btAlignedObjectArray< int > &collided_results) const
returns the indices of the primitives in the m_primitive_manager
btPrimitiveManagerBase * m_primitive_manager
void update()
node manager prototype functions
void setNodeBound(int nodeindex, const btAABB &bound)
static void find_collision(btGImpactBvh *boxset1, const btTransform &trans1, btGImpactBvh *boxset2, const btTransform &trans2, btPairSet &collision_pairs)
btGImpactBvh(btPrimitiveManagerBase *primitive_manager)
this constructor doesn't build the tree. you must call buildSet
void push_pair(int index1, int index2)
void push_pair_inv(int index1, int index2)
Prototype Base class for primitive classification.
virtual void get_primitive_triangle(int prim_index, btPrimitiveTriangle &triangle) const =0
retrieves only the points of the triangle, and the collision margin
virtual ~btPrimitiveManagerBase()
virtual bool is_trimesh() const =0
determines if this manager consist on only triangles, which special case will be optimized
virtual int get_primitive_count() const =0
virtual void get_primitive_box(int prim_index, btAABB &primbox) const =0
btVector3 can be used to represent 3D points and vectors.