68 : m_dispatcher1(dispatcher),
69 m_broadphasePairCache(pairCache),
71 m_forceUpdateAllAabbs(true)
118 collisionFilterGroup,
148 collisionFilterGroup,
159 minAabb -= contactThreshold;
160 maxAabb += contactThreshold;
166 minAabb2 -= contactThreshold;
167 maxAabb2 += contactThreshold;
185 static bool reportMe =
true;
223 BT_PROFILE(
"performDiscreteCollisionDetection");
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
331 #endif //USE_SUBSIMPLEX_CONVEX_CAST
340 bool normalInWorldSpace =
true;
362 m_resultCallback(resultCallback),
363 m_collisionObject(collisionObject),
364 m_triangleMesh(triangleMesh),
365 m_colObjWorldTransform(colObjWorldTransform)
382 bool normalInWorldSpace =
true;
383 return m_resultCallback->
addSingleResult(rayResult, normalInWorldSpace);
397 BridgeTriangleRaycastCallback rcb(rayFromLocal, rayToLocal, &resultCallback, collisionObjectWrap->
getCollisionObject(), triangleMesh, colObjWorldTransform);
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);
427 BridgeTriangleRaycastCallback rcb(rayFromLocal, rayToLocal, &resultCallback, collisionObjectWrap->
getCollisionObject(), heightField, colObjWorldTransform);
454 m_resultCallback(resultCallback),
455 m_collisionObject(collisionObject),
456 m_triangleMesh(triangleMesh),
457 m_colObjWorldTransform(colObjWorldTransform)
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);
501 : m_userCallback(user), m_i(i)
504 m_flags = m_userCallback->
m_flags;
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)
552 btTransform childWorldTrans = m_colObjWorldTransform * childTrans;
557 LocalInfoAdder2 my_cb(i, &m_resultCallback);
572 const btCompoundShape* compoundShape = static_cast<const btCompoundShape*>(collisionShape);
578 colObjWorldTransform,
582 #ifndef DISABLE_DBVT_COMPOUNDSHAPE_RAYCAST_ACCELERATION
585 btVector3 localRayFrom = colObjWorldTransform.inverseTimes(rayFromTrans).getOrigin();
586 btVector3 localRayTo = colObjWorldTransform.inverseTimes(rayToTrans).getOrigin();
590 #endif //DISABLE_DBVT_COMPOUNDSHAPE_RAYCAST_ACCELERATION
594 rayCB.ProcessLeaf(i);
636 if (castPtr->
calcTimeOfImpact(convexFromTrans, convexToTrans, colObjWorldTransform, colObjWorldTransform, castResult))
651 bool normalInWorldSpace =
true;
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;
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;
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);
890 ProcessChild(index, childTrans, childCollisionShape);
895 const btCompoundShape* compoundShape = static_cast<const btCompoundShape*>(collisionShape);
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);
922 callback.ProcessChild(i, childTrans, childCollisionShape);
952 btVector3 rayDir = (rayToWorld - rayFromWorld);
980 #ifdef RECALCULATE_AABB
981 btVector3 collisionObjectAabbMin,collisionObjectAabbMax;
1011 #ifndef USE_BRUTEFORCE_RAYBROADPHASE
1018 #endif //USE_BRUTEFORCE_RAYBROADPHASE
1084 convexFromTrans = convexFromWorld;
1085 convexToTrans = convexToWorld;
1086 btVector3 castShapeAabbMin, castShapeAabbMax;
1099 #ifndef USE_BRUTEFORCE_RAYBROADPHASE
1101 btSingleSweepCallback convexCB(castShape, convexFromWorld, convexToWorld,
this, resultCallback, allowedCcdPenetration);
1116 btVector3 collisionObjectAabbMin, collisionObjectAabbMax;
1118 AabbExpand(collisionObjectAabbMin, collisionObjectAabbMax, castShapeAabbMin, castShapeAabbMax);
1121 if (
btRayAabb(convexFromWorld.
getOrigin(), convexToWorld.
getOrigin(), collisionObjectAabbMin, collisionObjectAabbMax, hitLambda, hitNormal))
1128 allowedCcdPenetration);
1132 #endif //USE_BRUTEFORCE_RAYBROADPHASE
1148 btVector3 pointA = pointInWorld + normalOnBInWorld * depth;
1222 algorithm->~btCollisionAlgorithm();
1254 algorithm->processCollision(&obA, &obB,
getDispatchInfo(), &contactPointResult);
1256 algorithm->~btCollisionAlgorithm();
1282 (void)triangleIndex;
1292 btVector3 normal = (wv1 - wv0).cross(wv2 - wv0);
1313 const btCompoundShape* compoundShape = static_cast<const btCompoundShape*>(shape);
1327 const btBoxShape* boxShape = static_cast<const btBoxShape*>(shape);
1335 const btSphereShape* sphereShape = static_cast<const btSphereShape*>(shape);
1343 const btMultiSphereShape* multiSphereShape = static_cast<const btMultiSphereShape*>(shape);
1348 for (
int i = multiSphereShape->
getSphereCount() - 1; i >= 0; i--)
1358 const btCapsuleShape* capsuleShape = static_cast<const btCapsuleShape*>(shape);
1369 const btConeShape* coneShape = static_cast<const btConeShape*>(shape);
1379 const btCylinderShape* cylinder = static_cast<const btCylinderShape*>(shape);
1389 const btStaticPlaneShape* staticPlaneShape = static_cast<const btStaticPlaneShape*>(shape);
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];
1426 getDebugDrawer()->
drawLine(worldTransform * centroid, worldTransform * (centroid + faceNormal), normalColor);
1484 for (
int i = 0; i < numManifolds; i++)
1491 for (
int j = 0; j < numContacts; j++)
1546 minAabb -= contactThreshold;
1547 maxAabb += contactThreshold;
1554 minAabb2 -= contactThreshold;
1555 maxAabb2 += contactThreshold;
1556 minAabb.
setMin(minAabb2);
1557 maxAabb.
setMax(maxAabb2);
1580 if (!serializedShapes.
find(shape))
1582 serializedShapes.
insert(shape, shape);
1603 for (
int i = 0; i < numManifolds; i++)
1612 const char* structType = manifold->
serialize(manifold, chunk->
m_oldPtr, serializer);