Blender V5.0
btCollisionWorld Class Reference

CollisionWorld is interface and container for the collision detection. More...

#include <btCollisionWorld.h>

Inherited by btDynamicsWorld.

Classes

struct  LocalShapeInfo
struct  LocalRayResult
struct  RayResultCallback
 RayResultCallback is used to report new raycast results. More...
struct  ClosestRayResultCallback
struct  AllHitsRayResultCallback
struct  LocalConvexResult
struct  ConvexResultCallback
 RayResultCallback is used to report new raycast results. More...
struct  ClosestConvexResultCallback
struct  ContactResultCallback
 ContactResultCallback is used to report contact points. More...

Public Member Functions

 btCollisionWorld (btDispatcher *dispatcher, btBroadphaseInterface *broadphasePairCache, btCollisionConfiguration *collisionConfiguration)
 for debug drawing
virtual ~btCollisionWorld ()
void setBroadphase (btBroadphaseInterface *pairCache)
const btBroadphaseInterfacegetBroadphase () const
btBroadphaseInterfacegetBroadphase ()
btOverlappingPairCachegetPairCache ()
btDispatchergetDispatcher ()
const btDispatchergetDispatcher () const
void updateSingleAabb (btCollisionObject *colObj)
virtual void updateAabbs ()
virtual void computeOverlappingPairs ()
virtual void setDebugDrawer (btIDebugDraw *debugDrawer)
virtual btIDebugDrawgetDebugDrawer ()
virtual void debugDrawWorld ()
virtual void debugDrawObject (const btTransform &worldTransform, const btCollisionShape *shape, const btVector3 &color)
int getNumCollisionObjects () const
virtual void rayTest (const btVector3 &rayFromWorld, const btVector3 &rayToWorld, RayResultCallback &resultCallback) const
void convexSweepTest (const btConvexShape *castShape, const btTransform &from, const btTransform &to, ConvexResultCallback &resultCallback, btScalar allowedCcdPenetration=btScalar(0.)) const
void contactTest (btCollisionObject *colObj, ContactResultCallback &resultCallback)
void contactPairTest (btCollisionObject *colObjA, btCollisionObject *colObjB, ContactResultCallback &resultCallback)
virtual void addCollisionObject (btCollisionObject *collisionObject, int collisionFilterGroup=btBroadphaseProxy::DefaultFilter, int collisionFilterMask=btBroadphaseProxy::AllFilter)
virtual void refreshBroadphaseProxy (btCollisionObject *collisionObject)
btCollisionObjectArraygetCollisionObjectArray ()
const btCollisionObjectArraygetCollisionObjectArray () const
virtual void removeCollisionObject (btCollisionObject *collisionObject)
virtual void performDiscreteCollisionDetection ()
btDispatcherInfogetDispatchInfo ()
const btDispatcherInfogetDispatchInfo () const
bool getForceUpdateAllAabbs () const
void setForceUpdateAllAabbs (bool forceUpdateAllAabbs)
virtual void serialize (btSerializer *serializer)
 Preliminary serialization test for Bullet 2.76. Loading those files requires a separate parser (Bullet/Demos/SerializeDemo).

Static Public Member Functions

static void rayTestSingle (const btTransform &rayFromTrans, const btTransform &rayToTrans, btCollisionObject *collisionObject, const btCollisionShape *collisionShape, const btTransform &colObjWorldTransform, RayResultCallback &resultCallback)
static void rayTestSingleInternal (const btTransform &rayFromTrans, const btTransform &rayToTrans, const btCollisionObjectWrapper *collisionObjectWrap, RayResultCallback &resultCallback)
static void objectQuerySingle (const btConvexShape *castShape, const btTransform &rayFromTrans, const btTransform &rayToTrans, btCollisionObject *collisionObject, const btCollisionShape *collisionShape, const btTransform &colObjWorldTransform, ConvexResultCallback &resultCallback, btScalar allowedPenetration)
 objectQuerySingle performs a collision detection query and calls the resultCallback. It is used internally by rayTest.
static void objectQuerySingleInternal (const btConvexShape *castShape, const btTransform &convexFromTrans, const btTransform &convexToTrans, const btCollisionObjectWrapper *colObjWrap, ConvexResultCallback &resultCallback, btScalar allowedPenetration)

