71 :m_dispatcher1(dispatcher),
72 m_broadphasePairCache(pairCache),
74 m_forceUpdateAllAabbs(true)
137 collisionFilterGroup,
156 minAabb -= contactThreshold;
157 maxAabb += contactThreshold;
163 minAabb2 -= contactThreshold;
164 maxAabb2 += contactThreshold;
181 static bool reportMe =
true;
219 BT_PROFILE(
"performDiscreteCollisionDetection");
293 #define USE_SUBSIMPLEX_CONVEX_CAST 1
294 #ifdef USE_SUBSIMPLEX_CONVEX_CAST
299 #endif //#USE_SUBSIMPLEX_CONVEX_CAST
301 if (convexCaster.
calcTimeOfImpact(rayFromTrans,rayToTrans,colObjWorldTransform,colObjWorldTransform,castResult))
308 #ifdef USE_SUBSIMPLEX_CONVEX_CAST
311 #endif //USE_SUBSIMPLEX_CONVEX_CAST
322 bool normalInWorldSpace =
true;
353 m_resultCallback(resultCallback),
354 m_collisionObject(collisionObject),
355 m_triangleMesh(triangleMesh),
356 m_colObjWorldTransform(colObjWorldTransform)
367 btVector3 hitNormalWorld = m_colObjWorldTransform.getBasis() * hitNormalLocal;
375 bool normalInWorldSpace =
true;
376 return m_resultCallback->addSingleResult(rayResult,normalInWorldSpace);
381 BridgeTriangleRaycastCallback rcb(rayFromLocal,rayToLocal,&resultCallback,collisionObjectWrap->
getCollisionObject(),triangleMesh,colObjWorldTransform);
408 m_resultCallback(resultCallback),
409 m_collisionObject(collisionObject),
410 m_triangleMesh(triangleMesh),
411 m_colObjWorldTransform(colObjWorldTransform)
422 btVector3 hitNormalWorld = m_colObjWorldTransform.getBasis() * hitNormalLocal;
430 bool normalInWorldSpace =
true;
431 return m_resultCallback->addSingleResult(rayResult,normalInWorldSpace);
437 BridgeTriangleRaycastCallback rcb(rayFromLocal,rayToLocal,&resultCallback,collisionObjectWrap->
getCollisionObject(),concaveShape, colObjWorldTransform);
440 btVector3 rayAabbMinLocal = rayFromLocal;
441 rayAabbMinLocal.
setMin(rayToLocal);
442 btVector3 rayAabbMaxLocal = rayFromLocal;
443 rayAabbMaxLocal.
setMax(rayToLocal);
457 : m_userCallback(user), m_i(i)
459 m_closestHitFraction = m_userCallback->m_closestHitFraction;
460 m_flags = m_userCallback->m_flags;
464 return m_userCallback->needsCollision(p);
475 const btScalar result = m_userCallback->addSingleResult(r, b);
476 m_closestHitFraction = m_userCallback->m_closestHitFraction;
496 m_collisionObject(collisionObject),
497 m_compoundShape(compoundShape),
498 m_colObjWorldTransform(colObjWorldTransform),
499 m_rayFromTrans(rayFromTrans),
500 m_rayToTrans(rayToTrans),
501 m_resultCallback(resultCallback)
506 void ProcessLeaf(
int i)
508 const btCollisionShape* childCollisionShape = m_compoundShape->getChildShape(i);
509 const btTransform& childTrans = m_compoundShape->getChildTransform(i);
510 btTransform childWorldTrans = m_colObjWorldTransform * childTrans;
517 LocalInfoAdder2 my_cb(i, &m_resultCallback);
540 colObjWorldTransform,
544 #ifndef DISABLE_DBVT_COMPOUNDSHAPE_RAYCAST_ACCELERATION
547 btVector3 localRayFrom = colObjWorldTransform.inverseTimes(rayFromTrans).getOrigin();
548 btVector3 localRayTo = colObjWorldTransform.inverseTimes(rayToTrans).getOrigin();
552 #endif //DISABLE_DBVT_COMPOUNDSHAPE_RAYCAST_ACCELERATION
556 rayCB.ProcessLeaf(i);
600 if (castPtr->
calcTimeOfImpact(convexFromTrans,convexToTrans,colObjWorldTransform,colObjWorldTransform,castResult))
617 bool normalInWorldSpace =
true;
646 m_resultCallback(resultCallback),
647 m_collisionObject(collisionObject),
648 m_triangleMesh(triangleMesh)
658 if (hitFraction <= m_resultCallback->m_closestHitFraction)
668 bool normalInWorldSpace =
true;
671 return m_resultCallback->addSingleResult(convexResult,normalInWorldSpace);
678 BridgeTriangleConvexcastCallback tccb(castShape, convexFromTrans,convexToTrans,&resultCallback,colObjWrap->
getCollisionObject(),triangleMesh, colObjWorldTransform);
680 tccb.m_allowedPenetration = allowedPenetration;
682 castShape->
getAabb(rotationXform, boxMinLocal, boxMaxLocal);
683 triangleMesh->
performConvexcast(&tccb,convexFromLocal,convexToLocal,boxMinLocal, boxMaxLocal);
695 if (castPtr->
calcTimeOfImpact(convexFromTrans,convexToTrans,colObjWorldTransform,colObjWorldTransform,castResult))
712 bool normalInWorldSpace =
true;
738 m_resultCallback(resultCallback),
739 m_collisionObject(collisionObject),
740 m_triangleMesh(triangleMesh)
750 if (hitFraction <= m_resultCallback->m_closestHitFraction)
760 bool normalInWorldSpace =
false;
762 return m_resultCallback->addSingleResult(convexResult,normalInWorldSpace);
769 BridgeTriangleConvexcastCallback tccb(castShape, convexFromTrans,convexToTrans,&resultCallback,colObjWrap->
getCollisionObject(),concaveShape, colObjWorldTransform);
771 tccb.m_allowedPenetration = allowedPenetration;
773 castShape->
getAabb(rotationXform, boxMinLocal, boxMaxLocal);
775 btVector3 rayAabbMinLocal = convexFromLocal;
776 rayAabbMinLocal.
setMin(convexToLocal);
777 btVector3 rayAabbMaxLocal = convexFromLocal;
778 rayAabbMaxLocal.
setMax(convexToLocal);
779 rayAabbMinLocal += boxMinLocal;
780 rayAabbMaxLocal += boxMaxLocal;
795 btTransform childWorldTrans = colObjWorldTransform * childTrans;
802 : m_userCallback(user), m_i(i)
804 m_closestHitFraction = m_userCallback->m_closestHitFraction;
808 return m_userCallback->needsCollision(p);
817 const btScalar result = m_userCallback->addSingleResult(r, b);
818 m_closestHitFraction = m_userCallback->m_closestHitFraction;
824 LocalInfoAdder my_cb(i, &resultCallback);
829 &tmpObj,my_cb, allowedPenetration);
861 btVector3 rayDir = (rayToWorld-rayFromWorld);
892 #ifdef RECALCULATE_AABB
893 btVector3 collisionObjectAabbMin,collisionObjectAabbMax;
923 #ifndef USE_BRUTEFORCE_RAYBROADPHASE
930 #endif //USE_BRUTEFORCE_RAYBROADPHASE
1005 convexFromTrans = convexFromWorld;
1006 convexToTrans = convexToWorld;
1007 btVector3 castShapeAabbMin, castShapeAabbMax;
1020 #ifndef USE_BRUTEFORCE_RAYBROADPHASE
1022 btSingleSweepCallback convexCB(castShape,convexFromWorld,convexToWorld,
this,resultCallback,allowedCcdPenetration);
1036 btVector3 collisionObjectAabbMin,collisionObjectAabbMax;
1038 AabbExpand (collisionObjectAabbMin, collisionObjectAabbMax, castShapeAabbMin, castShapeAabbMax);
1041 if (
btRayAabb(convexFromWorld.
getOrigin(),convexToWorld.
getOrigin(),collisionObjectAabbMin,collisionObjectAabbMax,hitLambda,hitNormal))
1048 allowedCcdPenetration);
1052 #endif //USE_BRUTEFORCE_RAYBROADPHASE
1071 btVector3 pointA = pointInWorld + normalOnBInWorld * depth;
1149 algorithm->~btCollisionAlgorithm();
1182 algorithm->processCollision(&obA,&obB,
getDispatchInfo(),&contactPointResult);
1184 algorithm->~btCollisionAlgorithm();
1216 (void)triangleIndex;
1349 int lastV = poly->
m_faces[i].m_indices[numVerts-1];
1350 for (
int v=0;v<poly->
m_faces[i].m_indices.
size();v++)
1352 int curVert = poly->
m_faces[i].m_indices[v];
1423 for (
int i=0;i<numManifolds;i++)
1430 for (
int j=0;j<numContacts;j++)
1476 minAabb -= contactThreshold;
1477 maxAabb += contactThreshold;
1484 minAabb2 -= contactThreshold;
1485 maxAabb2 += contactThreshold;
1486 minAabb.
setMin(minAabb2);
1487 maxAabb.
setMax(maxAabb2);
1520 if (!serializedShapes.
find(shape))
1522 serializedShapes.
insert(shape,shape);