Bullet Collision Detection & Physics Library: btDbvt Struct Reference

Bullet Collision Detection & Physics Library

- Main Page
- Namespaces
- Classes
- Files

- Class List
- Class Hierarchy
- Class Members

Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Private Member Functions | List of all members
btDbvt Struct Reference

The btDbvt class implements a fast dynamic bounding volume tree based on axis aligned bounding boxes (aabb tree). More...

`#include <btDbvt.h>`

Collaboration diagram for btDbvt:
[legend]

## 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

## 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
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 &)

## Detailed Description

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 228 of file btDbvt.h.

## Member Enumeration Documentation

## ◆ anonymous enum

anonymous enum

Enumerator
SIMPLE_STACKSIZE |
DOUBLE_STACKSIZE |

Definition at line 295 of file btDbvt.h.

## Constructor & Destructor Documentation

## ◆ btDbvt() [1/2]

btDbvt::btDbvt | ( |  | ) |

Definition at line 461 of file btDbvt.cpp.

## ◆ ~btDbvt()

btDbvt::~btDbvt | ( |  | ) |

Definition at line 471 of file btDbvt.cpp.

## ◆ btDbvt() [2/2]

btDbvt::btDbvt | ( | const btDbvt & |  | ) |
| inlineprivate

Definition at line 456 of file btDbvt.h.

## Member Function Documentation

## ◆ allocate()

static DBVT_INLINE int btDbvt::allocate | ( | btAlignedObjectArray< int > & | ifree,
|  | btAlignedObjectArray< sStkNPS > & | stock,
|  | const sStkNPS & | value )
| inlinestatic

Definition at line 436 of file btDbvt.h.

## ◆ benchmark()

static void btDbvt::benchmark | ( |  | ) |
| inlinestatic

Definition at line 333 of file btDbvt.h.

## ◆ clear()

void btDbvt::clear | ( |  | ) |

Definition at line 477 of file btDbvt.cpp.

## ◆ clone()

void btDbvt::clone | ( | btDbvt & | dest,
|  | IClone * | iclone = 0 ) const

Definition at line 644 of file btDbvt.cpp.

## ◆ collideKDOP()

DBVT_PREFIX void btDbvt::collideKDOP | ( | const btDbvtNode * | root,
|  | const btVector3 * | normals,
|  | const btScalar * | offsets,
|  | int | count,
|  | DBVT_IPOLICY | )
| inlinestatic

Definition at line 1350 of file btDbvt.h.

## ◆ collideOCL()

DBVT_PREFIX void btDbvt::collideOCL | ( | const btDbvtNode * | root,
|  | const btVector3 * | normals,
|  | const btScalar * | offsets,
|  | const btVector3 & | sortaxis,
|  | int | count,
|  | DBVT_IPOLICY | ,
|  | bool | fullsort = true )
| inlinestatic

Definition at line 1410 of file btDbvt.h.

## ◆ collideTT()

DBVT_PREFIX void btDbvt::collideTT | ( | const btDbvtNode * | root0,
|  | const btDbvtNode * | root1,
|  | DBVT_IPOLICY | )
| inline

Definition at line 822 of file btDbvt.h.

## ◆ collideTTpersistentStack()

DBVT_PREFIX void btDbvt::collideTTpersistentStack | ( | const btDbvtNode * | root0,
|  | const btDbvtNode * | root1,
|  | DBVT_IPOLICY | )
| inline

Definition at line 1015 of file btDbvt.h.

## ◆ collideTU()

DBVT_PREFIX void btDbvt::collideTU | ( | const btDbvtNode * | root,
|  | DBVT_IPOLICY | )
| inlinestatic

Definition at line 1531 of file btDbvt.h.

## ◆ collideTV()

DBVT_PREFIX void btDbvt::collideTV | ( | const btDbvtNode * | root,
|  | const btDbvtVolume & | volume,
|  | DBVT_IPOLICY | ) const
| inline

Definition at line 1148 of file btDbvt.h.

## ◆ collideTVNoStackAlloc()

DBVT_PREFIX void btDbvt::collideTVNoStackAlloc | ( | const btDbvtNode * | root,
|  | const btDbvtVolume & | volume,
|  | btNodeStack & | stack,
|  | DBVT_IPOLICY | ) const
| inline

Definition at line 1189 of file btDbvt.h.

## ◆ countLeaves()

int btDbvt::countLeaves | ( | const btDbvtNode * | node | ) |
| static

Definition at line 684 of file btDbvt.cpp.

## ◆ empty()

bool btDbvt::empty | ( |  | ) | const
| inline

Definition at line 314 of file btDbvt.h.

## ◆ enumLeaves()

DBVT_PREFIX void btDbvt::enumLeaves | ( | const btDbvtNode * | root,
|  | DBVT_IPOLICY | )
| inlinestatic