Protected Member Functions

void serializeCollisionObjects (btSerializer *serializer)
void serializeContactManifolds (btSerializer *serializer)

Protected Attributes

btAlignedObjectArray< btCollisionObject * > m_collisionObjects
btDispatcherm_dispatcher1
btDispatcherInfo m_dispatchInfo
btBroadphaseInterfacem_broadphasePairCache
btIDebugDrawm_debugDrawer
bool m_forceUpdateAllAabbs

Detailed Description

CollisionWorld is interface and container for the collision detection.

Definition at line 85 of file btCollisionWorld.h.

Constructor & Destructor Documentation

◆ btCollisionWorld()

btCollisionWorld::btCollisionWorld ( btDispatcher * dispatcher,
btBroadphaseInterface * broadphasePairCache,
btCollisionConfiguration * collisionConfiguration )

for debug drawing

Definition at line 67 of file btCollisionWorld.cpp.

References m_broadphasePairCache, m_debugDrawer, m_dispatcher1, m_forceUpdateAllAabbs, and true.

Referenced by btDynamicsWorld::btDynamicsWorld().

◆ ~btCollisionWorld()

Member Function Documentation

◆ addCollisionObject()

void btCollisionWorld::addCollisionObject ( btCollisionObject * collisionObject,
int collisionFilterGroup = btBroadphaseProxy::DefaultFilter,
int collisionFilterMask = btBroadphaseProxy::AllFilter )
virtual

◆ computeOverlappingPairs()

void btCollisionWorld::computeOverlappingPairs ( )
virtual

the computeOverlappingPairs is usually already called by performDiscreteCollisionDetection (or stepSimulation) it can be useful to use if you perform ray tests without collision detection/simulation

Definition at line 215 of file btCollisionWorld.cpp.

References BT_PROFILE, m_broadphasePairCache, and m_dispatcher1.

Referenced by performDiscreteCollisionDetection().

◆ contactPairTest()

void btCollisionWorld::contactPairTest ( btCollisionObject * colObjA,
btCollisionObject * colObjB,
ContactResultCallback & resultCallback )

contactTest performs a discrete collision test between two collision objects and calls the resultCallback if overlap if detected. it reports one or more contact points (including the one with deepest penetration)

Definition at line 1243 of file btCollisionWorld.cpp.

References BT_CLOSEST_POINT_ALGORITHMS, btCollisionObject, btDispatcher::findAlgorithm(), btDispatcher::freeCollisionAlgorithm(), getDispatcher(), getDispatchInfo(), btCollisionWorld::ContactResultCallback::m_closestDistanceThreshold, btManifoldResult::m_closestPointDistanceThreshold, btCollisionAlgorithm::processCollision(), and btCollisionAlgorithm::~btCollisionAlgorithm().

◆ contactTest()

void btCollisionWorld::contactTest ( btCollisionObject * colObj,
ContactResultCallback & resultCallback )

contactTest performs a discrete collision test between colObj against all objects in the btCollisionWorld, and calls the resultCallback. it reports one or more contact points for every overlapping object (including the one with deepest penetration)

contactTest performs a discrete collision test against all objects in the btCollisionWorld, and calls the resultCallback. it reports one or more contact points for every overlapping object (including the one with deepest penetration)

Definition at line 1232 of file btCollisionWorld.cpp.

References btCollisionObject, btVector3, and m_broadphasePairCache.

◆ convexSweepTest()

void btCollisionWorld::convexSweepTest ( const btConvexShape * castShape,
const btTransform & from,
const btTransform & to,
ConvexResultCallback & resultCallback,
btScalar allowedCcdPenetration = btScalar(0.) ) const

convexTest performs a swept convex cast on all objects in the btCollisionWorld, and calls the resultCallback This allows for several queries: first hit, all hits, any hit, dependent on the value return by the callback.

use the broadphase to accelerate the search for objects, based on their aabb and for each object with ray-aabb overlap, perform an exact ray test unfortunately the implementation for rayTest and convexSweepTest duplicated, albeit practically identical

