Blender
V3.3
|
CollisionWorld is interface and container for the collision detection. More...
#include <btCollisionWorld.h>
Classes | |
struct | AllHitsRayResultCallback |
struct | ClosestConvexResultCallback |
struct | ClosestRayResultCallback |
struct | ContactResultCallback |
ContactResultCallback is used to report contact points. More... | |
struct | ConvexResultCallback |
RayResultCallback is used to report new raycast results. More... | |
struct | LocalConvexResult |
struct | LocalRayResult |
struct | LocalShapeInfo |
struct | RayResultCallback |
RayResultCallback is used to report new raycast results. More... | |
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. More... | |
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) |
CollisionWorld is interface and container for the collision detection.
Definition at line 85 of file btCollisionWorld.h.
btCollisionWorld::btCollisionWorld | ( | btDispatcher * | dispatcher, |
btBroadphaseInterface * | broadphasePairCache, | ||
btCollisionConfiguration * | collisionConfiguration | ||
) |
for debug drawing
Definition at line 67 of file btCollisionWorld.cpp.
|
virtual |
Definition at line 75 of file btCollisionWorld.cpp.
References btBroadphaseProxy, btCollisionObject, btOverlappingPairCache::cleanProxyFromPairs(), btBroadphaseInterface::destroyProxy(), getBroadphase(), btBroadphaseInterface::getOverlappingPairCache(), m_collisionObjects, m_dispatcher1, and btAlignedObjectArray< T >::size().
|
virtual |
Definition at line 124 of file btCollisionWorld.cpp.
References btAssert, btTransform, btVector3, btAlignedObjectArray< T >::findLinearSearch(), getBroadphase(), m_collisionObjects, m_dispatcher1, btAlignedObjectArray< T >::push_back(), btAlignedObjectArray< T >::size(), and type.
Referenced by btSimpleDynamicsWorld::addRigidBody(), btDeformableMultiBodyDynamicsWorld::addSoftBody(), btSoftMultiBodyDynamicsWorld::addSoftBody(), btSoftRigidDynamicsWorld::addSoftBody(), and btCollisionWorldImporter::createCollisionObject().
|
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, btBroadphaseInterface::calculateOverlappingPairs(), m_broadphasePairCache, and m_dispatcher1.
Referenced by performDiscreteCollisionDetection().
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, btDispatcher::findAlgorithm(), btDispatcher::freeCollisionAlgorithm(), getDispatcher(), getDispatchInfo(), btCollisionWorld::ContactResultCallback::m_closestDistanceThreshold, btManifoldResult::m_closestPointDistanceThreshold, btCollisionAlgorithm::processCollision(), and btCollisionAlgorithm::~btCollisionAlgorithm().
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 btBroadphaseInterface::aabbTest(), btVector3, and m_broadphasePairCache.
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, btRayAabb(), btTransform, btVector3, btTransformUtil::calculateVelocity(), m_broadphasePairCache, m_collisionObjects, btCollisionWorld::ConvexResultCallback::needsCollision(), objectQuerySingle(), R, btBroadphaseInterface::rayTest(), and btAlignedObjectArray< T >::size().
Referenced by stepDown(), and stepForwardAndStrafe().
|
virtual |
for polyhedral shapes
Definition at line 1303 of file btCollisionWorld.cpp.
References Freestyle::a, usdtokens::b(), BOX_SHAPE_PROXYTYPE, BT_LARGE_FLOAT, btBoxShape(), btCapsuleShape(), btCollisionShape, btCompoundShape(), btConcaveShape(), btConeShape(), btConvexPolyhedron, btConvexTriangleMeshShape(), btCylinderShape(), btMultiSphereShape(), btPolyhedralConvexShape(), btSphereShape(), btStaticPlaneShape(), btTransform, btVector3, CAPSULE_SHAPE_PROXYTYPE, color, COMPOUND_SHAPE_PROXYTYPE, CONE_SHAPE_PROXYTYPE, CONVEX_TRIANGLEMESH_SHAPE_PROXYTYPE, CYLINDER_SHAPE_PROXYTYPE, btIDebugDraw::DBG_DrawFrames, btIDebugDraw::DBG_DrawNormals, btIDebugDraw::drawBox(), btIDebugDraw::drawCapsule(), btIDebugDraw::drawCone(), btIDebugDraw::drawCylinder(), btIDebugDraw::drawLine(), btIDebugDraw::drawPlane(), btIDebugDraw::drawSphere(), btIDebugDraw::drawTransform(), getDebugDrawer(), height, MULTI_SPHERE_SHAPE_PROXYTYPE, SPHERE_SHAPE_PROXYTYPE, STATIC_PLANE_PROXYTYPE, and v.
Referenced by debugDrawWorld().
|
virtual |
Reimplemented in btDynamicsWorld, and btSimpleDynamicsWorld.
Definition at line 1470 of file btCollisionWorld.cpp.
References ACTIVE_TAG, btCollisionObject, btPersistentManifold(), btVector3, CF_DISABLE_VISUALIZE_OBJECT, btIDebugDraw::clearLines(), CO_RIGID_BODY, color, btIDebugDraw::DBG_DrawAabb, btIDebugDraw::DBG_DrawContactPoints, btIDebugDraw::DBG_DrawWireframe, debugDrawObject(), btIDebugDraw::DefaultColors, DISABLE_DEACTIVATION, DISABLE_SIMULATION, btIDebugDraw::drawAabb(), btIDebugDraw::drawContactPoint(), gContactBreakingThreshold, getDebugDrawer(), btIDebugDraw::getDebugMode(), btIDebugDraw::getDefaultColors(), getDispatcher(), getDispatchInfo(), btManifoldPoint::getDistance(), btManifoldPoint::getLifeTime(), btDispatcher::getManifoldByIndexInternal(), btDispatcher::getNumManifolds(), ISLAND_SLEEPING, m_collisionObjects, m_debugDrawer, btManifoldPoint::m_normalWorldOnB, btManifoldPoint::m_positionWorldOnB, numManifolds, btAlignedObjectArray< T >::size(), and WANTS_DEACTIVATION.
|
inline |
Definition at line 122 of file btCollisionWorld.h.
References m_broadphasePairCache.
|
inline |
Definition at line 117 of file btCollisionWorld.h.
References m_broadphasePairCache.
Referenced by addCollisionObject(), recoverFromPenetration(), refreshBroadphaseProxy(), removeCollisionObject(), btSimpleDynamicsWorld::updateAabbs(), and ~btCollisionWorld().
|
inline |
Definition at line 476 of file btCollisionWorld.h.
References m_collisionObjects.
Referenced by btSimulationIslandManagerMt::addBodiesToIslands(), btSimulationIslandManagerMt::buildAndProcessIslands(), btSimulationIslandManager::buildIslands(), btSimulationIslandManagerMt::buildIslands(), btSimulationIslandManager::processIslands(), btSimpleDynamicsWorld::stepSimulation(), btSimulationIslandManager::storeIslandActivationState(), and btSimulationIslandManager::updateActivationState().
|
inline |
Definition at line 481 of file btCollisionWorld.h.
References m_collisionObjects.
|
inlinevirtual |
Definition at line 155 of file btCollisionWorld.h.
References m_debugDrawer.
Referenced by debugDrawObject(), debugDrawWorld(), and btSimpleDynamicsWorld::stepSimulation().
|
inline |
Definition at line 132 of file btCollisionWorld.h.
References m_dispatcher1.
Referenced by contactPairTest(), debugDrawWorld(), performDiscreteCollisionDetection(), btSingleContactCallback::process(), recoverFromPenetration(), refreshBroadphaseProxy(), and serializeContactManifolds().
|
inline |
Definition at line 137 of file btCollisionWorld.h.
References m_dispatcher1.
|
inline |
Definition at line 490 of file btCollisionWorld.h.
References m_dispatchInfo.
Referenced by btSimulationIslandManager::buildIslands(), contactPairTest(), debugDrawWorld(), performDiscreteCollisionDetection(), btSingleContactCallback::process(), btSimulationIslandManager::processIslands(), recoverFromPenetration(), stepDown(), stepForwardAndStrafe(), btSimpleDynamicsWorld::stepSimulation(), and updateSingleAabb().
|
inline |
Definition at line 495 of file btCollisionWorld.h.
References m_dispatchInfo.
|
inline |
Definition at line 500 of file btCollisionWorld.h.
References m_forceUpdateAllAabbs.
|
inline |
Definition at line 427 of file btCollisionWorld.h.
References m_collisionObjects, and btAlignedObjectArray< T >::size().
Referenced by rayTest(), and btSimpleDynamicsWorld::stepSimulation().
|
inline |
Definition at line 127 of file btCollisionWorld.h.
References btBroadphaseInterface::getOverlappingPairCache(), and m_broadphasePairCache.
Referenced by btSimulationIslandManager::findUnions().
|
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 objectQuerySingleInternal().
Referenced by convexSweepTest(), and btSingleSweepCallback::process().
|
static |
Definition at line 612 of file btCollisionWorld.cpp.
References btCollisionWorld::ConvexResultCallback::addSingleResult(), ATTRIBUTE_ALIGNED16, usdtokens::b(), bounds(), BT_PROFILE, btBroadphaseProxy, btBvhTriangleMeshShape(), btCollisionObject, btCollisionShape, btCompoundShape(), btConcaveShape(), btConvexShape(), btStaticPlaneShape(), btTransform, btTriangleMeshShape(), btVector3, btVoronoiSimplexSolver, btConvexCast::calcTimeOfImpact(), callback, btDbvtNode::dataAsInt, from, btDbvtAabbMm::FromMM(), btCollisionObjectWrapper::getCollisionObject(), btCollisionObjectWrapper::getCollisionShape(), btCollisionObjectWrapper::getWorldTransform(), btConvexCast::CastResult::m_allowedPenetration, btCollisionWorld::ConvexResultCallback::m_closestHitFraction, btConvexCast::CastResult::m_fraction, btConvexCast::CastResult::m_hitPoint, btConvexCast::CastResult::m_normal, btCollisionWorld::LocalShapeInfo::m_shapePart, btCollisionWorld::LocalShapeInfo::m_triangleIndex, btCollisionWorld::ConvexResultCallback::needsCollision(), needsCollision(), NULL, r, result, STATIC_PLANE_PROXYTYPE, tree, and TRIANGLE_MESH_SHAPE_PROXYTYPE.
Referenced by objectQuerySingle().
|
virtual |
Definition at line 221 of file btCollisionWorld.cpp.
References BT_PROFILE, computeOverlappingPairs(), btDispatcher::dispatchAllCollisionPairs(), getDispatcher(), getDispatchInfo(), btBroadphaseInterface::getOverlappingPairCache(), m_broadphasePairCache, m_dispatcher1, and updateAabbs().
Referenced by btSimpleDynamicsWorld::stepSimulation().
|
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 getBroadphaseHandle(), getNumCollisionObjects(), m_broadphasePairCache, m_collisionObjects, btSingleRayCallback::process(), and btBroadphaseInterface::rayTest().
Referenced by btDefaultVehicleRaycaster::castRay().
|
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 rayTestSingleInternal().
Referenced by btSingleRayCallback::process(), btSoftMultiBodyDynamicsWorld::rayTestSingle(), btSoftRigidDynamicsWorld::rayTestSingle(), and btDeformableMultiBodyDynamicsWorld::rayTestSingle().
|
static |
optimized version for btBvhTriangleMeshShape
optimized version for btScaledBvhTriangleMeshShape
optimized version for btHeightfieldTerrainShape
Definition at line 287 of file btCollisionWorld.cpp.
References btCollisionWorld::RayResultCallback::addSingleResult(), usdtokens::b(), btBroadphaseProxy, btBvhTriangleMeshShape(), btCollisionObject, btCollisionShape, btCompoundShape(), btConcaveShape(), btConvexShape(), btHeightfieldTerrainShape(), btScaledBvhTriangleMeshShape(), btSphereShape(), btTransform, btVector3, btVoronoiSimplexSolver, btConvexCast::calcTimeOfImpact(), btDbvtNode::dataAsInt, from, btCollisionObjectWrapper::getCollisionObject(), btCollisionObjectWrapper::getCollisionShape(), btCollisionObjectWrapper::getWorldTransform(), btTriangleRaycastCallback::kF_DisableHeightfieldAccelerator, btTriangleRaycastCallback::kF_UseGjkConvexCastRaytest, btCollisionWorld::RayResultCallback::m_closestHitFraction, btCollisionWorld::RayResultCallback::m_flags, m_flags, btConvexCast::CastResult::m_fraction, btConvexCast::CastResult::m_normal, btDbvt::m_root, btCollisionWorld::LocalShapeInfo::m_shapePart, btCollisionWorld::LocalShapeInfo::m_triangleIndex, btCollisionWorld::RayResultCallback::needsCollision(), needsCollision(), NULL, r, btDbvt::rayTest(), result, SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE, TERRAIN_SHAPE_PROXYTYPE, and TRIANGLE_MESH_SHAPE_PROXYTYPE.
Referenced by rayTestSingle().
|
virtual |
Definition at line 96 of file btCollisionWorld.cpp.
References btTransform, btVector3, btBroadphaseInterface::destroyProxy(), getBroadphase(), getDispatcher(), m_dispatcher1, and type.
|
virtual |
Reimplemented in btSimpleDynamicsWorld.
Definition at line 239 of file btCollisionWorld.cpp.
References btAssert, btBroadphaseProxy, btOverlappingPairCache::cleanProxyFromPairs(), btBroadphaseInterface::destroyProxy(), getBroadphase(), btBroadphaseInterface::getOverlappingPairCache(), m_collisionObjects, m_dispatcher1, btAlignedObjectArray< T >::pop_back(), btAlignedObjectArray< T >::remove(), btAlignedObjectArray< T >::size(), and btAlignedObjectArray< T >::swap().
Referenced by btCollisionWorldImporter::deleteAllData(), btSimpleDynamicsWorld::removeCollisionObject(), btSimpleDynamicsWorld::removeRigidBody(), btDeformableMultiBodyDynamicsWorld::removeSoftBody(), btSoftMultiBodyDynamicsWorld::removeSoftBody(), and btSoftRigidDynamicsWorld::removeSoftBody().
|
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().
|
protected |
keep track of shapes already serialized
Definition at line 1568 of file btCollisionWorld.cpp.
References btCollisionObject, btCollisionShape, CO_COLLISION_OBJECT, btHashMap< Key, Value >::find(), btHashMap< Key, Value >::insert(), m_collisionObjects, and btAlignedObjectArray< T >::size().
Referenced by serialize().
|
protected |
Definition at line 1598 of file btCollisionWorld.cpp.
References btSerializer::allocate(), BT_CONTACTMANIFOLD_CODE, BT_SERIALIZE_CONTACT_MANIFOLDS, btPersistentManifold(), btSerializer::finalizeChunk(), getDispatcher(), btDispatcher::getInternalManifoldPointer(), btDispatcher::getNumManifolds(), btSerializer::getSerializationFlags(), btChunk::m_oldPtr, and numManifolds.
Referenced by serialize().
|
inline |
Definition at line 112 of file btCollisionWorld.h.
References m_broadphasePairCache.
|
inlinevirtual |
Definition at line 150 of file btCollisionWorld.h.
References m_debugDrawer.
Definition at line 504 of file btCollisionWorld.h.
References m_forceUpdateAllAabbs.
|
virtual |
Reimplemented in btSimpleDynamicsWorld.
Definition at line 197 of file btCollisionWorld.cpp.
References BT_PROFILE, btAssert, btCollisionObject, btTransform, m_collisionObjects, m_forceUpdateAllAabbs, btAlignedObjectArray< T >::size(), and updateSingleAabb().
Referenced by performDiscreteCollisionDetection().
void btCollisionWorld::updateSingleAabb | ( | btCollisionObject * | colObj | ) |
Definition at line 153 of file btCollisionWorld.cpp.
References btVector3, CO_RIGID_BODY, DISABLE_SIMULATION, gContactBreakingThreshold, getDispatchInfo(), length2(), m_broadphasePairCache, m_debugDrawer, m_dispatcher1, btIDebugDraw::reportErrorWarning(), and btBroadphaseInterface::setAabb().
Referenced by updateAabbs().
|
protected |
Definition at line 94 of file btCollisionWorld.h.
Referenced by computeOverlappingPairs(), contactTest(), convexSweepTest(), getBroadphase(), getPairCache(), performDiscreteCollisionDetection(), rayTest(), setBroadphase(), and updateSingleAabb().
|
protected |
Definition at line 88 of file btCollisionWorld.h.
Referenced by addCollisionObject(), btSimpleDynamicsWorld::clearForces(), convexSweepTest(), debugDrawWorld(), getCollisionObjectArray(), getNumCollisionObjects(), btSimpleDynamicsWorld::integrateTransforms(), btSimpleDynamicsWorld::predictUnconstraintMotion(), rayTest(), removeCollisionObject(), serializeCollisionObjects(), btSimpleDynamicsWorld::setGravity(), btSimpleDynamicsWorld::synchronizeMotionStates(), updateAabbs(), btSimpleDynamicsWorld::updateAabbs(), and ~btCollisionWorld().
|
protected |
Definition at line 96 of file btCollisionWorld.h.
Referenced by debugDrawWorld(), getDebugDrawer(), setDebugDrawer(), btSimpleDynamicsWorld::stepSimulation(), and updateSingleAabb().
|
protected |
Definition at line 90 of file btCollisionWorld.h.
Referenced by addCollisionObject(), computeOverlappingPairs(), getDispatcher(), performDiscreteCollisionDetection(), refreshBroadphaseProxy(), removeCollisionObject(), btSimpleDynamicsWorld::stepSimulation(), btSimpleDynamicsWorld::updateAabbs(), updateSingleAabb(), and ~btCollisionWorld().
|
protected |
Definition at line 92 of file btCollisionWorld.h.
Referenced by getDispatchInfo().
|
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 getForceUpdateAllAabbs(), setForceUpdateAllAabbs(), and updateAabbs().