91 collisionObject->setBroadphaseHandle(0);
98 if (collisionObject->getBroadphaseHandle())
100 int collisionFilterGroup = collisionObject->getBroadphaseHandle()->m_collisionFilterGroup;
101 int collisionFilterMask = collisionObject->getBroadphaseHandle()->m_collisionFilterMask;
106 btTransform trans = collisionObject->getWorldTransform();
110 collisionObject->getCollisionShape()->getAabb(trans, minAabb, maxAabb);
112 int type = collisionObject->getCollisionShape()->getShapeType();
113 collisionObject->setBroadphaseHandle(
getBroadphase()->createProxy(
118 collisionFilterGroup,
130 btAssert(collisionObject->getWorldArrayIndex() == -1);
136 btTransform trans = collisionObject->getWorldTransform();
140 collisionObject->getCollisionShape()->getAabb(trans, minAabb, maxAabb);
142 int type = collisionObject->getCollisionShape()->getShapeType();
143 collisionObject->setBroadphaseHandle(
getBroadphase()->createProxy(
148 collisionFilterGroup,
156 colObj->getCollisionShape()->getAabb(colObj->getWorldTransform(), minAabb, maxAabb);
159 minAabb -= contactThreshold;
160 maxAabb += contactThreshold;
162 if (
getDispatchInfo().m_useContinuous && colObj->getInternalType() == btCollisionObject::CO_RIGID_BODY && !colObj->isStaticOrKinematicObject())
165 colObj->getCollisionShape()->getAabb(colObj->getInterpolationWorldTransform(), minAabb2, maxAabb2);
166 minAabb2 -= contactThreshold;
167 maxAabb2 += contactThreshold;
168 minAabb.setMin(minAabb2);
169 maxAabb.setMax(maxAabb2);
175 if (colObj->isStaticObject() || ((maxAabb - minAabb).length2() <
btScalar(1e12)))
185 static bool reportMe =
true;
189 m_debugDrawer->reportErrorWarning(
"Overflow in AABB, object removed from simulation");
190 m_debugDrawer->reportErrorWarning(
"If you can reproduce this, please email bugs@continuousphysics.com\n");
191 m_debugDrawer->reportErrorWarning(
"Please include above information, your Platform, version of OS.\n");
205 btAssert(colObj->getWorldArrayIndex() == i);
223 BT_PROFILE(
"performDiscreteCollisionDetection");
252 collisionObject->setBroadphaseHandle(0);
256 int iObj = collisionObject->getWorldArrayIndex();
274 collisionObject->setWorldArrayIndex(-1);
292 pointShape.setMargin(0.f);
297 if (collisionShape->isConvex())
307 btGjkConvexCast gjkConvexCaster(castShape, convexShape, &simplexSolver);
314 convexCasterPtr = &gjkConvexCaster;
316 convexCasterPtr = &subSimplexConvexCaster;
320 if (convexCaster.
calcTimeOfImpact(rayFromTrans, rayToTrans, colObjWorldTransform, colObjWorldTransform, castResult))
328#ifdef USE_SUBSIMPLEX_CONVEX_CAST
340 bool normalInWorldSpace =
true;
348 if (collisionShape->isConcave())
362 m_resultCallback(resultCallback),
363 m_collisionObject(collisionObject),
364 m_triangleMesh(triangleMesh),
365 m_colObjWorldTransform(colObjWorldTransform)
375 btVector3 hitNormalWorld = m_colObjWorldTransform.getBasis() * hitNormalLocal;
382 bool normalInWorldSpace =
true;
383 return m_resultCallback->
addSingleResult(rayResult, normalInWorldSpace);
387 btTransform worldTocollisionObject = colObjWorldTransform.inverse();
388 btVector3 rayFromLocal = worldTocollisionObject * rayFromTrans.getOrigin();
389 btVector3 rayToLocal = worldTocollisionObject * rayToTrans.getOrigin();
397 BridgeTriangleRaycastCallback rcb(rayFromLocal, rayToLocal, &resultCallback, collisionObjectWrap->
getCollisionObject(), triangleMesh, colObjWorldTransform);
399 triangleMesh->performRaycast(&rcb, rayFromLocal, rayToLocal);
408 btVector3 scale = scaledTriangleMesh->getLocalScaling();
409 btVector3 rayFromLocalScaled = rayFromLocal / scale;
410 btVector3 rayToLocalScaled = rayToLocal / scale;
413 BridgeTriangleRaycastCallback rcb(rayFromLocalScaled, rayToLocalScaled, &resultCallback, collisionObjectWrap->
getCollisionObject(), triangleMesh, colObjWorldTransform);
415 triangleMesh->performRaycast(&rcb, rayFromLocalScaled, rayToLocalScaled);
423 btTransform worldTocollisionObject = colObjWorldTransform.inverse();
424 btVector3 rayFromLocal = worldTocollisionObject * rayFromTrans.getOrigin();
425 btVector3 rayToLocal = worldTocollisionObject * rayToTrans.getOrigin();
427 BridgeTriangleRaycastCallback rcb(rayFromLocal, rayToLocal, &resultCallback, collisionObjectWrap->
getCollisionObject(), heightField, colObjWorldTransform);
429 heightField->performRaycast(&rcb, rayFromLocal, rayToLocal);
436 btTransform worldTocollisionObject = colObjWorldTransform.inverse();
438 btVector3 rayFromLocal = worldTocollisionObject * rayFromTrans.getOrigin();
439 btVector3 rayToLocal = worldTocollisionObject * rayToTrans.getOrigin();
454 m_resultCallback(resultCallback),
455 m_collisionObject(collisionObject),
456 m_triangleMesh(triangleMesh),
457 m_colObjWorldTransform(colObjWorldTransform)
467 btVector3 hitNormalWorld = m_colObjWorldTransform.getBasis() * hitNormalLocal;
474 bool normalInWorldSpace =
true;
475 return m_resultCallback->
addSingleResult(rayResult, normalInWorldSpace);
479 BridgeTriangleRaycastCallback rcb(rayFromLocal, rayToLocal, &resultCallback, collisionObjectWrap->
getCollisionObject(), concaveShape, colObjWorldTransform);
482 btVector3 rayAabbMinLocal = rayFromLocal;
483 rayAabbMinLocal.setMin(rayToLocal);
484 btVector3 rayAabbMaxLocal = rayFromLocal;
485 rayAabbMaxLocal.setMax(rayToLocal);
487 concaveShape->processAllTriangles(&rcb, rayAabbMinLocal, rayAabbMaxLocal);
493 if (collisionShape->isCompound())
501 : m_userCallback(user), m_i(i)
540 m_compoundShape(compoundShape),
541 m_colObjWorldTransform(colObjWorldTransform),
542 m_rayFromTrans(rayFromTrans),
543 m_rayToTrans(rayToTrans),
544 m_resultCallback(resultCallback)
548 void ProcessLeaf(
int i)
550 const btCollisionShape* childCollisionShape = m_compoundShape->getChildShape(i);
551 const btTransform& childTrans = m_compoundShape->getChildTransform(i);
552 btTransform childWorldTrans = m_colObjWorldTransform * childTrans;
557 LocalInfoAdder2 my_cb(i, &m_resultCallback);
573 const btDbvt* dbvt = compoundShape->getDynamicAabbTree();
578 colObjWorldTransform,
582#ifndef DISABLE_DBVT_COMPOUNDSHAPE_RAYCAST_ACCELERATION
585 btVector3 localRayFrom = colObjWorldTransform.inverseTimes(rayFromTrans).getOrigin();
586 btVector3 localRayTo = colObjWorldTransform.inverseTimes(rayToTrans).getOrigin();
592 for (
int i = 0, n = compoundShape->getNumChildShapes(); i < n; ++i)
594 rayCB.ProcessLeaf(i);
619 if (collisionShape->isConvex())
636 if (castPtr->
calcTimeOfImpact(convexFromTrans, convexToTrans, colObjWorldTransform, colObjWorldTransform, castResult))
651 bool normalInWorldSpace =
true;
659 if (collisionShape->isConcave())
665 btTransform worldTocollisionObject = colObjWorldTransform.inverse();
666 btVector3 convexFromLocal = worldTocollisionObject * convexFromTrans.getOrigin();
667 btVector3 convexToLocal = worldTocollisionObject * convexToTrans.getOrigin();
680 m_resultCallback(resultCallback),
681 m_collisionObject(collisionObject),
682 m_triangleMesh(triangleMesh)
691 if (hitFraction <= m_resultCallback->m_closestHitFraction)
699 bool normalInWorldSpace =
true;
701 return m_resultCallback->
addSingleResult(convexResult, normalInWorldSpace);
707 BridgeTriangleConvexcastCallback tccb(castShape, convexFromTrans, convexToTrans, &resultCallback, colObjWrap->
getCollisionObject(), triangleMesh, colObjWorldTransform);
709 tccb.m_allowedPenetration = allowedPenetration;
711 castShape->getAabb(rotationXform, boxMinLocal, boxMaxLocal);
712 triangleMesh->performConvexcast(&tccb, convexFromLocal, convexToLocal, boxMinLocal, boxMaxLocal);
725 if (castPtr->
calcTimeOfImpact(convexFromTrans, convexToTrans, colObjWorldTransform, colObjWorldTransform, castResult))
740 bool normalInWorldSpace =
true;
750 btTransform worldTocollisionObject = colObjWorldTransform.inverse();
751 btVector3 convexFromLocal = worldTocollisionObject * convexFromTrans.getOrigin();
752 btVector3 convexToLocal = worldTocollisionObject * convexToTrans.getOrigin();
765 m_resultCallback(resultCallback),
766 m_collisionObject(collisionObject),
767 m_triangleMesh(triangleMesh)
776 if (hitFraction <= m_resultCallback->m_closestHitFraction)
784 bool normalInWorldSpace =
true;
786 return m_resultCallback->
addSingleResult(convexResult, normalInWorldSpace);
792 BridgeTriangleConvexcastCallback tccb(castShape, convexFromTrans, convexToTrans, &resultCallback, colObjWrap->
getCollisionObject(), concaveShape, colObjWorldTransform);
794 tccb.m_allowedPenetration = allowedPenetration;
796 castShape->getAabb(rotationXform, boxMinLocal, boxMaxLocal);
798 btVector3 rayAabbMinLocal = convexFromLocal;
799 rayAabbMinLocal.setMin(convexToLocal);
800 btVector3 rayAabbMaxLocal = convexFromLocal;
801 rayAabbMaxLocal.setMax(convexToLocal);
802 rayAabbMinLocal += boxMinLocal;
803 rayAabbMaxLocal += boxMaxLocal;
804 concaveShape->processAllTriangles(&tccb, rayAabbMinLocal, rayAabbMaxLocal);
810 if (collisionShape->isCompound())
823 : m_colObjWrap(colObjWrap),
824 m_castShape(castShape),
825 m_convexFromTrans(convexFromTrans),
826 m_convexToTrans(convexToTrans),
827 m_allowedPenetration(allowedPenetration),
828 m_compoundShape(compoundShape),
829 m_colObjWorldTransform(colObjWorldTransform),
830 m_resultCallback(resultCallback)
846 btTransform childWorldTrans = m_colObjWorldTransform * childTrans;
854 : m_userCallback(user), m_i(i)
875 LocalInfoAdder my_cb(index, &m_resultCallback);
887 btTransform childTrans = m_compoundShape->getChildTransform(index);
888 const btCollisionShape* childCollisionShape = m_compoundShape->getChildShape(index);
890 ProcessChild(index, childTrans, childCollisionShape);
897 btVector3 fromLocalAabbMin, fromLocalAabbMax;
898 btVector3 toLocalAabbMin, toLocalAabbMax;
900 castShape->getAabb(colObjWorldTransform.inverse() * convexFromTrans, fromLocalAabbMin, fromLocalAabbMax);
901 castShape->getAabb(colObjWorldTransform.inverse() * convexToTrans, toLocalAabbMin, toLocalAabbMax);
903 fromLocalAabbMin.setMin(toLocalAabbMin);
904 fromLocalAabbMax.setMax(toLocalAabbMax);
907 allowedPenetration, compoundShape, colObjWorldTransform, resultCallback);
909 const btDbvt*
tree = compoundShape->getDynamicAabbTree();
918 for (i = 0; i < compoundShape->getNumChildShapes(); i++)
920 const btCollisionShape* childCollisionShape = compoundShape->getChildShape(i);
921 btTransform childTrans = compoundShape->getChildTransform(i);
922 callback.ProcessChild(i, childTrans, childCollisionShape);
952 btVector3 rayDir = (rayToWorld - rayFromWorld);
975 if (
m_resultCallback.needsCollision(collisionObject->getBroadphaseHandle()))
980#ifdef RECALCULATE_AABB
981 btVector3 collisionObjectAabbMin,collisionObjectAabbMax;
982 collisionObject->getCollisionShape()->getAabb(collisionObject->getWorldTransform(),collisionObjectAabbMin,collisionObjectAabbMax);
985 const btVector3& collisionObjectAabbMin = collisionObject->getBroadphaseHandle()->m_aabbMin;
986 const btVector3& collisionObjectAabbMax = collisionObject->getBroadphaseHandle()->m_aabbMax;
995 collisionObject->getCollisionShape(),
996 collisionObject->getWorldTransform(),
1011#ifndef USE_BRUTEFORCE_RAYBROADPHASE
1040 btVector3 rayDir = unnormalizedRayDir.normalized();
1061 if (
m_resultCallback.needsCollision(collisionObject->getBroadphaseHandle()))
1066 collisionObject->getCollisionShape(),
1067 collisionObject->getWorldTransform(),
1084 convexFromTrans = convexFromWorld;
1085 convexToTrans = convexToWorld;
1086 btVector3 castShapeAabbMin, castShapeAabbMax;
1092 zeroLinVel.setValue(0, 0, 0);
1095 R.setRotation(convexFromTrans.getRotation());
1096 castShape->calculateTemporalAabb(
R, zeroLinVel, angVel, 1.0f, castShapeAabbMin, castShapeAabbMax);
1099#ifndef USE_BRUTEFORCE_RAYBROADPHASE
1101 btSingleSweepCallback convexCB(castShape, convexFromWorld, convexToWorld,
this, resultCallback, allowedCcdPenetration);
1103 m_broadphasePairCache->rayTest(convexFromTrans.getOrigin(), convexToTrans.getOrigin(), convexCB, castShapeAabbMin, castShapeAabbMax);
1113 if (resultCallback.
needsCollision(collisionObject->getBroadphaseHandle()))
1116 btVector3 collisionObjectAabbMin, collisionObjectAabbMax;
1117 collisionObject->getCollisionShape()->getAabb(collisionObject->getWorldTransform(), collisionObjectAabbMin, collisionObjectAabbMax);
1118 AabbExpand(collisionObjectAabbMin, collisionObjectAabbMax, castShapeAabbMin, castShapeAabbMax);
1121 if (
btRayAabb(convexFromWorld.getOrigin(), convexToWorld.getOrigin(), collisionObjectAabbMin, collisionObjectAabbMax, hitLambda, hitNormal))
1125 collisionObject->getCollisionShape(),
1126 collisionObject->getWorldTransform(),
1128 allowedCcdPenetration);
1148 btVector3 pointA = pointInWorld + normalOnBInWorld * depth;
1153 localA =
m_body1Wrap->getCollisionObject()->getWorldTransform().invXform(pointA);
1154 localB =
m_body0Wrap->getCollisionObject()->getWorldTransform().invXform(pointInWorld);
1158 localA =
m_body0Wrap->getCollisionObject()->getWorldTransform().invXform(pointA);
1159 localB =
m_body1Wrap->getCollisionObject()->getWorldTransform().invXform(pointInWorld);
1209 if (
m_resultCallback.needsCollision(collisionObject->getBroadphaseHandle()))
1212 btCollisionObjectWrapper ob1(0, collisionObject->getCollisionShape(), collisionObject, collisionObject->getWorldTransform(), -1, -1);
1223 m_world->getDispatcher()->freeCollisionAlgorithm(algorithm);
1235 colObj->getCollisionShape()->getAabb(colObj->getWorldTransform(), aabbMin, aabbMax);
1270 m_worldTrans(worldTrans)
1282 (void)triangleIndex;
1285 wv0 = m_worldTrans * triangle[0];
1286 wv1 = m_worldTrans * triangle[1];
1287 wv2 = m_worldTrans * triangle[2];
1295 m_debugDrawer->drawLine(center, center + normal, normalColor);
1297 m_debugDrawer->drawLine(wv0, wv1, m_color);
1298 m_debugDrawer->drawLine(wv1, wv2, m_color);
1299 m_debugDrawer->drawLine(wv2, wv0, m_color);
1314 for (
int i = compoundShape->getNumChildShapes() - 1; i >= 0; i--)
1316 btTransform childTrans = compoundShape->getChildTransform(i);
1323 switch (shape->getShapeType())
1328 btVector3 halfExtents = boxShape->getHalfExtentsWithMargin();
1336 btScalar radius = sphereShape->getMargin();
1346 childTransform.setIdentity();
1348 for (
int i = multiSphereShape->getSphereCount() - 1; i >= 0; i--)
1350 childTransform.setOrigin(multiSphereShape->getSpherePosition(i));
1360 btScalar radius = capsuleShape->getRadius();
1361 btScalar halfHeight = capsuleShape->getHalfHeight();
1363 int upAxis = capsuleShape->getUpAxis();
1370 btScalar radius = coneShape->getRadius();
1371 btScalar height = coneShape->getHeight();
1373 int upAxis = coneShape->getConeUpIndex();
1380 int upAxis = cylinder->getUpAxis();
1381 btScalar radius = cylinder->getRadius();
1382 btScalar halfHeight = cylinder->getHalfExtentsWithMargin()[upAxis];
1390 btScalar planeConst = staticPlaneShape->getPlaneConstant();
1391 const btVector3& planeNormal = staticPlaneShape->getPlaneNormal();
1398 if (shape->isPolyhedral())
1403 if (polyshape->getConvexPolyhedron())
1406 for (i = 0; i < poly->m_faces.size(); i++)
1409 int numVerts = poly->m_faces[i].m_indices.size();
1412 int lastV = poly->m_faces[i].m_indices[numVerts - 1];
1413 for (
int v = 0;
v < poly->m_faces[i].m_indices.size();
v++)
1415 int curVert = poly->m_faces[i].m_indices[
v];
1416 centroid += poly->m_vertices[curVert];
1425 btVector3 faceNormal(poly->m_faces[i].m_plane[0], poly->m_faces[i].m_plane[1], poly->m_faces[i].m_plane[2]);
1426 getDebugDrawer()->
drawLine(worldTransform * centroid, worldTransform * (centroid + faceNormal), normalColor);
1432 for (i = 0; i < polyshape->getNumEdges(); i++)
1435 polyshape->getEdge(i, a,
b);
1443 if (shape->isConcave())
1452 concaveMesh->processAllTriangles(&drawCallback, aabbMin, aabbMax);
1463 convexMesh->getMeshInterface()->InternalProcessAllTriangles(&drawCallback, aabbMin, aabbMax);
1490 int numContacts = contactManifold->getNumContacts();
1491 for (
int j = 0; j < numContacts; j++)
1507 if ((colObj->getCollisionFlags() & btCollisionObject::CF_DISABLE_VISUALIZE_OBJECT) == 0)
1513 switch (colObj->getActivationState())
1516 color = defaultColors.m_activeObject;
1519 color = defaultColors.m_deactivatedObject;
1522 color = defaultColors.m_wantsDeactivationObject;
1525 color = defaultColors.m_disabledDeactivationObject;
1528 color = defaultColors.m_disabledSimulationObject;
1536 colObj->getCustomDebugColor(
color);
1543 btVector3 colorvec = defaultColors.m_aabb;
1544 colObj->getCollisionShape()->getAabb(colObj->getWorldTransform(), minAabb, maxAabb);
1546 minAabb -= contactThreshold;
1547 maxAabb += contactThreshold;
1551 if (
getDispatchInfo().m_useContinuous && colObj->getInternalType() == btCollisionObject::CO_RIGID_BODY && !colObj->isStaticOrKinematicObject())
1553 colObj->getCollisionShape()->getAabb(colObj->getInterpolationWorldTransform(), minAabb2, maxAabb2);
1554 minAabb2 -= contactThreshold;
1555 maxAabb2 += contactThreshold;
1556 minAabb.setMin(minAabb2);
1557 maxAabb.setMax(maxAabb2);
1580 if (!serializedShapes.
find(shape))
1582 serializedShapes.
insert(shape, shape);
1583 shape->serializeSingleShape(serializer);
1591 if (colObj->getInternalType() == btCollisionObject::CO_COLLISION_OBJECT)
1593 colObj->serializeSingleObject(serializer);
1608 if (manifold->getNumContacts() == 0)
1611 btChunk* chunk = serializer->
allocate(manifold->calculateSerializeBufferSize(), 1);
1612 const char* structType = manifold->serialize(manifold, chunk->
m_oldPtr, serializer);
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Gabor Generate Gabor noise Gradient Generate interpolated color and intensity values based on the input vector Magic Generate a psychedelic color texture Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a or normal between world
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Brightness Control the brightness and contrast of the input color Vector Map input vector components with curves Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert Invert a color
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE bool btRayAabb(const btVector3 &rayFrom, const btVector3 &rayTo, const btVector3 &aabbMin, const btVector3 &aabbMax, btScalar ¶m, btVector3 &normal)
SIMD_FORCE_INLINE void AabbExpand(btVector3 &aabbMin, btVector3 &aabbMax, const btVector3 &expansionMin, const btVector3 &expansionMax)
btBoxShape(const btVector3 &boxHalfExtents)
@ CONVEX_TRIANGLEMESH_SHAPE_PROXYTYPE
@ COMPOUND_SHAPE_PROXYTYPE
@ SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE
@ TRIANGLE_MESH_SHAPE_PROXYTYPE
@ TERRAIN_SHAPE_PROXYTYPE
@ MULTI_SPHERE_SHAPE_PROXYTYPE
@ CYLINDER_SHAPE_PROXYTYPE
@ CAPSULE_SHAPE_PROXYTYPE
btBvhTriangleMeshShape(btStridingMeshInterface *meshInterface, bool useQuantizedAabbCompression, bool buildBvh=true)
btCapsuleShape()
only used for btCapsuleShapeZ and btCapsuleShapeX subclasses.
SIMD_FORCE_INLINE btBroadphaseProxy * getBroadphaseHandle()
#define DISABLE_DEACTIVATION
#define WANTS_DEACTIVATION
#define DISABLE_SIMULATION
btCollisionShape
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
btCompoundShape(bool enableDynamicAabbTree=true, const int initialChildCapacity=0)
btConeShape(btScalar radius, btScalar height)
btScalar gContactBreakingThreshold
btConvexShape()
not supported on IBM SDK, until we fix the alignment of btVector3
btConvexTriangleMeshShape(btStridingMeshInterface *meshInterface, bool calcAabb=true)
btCylinderShape(const btVector3 &halfExtents)
static btDbvtVolume bounds(btDbvtNode **leaves, int count)
btDbvtAabbMm btDbvtVolume
@ BT_CLOSEST_POINT_ALGORITHMS
btHeightfieldTerrainShape(int heightStickWidth, int heightStickLength, const void *heightfieldData, btScalar heightScale, btScalar minHeight, btScalar maxHeight, int upAxis, PHY_ScalarType heightDataType, bool flipQuadEdges)
preferred constructor
virtual bool needsCollision(const btCollisionObject *body0, const btCollisionObject *body1)
btMultiSphereShape(const btVector3 *positions, const btScalar *radi, int numSpheres)
btPolyhedralConvexShape()
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
#define ATTRIBUTE_ALIGNED16(a)
btScaledBvhTriangleMeshShape(btBvhTriangleMeshShape *childShape, const btVector3 &localScaling)
btSequentialImpulseConstraintSolverMt int btPersistentManifold int numManifolds
@ BT_SERIALIZE_CONTACT_MANIFOLDS
#define BT_CONTACTMANIFOLD_CODE
btSphereShape(btScalar radius)
btStaticPlaneShape(const btVector3 &planeNormal, btScalar planeConstant)
btTriangleMeshShape(btStridingMeshInterface *meshInterface)
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
virtual void internalProcessTriangleIndex(btVector3 *triangle, int partId, int triangleIndex)
virtual void processTriangle(btVector3 *triangle, int partId, int triangleIndex)
DebugDrawcallback(btIDebugDraw *debugDrawer, const btTransform &worldTrans, const btVector3 &color)
virtual void setAabb(btBroadphaseProxy *proxy, const btVector3 &aabbMin, const btVector3 &aabbMax, btDispatcher *dispatcher)=0
virtual void destroyProxy(btBroadphaseProxy *proxy, btDispatcher *dispatcher)=0
virtual btOverlappingPairCache * getOverlappingPairCache()=0
virtual void processCollision(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut)=0
virtual ~btCollisionAlgorithm()
CollisionWorld is interface and container for the collision detection.
virtual void rayTest(const btVector3 &rayFromWorld, const btVector3 &rayToWorld, RayResultCallback &resultCallback) const
virtual void updateAabbs()
btDispatcher * getDispatcher()
btDispatcherInfo & getDispatchInfo()
virtual void serialize(btSerializer *serializer)
Preliminary serialization test for Bullet 2.76. Loading those files requires a separate parser (Bulle...
virtual void debugDrawWorld()
static void objectQuerySingleInternal(const btConvexShape *castShape, const btTransform &convexFromTrans, const btTransform &convexToTrans, const btCollisionObjectWrapper *colObjWrap, ConvexResultCallback &resultCallback, btScalar allowedPenetration)
virtual btIDebugDraw * getDebugDrawer()
virtual ~btCollisionWorld()
virtual void refreshBroadphaseProxy(btCollisionObject *collisionObject)
btBroadphaseInterface * m_broadphasePairCache
void updateSingleAabb(btCollisionObject *colObj)
virtual void removeCollisionObject(btCollisionObject *collisionObject)
virtual void addCollisionObject(btCollisionObject *collisionObject, int collisionFilterGroup=btBroadphaseProxy::DefaultFilter, int collisionFilterMask=btBroadphaseProxy::AllFilter)
btAlignedObjectArray< btCollisionObject * > m_collisionObjects
btCollisionWorld(btDispatcher *dispatcher, btBroadphaseInterface *broadphasePairCache, btCollisionConfiguration *collisionConfiguration)
for debug drawing
int getNumCollisionObjects() const
virtual void performDiscreteCollisionDetection()
static void rayTestSingleInternal(const btTransform &rayFromTrans, const btTransform &rayToTrans, const btCollisionObjectWrapper *collisionObjectWrap, RayResultCallback &resultCallback)
void convexSweepTest(const btConvexShape *castShape, const btTransform &from, const btTransform &to, ConvexResultCallback &resultCallback, btScalar allowedCcdPenetration=btScalar(0.)) const
bool m_forceUpdateAllAabbs
btIDebugDraw * m_debugDrawer
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....
btDispatcher * m_dispatcher1
void contactPairTest(btCollisionObject *colObjA, btCollisionObject *colObjB, ContactResultCallback &resultCallback)
void serializeContactManifolds(btSerializer *serializer)
virtual void debugDrawObject(const btTransform &worldTransform, const btCollisionShape *shape, const btVector3 &color)
static void rayTestSingle(const btTransform &rayFromTrans, const btTransform &rayToTrans, btCollisionObject *collisionObject, const btCollisionShape *collisionShape, const btTransform &colObjWorldTransform, RayResultCallback &resultCallback)
const btBroadphaseInterface * getBroadphase() const
void contactTest(btCollisionObject *colObj, ContactResultCallback &resultCallback)
void serializeCollisionObjects(btSerializer *serializer)
virtual void computeOverlappingPairs()
btConvexCast is an interface for Casting
virtual bool calcTimeOfImpact(const btTransform &fromA, const btTransform &toA, const btTransform &fromB, const btTransform &toB, CastResult &result)=0
cast a convex against another convex object
virtual int getNumManifolds() const =0
virtual btPersistentManifold * getManifoldByIndexInternal(int index)=0
virtual void dispatchAllCollisionPairs(btOverlappingPairCache *pairCache, const btDispatcherInfo &dispatchInfo, btDispatcher *dispatcher)=0
virtual void freeCollisionAlgorithm(void *ptr)=0
virtual btCollisionAlgorithm * findAlgorithm(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, btPersistentManifold *sharedManifold, ebtDispatcherQueryType queryType)=0
virtual btPersistentManifold ** getInternalManifoldPointer()=0
GjkConvexCast performs a raycast on a convex object using support mapping.
void insert(const Key &key, const Value &value)
const Value * find(const Key &key) const
virtual void drawCone(btScalar radius, btScalar height, int upAxis, const btTransform &transform, const btVector3 &color)
virtual void drawPlane(const btVector3 &planeNormal, btScalar planeConst, const btTransform &transform, const btVector3 &color)
virtual void drawLine(const btVector3 &from, const btVector3 &to, const btVector3 &color)=0
virtual void drawSphere(btScalar radius, const btTransform &transform, const btVector3 &color)
virtual void clearLines()
virtual void drawTransform(const btTransform &transform, btScalar orthoLen)
virtual void drawContactPoint(const btVector3 &PointOnB, const btVector3 &normalOnB, btScalar distance, int lifeTime, const btVector3 &color)=0
virtual void drawBox(const btVector3 &bbMin, const btVector3 &bbMax, const btVector3 &color)
virtual void drawCylinder(btScalar radius, btScalar halfHeight, int upAxis, const btTransform &transform, const btVector3 &color)
virtual DefaultColors getDefaultColors() const
virtual void drawCapsule(btScalar radius, btScalar halfHeight, int upAxis, const btTransform &transform, const btVector3 &color)
btScalar getDistance() const
btVector3 m_positionWorldOnA
m_positionWorldOnA is redundant information, see getPositionWorldOnA(), but for clarity
btVector3 m_normalWorldOnB
btVector3 m_positionWorldOnB
const btCollisionObjectWrapper * m_body0Wrap
const btCollisionObjectWrapper * m_body1Wrap
btScalar m_closestPointDistanceThreshold
btPersistentManifold * m_manifoldPtr
virtual void cleanProxyFromPairs(btBroadphaseProxy *proxy, btDispatcher *dispatcher)=0
virtual btChunk * allocate(size_t size, int numElements)=0
virtual int getSerializationFlags() const =0
virtual void finishSerialization()=0
virtual void startSerialization()=0
virtual void finalizeChunk(btChunk *chunk, const char *structType, int chunkCode, void *oldPtr)=0
@ kF_DisableHeightfieldAccelerator
@ kF_UseGjkConvexCastRaytest
local_group_size(16, 16) .push_constant(Type b
ccl_device_inline float cross(const float2 a, const float2 b)
btCollisionWorld::ContactResultCallback & m_resultCallback
virtual void addContactPoint(const btVector3 &normalOnBInWorld, const btVector3 &pointInWorld, btScalar depth)
btBridgedManifoldResult(const btCollisionObjectWrapper *obj0Wrap, const btCollisionObjectWrapper *obj1Wrap, btCollisionWorld::ContactResultCallback &resultCallback)
btVector3 m_rayDirectionInverse
added some cached data to accelerate ray-AABB tests
btBroadphaseRayCallback()
SIMD_FORCE_INLINE const btCollisionShape * getCollisionShape() const
SIMD_FORCE_INLINE const btTransform & getWorldTransform() const
SIMD_FORCE_INLINE const btCollisionObject * getCollisionObject() const
RayResultCallback is used to report new raycast results.
virtual bool needsCollision(btBroadphaseProxy *proxy0) const
btScalar m_closestHitFraction
virtual btScalar addSingleResult(LocalConvexResult &convexResult, bool normalInWorldSpace)=0
LocalShapeInfo * m_localShapeInfo
LocalShapeInfo * m_localShapeInfo
RayResultCallback is used to report new raycast results.
btScalar m_closestHitFraction
virtual bool needsCollision(btBroadphaseProxy *proxy0) const
virtual btScalar addSingleResult(LocalRayResult &rayResult, bool normalInWorldSpace)=0
btScalar m_allowedPenetration
static btDbvtAabbMm FromMM(const btVector3 &mi, const btVector3 &mx)
static DBVT_PREFIX void rayTest(const btDbvtNode *root, const btVector3 &rayFrom, const btVector3 &rayTo, DBVT_IPOLICY)
const btCollisionWorld * m_world
btTransform m_rayFromTrans
virtual bool process(const btBroadphaseProxy *proxy)
btSingleRayCallback(const btVector3 &rayFromWorld, const btVector3 &rayToWorld, const btCollisionWorld *world, btCollisionWorld::RayResultCallback &resultCallback)
btCollisionWorld::RayResultCallback & m_resultCallback
const btConvexShape * m_castShape
btTransform m_convexToTrans
virtual bool process(const btBroadphaseProxy *proxy)
const btCollisionWorld * m_world
btTransform m_convexFromTrans
btCollisionWorld::ConvexResultCallback & m_resultCallback
btScalar m_allowedCcdPenetration
btSingleSweepCallback(const btConvexShape *castShape, const btTransform &convexFromTrans, const btTransform &convexToTrans, const btCollisionWorld *world, btCollisionWorld::ConvexResultCallback &resultCallback, btScalar allowedPenetration)