Definition at line 1076 of file btCollisionWorld.cpp.

References AabbExpand(), BT_PROFILE, btCollisionObject, btConvexShape(), btRayAabb(), btTransform, btVector3, btTransformUtil::calculateVelocity(), i, m_broadphasePairCache, m_collisionObjects, btCollisionWorld::ConvexResultCallback::needsCollision(), objectQuerySingle(), and R.

Referenced by stepDown(), stepForwardAndStrafe(), and stepUp().

◆ debugDrawObject()

◆ debugDrawWorld()

◆ getBroadphase() [1/2]

btBroadphaseInterface * btCollisionWorld::getBroadphase ( )
inline

Definition at line 122 of file btCollisionWorld.h.

References m_broadphasePairCache.

◆ getBroadphase() [2/2]

◆ getCollisionObjectArray() [1/2]

◆ getCollisionObjectArray() [2/2]

const btCollisionObjectArray & btCollisionWorld::getCollisionObjectArray ( ) const
inline

Definition at line 481 of file btCollisionWorld.h.

References m_collisionObjects.

◆ getDebugDrawer()

virtual btIDebugDraw * btCollisionWorld::getDebugDrawer ( )
inlinevirtual

◆ getDispatcher() [1/2]

◆ getDispatcher() [2/2]

const btDispatcher * btCollisionWorld::getDispatcher ( ) const
inline

Definition at line 137 of file btCollisionWorld.h.

References m_dispatcher1.

◆ getDispatchInfo() [1/2]

◆ getDispatchInfo() [2/2]

const btDispatcherInfo & btCollisionWorld::getDispatchInfo ( ) const
inline

Definition at line 495 of file btCollisionWorld.h.

References m_dispatchInfo.

◆ getForceUpdateAllAabbs()

bool btCollisionWorld::getForceUpdateAllAabbs ( ) const
inline

Definition at line 500 of file btCollisionWorld.h.

References m_forceUpdateAllAabbs.

◆ getNumCollisionObjects()

int btCollisionWorld::getNumCollisionObjects ( ) const
inline

Definition at line 427 of file btCollisionWorld.h.

References m_collisionObjects.

Referenced by rayTest(), and btSimpleDynamicsWorld::stepSimulation().

◆ getPairCache()

btOverlappingPairCache * btCollisionWorld::getPairCache ( )
inline

Definition at line 127 of file btCollisionWorld.h.

References m_broadphasePairCache.

Referenced by btSimulationIslandManager::findUnions().

◆ objectQuerySingle()

void btCollisionWorld::objectQuerySingle ( const btConvexShape * castShape,
const btTransform & rayFromTrans,
const btTransform & rayToTrans,
btCollisionObject * collisionObject,
const btCollisionShape * collisionShape,
const btTransform & colObjWorldTransform,
ConvexResultCallback & resultCallback,
btScalar allowedPenetration )
static

objectQuerySingle performs a collision detection query and calls the resultCallback. It is used internally by rayTest.

Definition at line 602 of file btCollisionWorld.cpp.

References btCollisionObject, btCollisionShape, btConvexShape(), btTransform, and objectQuerySingleInternal().

Referenced by convexSweepTest().

◆ objectQuerySingleInternal()

void btCollisionWorld::objectQuerySingleInternal ( const btConvexShape * castShape,
const btTransform & convexFromTrans,
const btTransform & convexToTrans,
const btCollisionObjectWrapper * colObjWrap,
ConvexResultCallback & resultCallback,
btScalar allowedPenetration )
static

◆ performDiscreteCollisionDetection()

void btCollisionWorld::performDiscreteCollisionDetection ( )
virtual

◆ rayTest()

void btCollisionWorld::rayTest ( const btVector3 & rayFromWorld,
const btVector3 & rayToWorld,
RayResultCallback & resultCallback ) const
virtual

rayTest performs a raycast on all objects in the btCollisionWorld, and calls the resultCallback This allows for several queries: first hit, all hits, any hit, dependent on the value returned by the callback.

use the broadphase to accelerate the search for objects, based on their aabb and for each object with ray-aabb overlap, perform an exact ray test

