|
| btDbvt () |
|
| ~btDbvt () |
|
void | clear () |
|
bool | empty () const |
|
void | optimizeBottomUp () |
|
void | optimizeTopDown (int bu_treshold=128) |
|
void | optimizeIncremental (int passes) |
|
btDbvtNode * | insert (const btDbvtVolume &box, void *data) |
|
void | update (btDbvtNode *leaf, int lookahead=-1) |
|
void | update (btDbvtNode *leaf, btDbvtVolume &volume) |
|
bool | update (btDbvtNode *leaf, btDbvtVolume &volume, const btVector3 &velocity, btScalar margin) |
|
bool | update (btDbvtNode *leaf, btDbvtVolume &volume, const btVector3 &velocity) |
|
bool | update (btDbvtNode *leaf, btDbvtVolume &volume, btScalar margin) |
|
void | remove (btDbvtNode *leaf) |
|
void | write (IWriter *iwriter) const |
|
void | clone (btDbvt &dest, IClone *iclone=0) const |
|
DBVT_PREFIX void | collideTT (const btDbvtNode *root0, const btDbvtNode *root1, DBVT_IPOLICY) |
|
DBVT_PREFIX void | collideTTpersistentStack (const btDbvtNode *root0, const btDbvtNode *root1, DBVT_IPOLICY) |
|
DBVT_PREFIX void | collideTV (const btDbvtNode *root, const btDbvtVolume &volume, DBVT_IPOLICY) const |
|
DBVT_PREFIX void | rayTestInternal (const btDbvtNode *root, const btVector3 &rayFrom, const btVector3 &rayTo, const btVector3 &rayDirectionInverse, unsigned int signs[3], btScalar lambda_max, const btVector3 &aabbMin, const btVector3 &aabbMax, DBVT_IPOLICY) const |
| rayTestInternal is faster than rayTest, because it uses a persistent stack (to reduce dynamic memory allocations to a minimum) and it uses precomputed signs/rayInverseDirections rayTestInternal is used by btDbvtBroadphase to accelerate world ray casts More...
|
|
|
static int | maxdepth (const btDbvtNode *node) |
|
static int | countLeaves (const btDbvtNode *node) |
|
static void | extractLeaves (const btDbvtNode *node, btAlignedObjectArray< const btDbvtNode * > &leaves) |
|
static void | benchmark () |
|
static DBVT_PREFIX void | enumNodes (const btDbvtNode *root, DBVT_IPOLICY) |
|
static DBVT_PREFIX void | enumLeaves (const btDbvtNode *root, DBVT_IPOLICY) |
|
static DBVT_PREFIX void | rayTest (const btDbvtNode *root, const btVector3 &rayFrom, const btVector3 &rayTo, DBVT_IPOLICY) |
| rayTest is a re-entrant ray test, and can be called in parallel as long as the btAlignedAlloc is thread-safe (uses locking etc) rayTest is slower than rayTestInternal, because it builds a local stack, using memory allocations, and it recomputes signs/rayDirectionInverses each time More...
|
|
static DBVT_PREFIX void | collideKDOP (const btDbvtNode *root, const btVector3 *normals, const btScalar *offsets, int count, DBVT_IPOLICY) |
|
static DBVT_PREFIX void | collideOCL (const btDbvtNode *root, const btVector3 *normals, const btScalar *offsets, const btVector3 &sortaxis, int count, DBVT_IPOLICY, bool fullsort=true) |
|
static DBVT_PREFIX void | collideTU (const btDbvtNode *root, DBVT_IPOLICY) |
|
static DBVT_INLINE int | nearest (const int *i, const btDbvt::sStkNPS *a, btScalar v, int l, int h) |
|
static DBVT_INLINE int | allocate (btAlignedObjectArray< int > &ifree, btAlignedObjectArray< sStkNPS > &stock, const sStkNPS &value) |
|
The btDbvt class implements a fast dynamic bounding volume tree based on axis aligned bounding boxes (aabb tree).
This btDbvt is used for soft body collision detection and for the btDbvtBroadphase. It has a fast insert, remove and update of nodes. Unlike the btQuantizedBvh, nodes can be dynamically moved around, which allows for change in topology of the underlying data structure.
Definition at line 194 of file btDbvt.h.
rayTest is a re-entrant ray test, and can be called in parallel as long as the btAlignedAlloc is thread-safe (uses locking etc) rayTest is slower than rayTestInternal, because it builds a local stack, using memory allocations, and it recomputes signs/rayDirectionInverses each time
what about division by zero? –> just set rayDirection[i] to INF/BT_LARGE_FLOAT
Definition at line 1007 of file btDbvt.h.