Definition at line 805 of file btDbvt.h.

## ◆ enumNodes()

DBVT_PREFIX void btDbvt::enumNodes | ( | const btDbvtNode * | root,
|  | DBVT_IPOLICY | )
| inlinestatic

Definition at line 791 of file btDbvt.h.

## ◆ extractLeaves()

void btDbvt::extractLeaves | ( | const btDbvtNode * | node,
|  | btAlignedObjectArray< const btDbvtNode * > & | leaves )
| static

Definition at line 693 of file btDbvt.cpp.

## ◆ insert()

btDbvtNode * btDbvt::insert | ( | const btDbvtVolume & | box,
|  | void * | data )

Definition at line 535 of file btDbvt.cpp.

## ◆ maxdepth()

int btDbvt::maxdepth | ( | const btDbvtNode * | node | ) |
| static

Definition at line 676 of file btDbvt.cpp.

## ◆ nearest()

static DBVT_INLINE int btDbvt::nearest | ( | const int * | i,
|  | const btDbvt::sStkNPS * | a,
|  | btScalar | v,
|  | int | l,
|  | int | h )
| inlinestatic

Definition at line 423 of file btDbvt.h.

## ◆ optimizeBottomUp()

void btDbvt::optimizeBottomUp | ( |  | ) |

Definition at line 489 of file btDbvt.cpp.

## ◆ optimizeIncremental()

void btDbvt::optimizeIncremental | ( | int | passes | ) |

Definition at line 514 of file btDbvt.cpp.

## ◆ optimizeTopDown()

void btDbvt::optimizeTopDown | ( | int | bu_treshold = 128 | ) |

Definition at line 502 of file btDbvt.cpp.

## ◆ rayTest()

DBVT_PREFIX void btDbvt::rayTest | ( | const btDbvtNode * | root,
|  | const btVector3 & | rayFrom,
|  | const btVector3 & | rayTo,
|  | DBVT_IPOLICY | )
| 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

Definition at line 1276 of file btDbvt.h.

## ◆ rayTestInternal()

DBVT_PREFIX void btDbvt::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
| 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

Definition at line 1223 of file btDbvt.h.

## ◆ remove()

void btDbvt::remove | ( | btDbvtNode * | leaf | ) |

Definition at line 611 of file btDbvt.cpp.

## ◆ selfCollideT()

DBVT_PREFIX void btDbvt::selfCollideT | ( | const btDbvntNode * | root,
|  | DBVT_IPOLICY | )
| inline

Definition at line 887 of file btDbvt.h.

## ◆ selfCollideTT()

DBVT_PREFIX void btDbvt::selfCollideTT | ( | const btDbvtNode * | root,
|  | DBVT_IPOLICY | )
| inline

Definition at line 951 of file btDbvt.h.

## ◆ update() [1/5]

void btDbvt::update | ( | btDbvtNode * | leaf,
|  | btDbvtVolume & | volume )

Definition at line 563 of file btDbvt.cpp.

## ◆ update() [2/5]

bool btDbvt::update | ( | btDbvtNode * | leaf,
|  | btDbvtVolume & | volume,
|  | btScalar | margin )

Definition at line 602 of file btDbvt.cpp.

## ◆ update() [3/5]

bool btDbvt::update | ( | btDbvtNode * | leaf,
|  | btDbvtVolume & | volume,
|  | const btVector3 & | velocity )

Definition at line 593 of file btDbvt.cpp.

## ◆ update() [4/5]

bool btDbvt::update | ( | btDbvtNode * | leaf,
|  | btDbvtVolume & | volume,
|  | const btVector3 & | velocity,
|  | btScalar | margin )

Definition at line 583 of file btDbvt.cpp.

## ◆ update() [5/5]

void btDbvt::update | ( | btDbvtNode * | leaf,
|  | int | lookahead = -1 )

Definition at line 544 of file btDbvt.cpp.

## ◆ write()

void btDbvt::write | ( | IWriter * | iwriter | ) | const

Definition at line 619 of file btDbvt.cpp.

## Member Data Documentation

## ◆ m_free

btDbvtNode* btDbvt::m_free

Definition at line 303 of file btDbvt.h.

## ◆ m_leaves

int btDbvt::m_leaves

Definition at line 305 of file btDbvt.h.

## ◆ m_lkhd

int btDbvt::m_lkhd

Definition at line 304 of file btDbvt.h.

## ◆ m_opath

unsigned btDbvt::m_opath

Definition at line 306 of file btDbvt.h.

## ◆ m_root

btDbvtNode* btDbvt::m_root

Definition at line 302 of file btDbvt.h.

## ◆ m_stkStack

btAlignedObjectArray<sStkNN> btDbvt::m_stkStack

Definition at line 308 of file btDbvt.h.

The documentation for this struct was generated from the following files:

- btDbvt.h
- btDbvt.cpp