Definition at line 1004 of file btCollisionWorld.cpp.

References btVector3, getBroadphaseHandle(), getNumCollisionObjects(), i, m_broadphasePairCache, m_collisionObjects, and btSingleRayCallback::process().

◆ rayTestSingle()

void btCollisionWorld::rayTestSingle ( const btTransform & rayFromTrans,
const btTransform & rayToTrans,
btCollisionObject * collisionObject,
const btCollisionShape * collisionShape,
const btTransform & colObjWorldTransform,
RayResultCallback & resultCallback )
static

rayTestSingle performs a raycast call and calls the resultCallback. It is used internally by rayTest. In a future implementation, we consider moving the ray test as a virtual method in btCollisionShape. This allows more customization.

Definition at line 277 of file btCollisionWorld.cpp.

References btCollisionObject, btCollisionShape, btTransform, and rayTestSingleInternal().

Referenced by btDeformableMultiBodyDynamicsWorld::rayTestSingle(), btSoftMultiBodyDynamicsWorld::rayTestSingle(), and btSoftRigidDynamicsWorld::rayTestSingle().

◆ rayTestSingleInternal()

void btCollisionWorld::rayTestSingleInternal ( const btTransform & rayFromTrans,
const btTransform & rayToTrans,
const btCollisionObjectWrapper * collisionObjectWrap,
RayResultCallback & resultCallback )
static

◆ refreshBroadphaseProxy()

void btCollisionWorld::refreshBroadphaseProxy ( btCollisionObject * collisionObject)
virtual

◆ removeCollisionObject()

◆ serialize()

void btCollisionWorld::serialize ( btSerializer * serializer)
virtual

Preliminary serialization test for Bullet 2.76. Loading those files requires a separate parser (Bullet/Demos/SerializeDemo).

Definition at line 1618 of file btCollisionWorld.cpp.

References btSerializer::finishSerialization(), serializeCollisionObjects(), serializeContactManifolds(), and btSerializer::startSerialization().

◆ serializeCollisionObjects()

void btCollisionWorld::serializeCollisionObjects ( btSerializer * serializer)
protected

keep track of shapes already serialized

Definition at line 1568 of file btCollisionWorld.cpp.

References btCollisionObject, btCollisionShape, btHashMap< Key, Value >::find(), i, btHashMap< Key, Value >::insert(), and m_collisionObjects.

Referenced by serialize().

◆ serializeContactManifolds()

◆ setBroadphase()

void btCollisionWorld::setBroadphase ( btBroadphaseInterface * pairCache)
inline

Definition at line 112 of file btCollisionWorld.h.

References m_broadphasePairCache.

◆ setDebugDrawer()

virtual void btCollisionWorld::setDebugDrawer ( btIDebugDraw * debugDrawer)
inlinevirtual

Definition at line 150 of file btCollisionWorld.h.

References m_debugDrawer.

◆ setForceUpdateAllAabbs()

void btCollisionWorld::setForceUpdateAllAabbs ( bool forceUpdateAllAabbs)
inline

Definition at line 504 of file btCollisionWorld.h.

References m_forceUpdateAllAabbs.

◆ updateAabbs()

void btCollisionWorld::updateAabbs ( )
virtual

◆ updateSingleAabb()

Member Data Documentation

◆ m_broadphasePairCache

◆ m_collisionObjects

◆ m_debugDrawer

btIDebugDraw* btCollisionWorld::m_debugDrawer
protected

◆ m_dispatcher1

◆ m_dispatchInfo

btDispatcherInfo btCollisionWorld::m_dispatchInfo
protected

Definition at line 92 of file btCollisionWorld.h.

Referenced by getDispatchInfo(), and getDispatchInfo().

◆ m_forceUpdateAllAabbs

bool btCollisionWorld::m_forceUpdateAllAabbs
protected

m_forceUpdateAllAabbs can be set to false as an optimization to only update active object AABBs it is true by default, because it is error-prone (setting the position of static objects wouldn't update their AABB)

Definition at line 100 of file btCollisionWorld.h.

Referenced by btCollisionWorld(), getForceUpdateAllAabbs(), setForceUpdateAllAabbs(), and updateAabbs().


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