70 :m_dispatcher1(dispatcher),
71 m_broadphasePairCache(pairCache),
73 m_forceUpdateAllAabbs(true)
134 collisionFilterGroup,
153 minAabb -= contactThreshold;
154 maxAabb += contactThreshold;
160 minAabb2 -= contactThreshold;
161 maxAabb2 += contactThreshold;
178 static bool reportMe =
true;
216 BT_PROFILE(
"performDiscreteCollisionDetection");
295 bool condition =
true;
298 convexCasterPtr = &subSimplexConvexCaster;
300 convexCasterPtr = &gjkConvexCaster;
304 if (convexCaster.
calcTimeOfImpact(rayFromTrans,rayToTrans,colObjWorldTransform,colObjWorldTransform,castResult))
311 #ifdef USE_SUBSIMPLEX_CONVEX_CAST
314 #endif //USE_SUBSIMPLEX_CONVEX_CAST
325 bool normalInWorldSpace =
true;
348 m_resultCallback(resultCallback),
349 m_collisionObject(collisionObject),
350 m_triangleMesh(triangleMesh),
351 m_colObjWorldTransform(colObjWorldTransform)
362 btVector3 hitNormalWorld = m_colObjWorldTransform.getBasis() * hitNormalLocal;
370 bool normalInWorldSpace =
true;
371 return m_resultCallback->addSingleResult(rayResult,normalInWorldSpace);
386 BridgeTriangleRaycastCallback rcb(rayFromLocal,rayToLocal,&resultCallback,collisionObjectWrap->
getCollisionObject(),triangleMesh,colObjWorldTransform);
394 BridgeTriangleRaycastCallback rcb(rayFromLocal,rayToLocal,&resultCallback,collisionObjectWrap->
getCollisionObject(),concaveShape, colObjWorldTransform);
421 m_resultCallback(resultCallback),
422 m_collisionObject(collisionObject),
423 m_triangleMesh(triangleMesh),
424 m_colObjWorldTransform(colObjWorldTransform)
435 btVector3 hitNormalWorld = m_colObjWorldTransform.getBasis() * hitNormalLocal;
443 bool normalInWorldSpace =
true;
444 return m_resultCallback->addSingleResult(rayResult,normalInWorldSpace);
450 BridgeTriangleRaycastCallback rcb(rayFromLocal,rayToLocal,&resultCallback,collisionObjectWrap->
getCollisionObject(),concaveShape, colObjWorldTransform);
453 btVector3 rayAabbMinLocal = rayFromLocal;
454 rayAabbMinLocal.
setMin(rayToLocal);
455 btVector3 rayAabbMaxLocal = rayFromLocal;
456 rayAabbMaxLocal.
setMax(rayToLocal);
470 : m_userCallback(user), m_i(i)
472 m_closestHitFraction = m_userCallback->m_closestHitFraction;
473 m_flags = m_userCallback->m_flags;
477 return m_userCallback->needsCollision(p);
488 const btScalar result = m_userCallback->addSingleResult(r, b);
489 m_closestHitFraction = m_userCallback->m_closestHitFraction;
509 m_collisionObject(collisionObject),
510 m_compoundShape(compoundShape),
511 m_colObjWorldTransform(colObjWorldTransform),
512 m_rayFromTrans(rayFromTrans),
513 m_rayToTrans(rayToTrans),
514 m_resultCallback(resultCallback)
519 void ProcessLeaf(
int i)
521 const btCollisionShape* childCollisionShape = m_compoundShape->getChildShape(i);
522 const btTransform& childTrans = m_compoundShape->getChildTransform(i);
523 btTransform childWorldTrans = m_colObjWorldTransform * childTrans;
530 LocalInfoAdder2 my_cb(i, &m_resultCallback);
553 colObjWorldTransform,
557 #ifndef DISABLE_DBVT_COMPOUNDSHAPE_RAYCAST_ACCELERATION
560 btVector3 localRayFrom = colObjWorldTransform.inverseTimes(rayFromTrans).getOrigin();
561 btVector3 localRayTo = colObjWorldTransform.inverseTimes(rayToTrans).getOrigin();
565 #endif //DISABLE_DBVT_COMPOUNDSHAPE_RAYCAST_ACCELERATION
569 rayCB.ProcessLeaf(i);
613 if (castPtr->
calcTimeOfImpact(convexFromTrans,convexToTrans,colObjWorldTransform,colObjWorldTransform,castResult))
630 bool normalInWorldSpace =
true;
659 m_resultCallback(resultCallback),
660 m_collisionObject(collisionObject),
661 m_triangleMesh(triangleMesh)
671 if (hitFraction <= m_resultCallback->m_closestHitFraction)
681 bool normalInWorldSpace =
true;
684 return m_resultCallback->addSingleResult(convexResult,normalInWorldSpace);
691 BridgeTriangleConvexcastCallback tccb(castShape, convexFromTrans,convexToTrans,&resultCallback,colObjWrap->
getCollisionObject(),triangleMesh, colObjWorldTransform);
693 tccb.m_allowedPenetration = allowedPenetration;
695 castShape->
getAabb(rotationXform, boxMinLocal, boxMaxLocal);
696 triangleMesh->
performConvexcast(&tccb,convexFromLocal,convexToLocal,boxMinLocal, boxMaxLocal);
708 if (castPtr->
calcTimeOfImpact(convexFromTrans,convexToTrans,colObjWorldTransform,colObjWorldTransform,castResult))
725 bool normalInWorldSpace =
true;
751 m_resultCallback(resultCallback),
752 m_collisionObject(collisionObject),
753 m_triangleMesh(triangleMesh)
763 if (hitFraction <= m_resultCallback->m_closestHitFraction)
773 bool normalInWorldSpace =
false;
775 return m_resultCallback->addSingleResult(convexResult,normalInWorldSpace);
782 BridgeTriangleConvexcastCallback tccb(castShape, convexFromTrans,convexToTrans,&resultCallback,colObjWrap->
getCollisionObject(),concaveShape, colObjWorldTransform);
784 tccb.m_allowedPenetration = allowedPenetration;
786 castShape->
getAabb(rotationXform, boxMinLocal, boxMaxLocal);
788 btVector3 rayAabbMinLocal = convexFromLocal;
789 rayAabbMinLocal.
setMin(convexToLocal);
790 btVector3 rayAabbMaxLocal = convexFromLocal;
791 rayAabbMaxLocal.
setMax(convexToLocal);
792 rayAabbMinLocal += boxMinLocal;
793 rayAabbMaxLocal += boxMaxLocal;
808 btTransform childWorldTrans = colObjWorldTransform * childTrans;
815 : m_userCallback(user), m_i(i)
817 m_closestHitFraction = m_userCallback->m_closestHitFraction;
821 return m_userCallback->needsCollision(p);
830 const btScalar result = m_userCallback->addSingleResult(r, b);
831 m_closestHitFraction = m_userCallback->m_closestHitFraction;
837 LocalInfoAdder my_cb(i, &resultCallback);
842 &tmpObj,my_cb, allowedPenetration);
874 btVector3 rayDir = (rayToWorld-rayFromWorld);
905 #ifdef RECALCULATE_AABB
906 btVector3 collisionObjectAabbMin,collisionObjectAabbMax;
936 #ifndef USE_BRUTEFORCE_RAYBROADPHASE
943 #endif //USE_BRUTEFORCE_RAYBROADPHASE
1018 convexFromTrans = convexFromWorld;
1019 convexToTrans = convexToWorld;
1020 btVector3 castShapeAabbMin, castShapeAabbMax;
1033 #ifndef USE_BRUTEFORCE_RAYBROADPHASE
1035 btSingleSweepCallback convexCB(castShape,convexFromWorld,convexToWorld,
this,resultCallback,allowedCcdPenetration);
1049 btVector3 collisionObjectAabbMin,collisionObjectAabbMax;
1051 AabbExpand (collisionObjectAabbMin, collisionObjectAabbMax, castShapeAabbMin, castShapeAabbMax);
1054 if (
btRayAabb(convexFromWorld.
getOrigin(),convexToWorld.
getOrigin(),collisionObjectAabbMin,collisionObjectAabbMax,hitLambda,hitNormal))
1061 allowedCcdPenetration);
1065 #endif //USE_BRUTEFORCE_RAYBROADPHASE
1084 btVector3 pointA = pointInWorld + normalOnBInWorld * depth;
1162 algorithm->~btCollisionAlgorithm();
1195 algorithm->processCollision(&obA,&obB,
getDispatchInfo(),&contactPointResult);
1197 algorithm->~btCollisionAlgorithm();
1229 (void)triangleIndex;
1362 int lastV = poly->
m_faces[i].m_indices[numVerts-1];
1363 for (
int v=0;v<poly->
m_faces[i].m_indices.
size();v++)
1365 int curVert = poly->
m_faces[i].m_indices[v];
1436 for (
int i=0;i<numManifolds;i++)
1443 for (
int j=0;j<numContacts;j++)
1489 minAabb -= contactThreshold;
1490 maxAabb += contactThreshold;
1497 minAabb2 -= contactThreshold;
1498 maxAabb2 += contactThreshold;
1499 minAabb.
setMin(minAabb2);
1500 maxAabb.
setMax(maxAabb2);
1533 if (!serializedShapes.
find(shape))
1535 serializedShapes.
insert(shape,shape);