Bullet Collision Detection & Physics Library
|
The btDbvt class implements a fast dynamic bounding volume tree based on axis aligned bounding boxes (aabb tree). More...
#include <btDbvt.h>
Classes | |
struct | IClone |
struct | ICollide |
struct | IWriter |
struct | sStkCLN |
struct | sStkNN |
struct | sStknNN |
struct | sStkNP |
struct | sStkNPS |
Public Types | |
enum | { SIMPLE_STACKSIZE = 64 , DOUBLE_STACKSIZE = SIMPLE_STACKSIZE * 2 } |
Public Member Functions | |
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 | selfCollideT (const btDbvntNode *root, DBVT_IPOLICY) |
DBVT_PREFIX void | selfCollideTT (const btDbvtNode *root, 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 | collideTVNoStackAlloc (const btDbvtNode *root, const btDbvtVolume &volume, btNodeStack &stack, 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, btAlignedObjectArray< const btDbvtNode * > &stack, 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 Public Member Functions | |
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) |
Public Attributes | |
btDbvtNode * | m_root |
btDbvtNode * | m_free |
int | m_lkhd |
int | m_leaves |
unsigned | m_opath |
btAlignedObjectArray< sStkNN > | m_stkStack |
Private Member Functions | |
btDbvt (const btDbvt &) | |
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.
btDbvt::btDbvt | ( | ) |
Definition at line 461 of file btDbvt.cpp.
btDbvt::~btDbvt | ( | ) |
Definition at line 471 of file btDbvt.cpp.
|
inlinestatic |
void btDbvt::clear | ( | ) |
Definition at line 477 of file btDbvt.cpp.
Definition at line 644 of file btDbvt.cpp.
|
inlinestatic |
|
inlinestatic |
|
inline |
|
inline |
|
inlinestatic |
|
inline |
|
inline |
|
static |
Definition at line 684 of file btDbvt.cpp.
|
inlinestatic |
|
inlinestatic |
|
static |
Definition at line 693 of file btDbvt.cpp.
btDbvtNode * btDbvt::insert | ( | const btDbvtVolume & | box, |
void * | data | ||
) |
Definition at line 535 of file btDbvt.cpp.
|
static |
Definition at line 676 of file btDbvt.cpp.
|
inlinestatic |
void btDbvt::optimizeBottomUp | ( | ) |
Definition at line 489 of file btDbvt.cpp.
void btDbvt::optimizeIncremental | ( | int | passes | ) |
Definition at line 514 of file btDbvt.cpp.
void btDbvt::optimizeTopDown | ( | int | bu_treshold = 128 | ) |
Definition at line 502 of file btDbvt.cpp.
|
inlinestatic |
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
|
inline |
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
void btDbvt::remove | ( | btDbvtNode * | leaf | ) |
Definition at line 611 of file btDbvt.cpp.
|
inline |
|
inline |
void btDbvt::update | ( | btDbvtNode * | leaf, |
btDbvtVolume & | volume | ||
) |
Definition at line 563 of file btDbvt.cpp.
bool btDbvt::update | ( | btDbvtNode * | leaf, |
btDbvtVolume & | volume, | ||
btScalar | margin | ||
) |
Definition at line 602 of file btDbvt.cpp.
bool btDbvt::update | ( | btDbvtNode * | leaf, |
btDbvtVolume & | volume, | ||
const btVector3 & | velocity | ||
) |
Definition at line 593 of file btDbvt.cpp.
bool btDbvt::update | ( | btDbvtNode * | leaf, |
btDbvtVolume & | volume, | ||
const btVector3 & | velocity, | ||
btScalar | margin | ||
) |
Definition at line 583 of file btDbvt.cpp.
void btDbvt::update | ( | btDbvtNode * | leaf, |
int | lookahead = -1 |
||
) |
Definition at line 544 of file btDbvt.cpp.
void btDbvt::write | ( | IWriter * | iwriter | ) | const |
Definition at line 619 of file btDbvt.cpp.
btDbvtNode* btDbvt::m_free |
btDbvtNode* btDbvt::m_root |
btAlignedObjectArray<sStkNN> btDbvt::m_stkStack |