55 int firstHit=startHit;
76 int rIslandId0,lIslandId0;
79 return lIslandId0 < rIslandId0;
141 int numCurConstraints = 0;
168 for (i=0;i<numBodies;i++)
170 for (i=0;i<numManifolds;i++)
172 for (i=0;i<numCurConstraints;i++)
204 m_sortedConstraints (),
205 m_solverIslandCallback ( NULL ),
206 m_constraintSolver(constraintSolver),
209 m_synchronizeAllMotionStates(false),
210 m_applySpeculativeContactRestitution(false),
213 m_latencyMotionStateInterpolation(true)
288 bool drawConstraints =
false;
294 drawConstraints =
true;
364 interpolatedTransform);
403 int numSimulationSubSteps = 0;
412 numSimulationSubSteps = int(
m_localTime / fixedTimeStep);
413 m_localTime -= numSimulationSubSteps * fixedTimeStep;
418 fixedTimeStep = timeStep;
423 numSimulationSubSteps = 0;
427 numSimulationSubSteps = 1;
438 if (numSimulationSubSteps)
442 int clampedSimulationSteps = (numSimulationSubSteps > maxSubSteps)? maxSubSteps : numSimulationSubSteps;
450 for (
int i=0;i<clampedSimulationSteps;i++)
463 #ifndef BT_NO_PROFILE
465 #endif //BT_NO_PROFILE
467 return numSimulationSubSteps;
476 (*m_internalPreTickCallback)(
this, timeStep);
516 (*m_internalTickCallback)(
this, timeStep);
612 m_actions[i]->updateAction(
this, timeStep);
656 if (disableCollisionsBetweenLinkedBodies)
750 if (((colObj0) && (!(colObj0)->isStaticOrKinematicObject())) &&
751 ((colObj1) && (!(colObj1)->isStaticOrKinematicObject())))
761 for (i=0;i< numConstraints ; i++ )
769 if (((colObj0) && (!(colObj0)->isStaticOrKinematicObject())) &&
770 ((colObj1) && (!(colObj1)->isStaticOrKinematicObject())))
819 btVector3 relativeVelocity = (linVelA-linVelB);
834 if (!ClosestConvexResultCallback::needsCollision(proxy0))
852 for (
int j=0;j<manifoldArray.
size();j++)
879 BT_PROFILE(
"release predictive contact manifolds");
908 #ifdef PREDICTIVE_CONTACT_USE_STATIC_ONLY
937 btTransform modifiedPredictedTrans = predictedTrans;
941 if (sweepResults.hasHit() && (sweepResults.m_closestHitFraction < 1.f))
945 btScalar distance = distVec.
dot(-sweepResults.m_hitNormalWorld);
952 btVector3 localPointB = sweepResults.m_hitCollisionObject->getWorldTransform().inverse()*worldPointB;
956 bool isPredictive =
true;
994 #ifdef USE_STATIC_ONLY
1023 btTransform modifiedPredictedTrans = predictedTrans;
1027 if (sweepResults.hasHit() && (sweepResults.m_closestHitFraction < 1.f))
1040 btScalar maxSpeedSqr = maxSpeed*maxSpeed;
1041 if (linVel.
length2()>maxSpeedSqr)
1051 printf(
"sm2=%f\n",sm2);
1079 BT_PROFILE(
"apply speculative contact restitution");
1100 btVector3 rel_pos1 = pos2 - body1->getWorldTransform().getOrigin();
1105 body1->applyImpulse(-imp,rel_pos1);
1140 #ifndef BT_NO_PROFILE
1142 #endif //BT_NO_PROFILE
1188 if(minAng == maxAng)
1192 bool drawSect =
true;
1204 getDebugDrawer()->
drawArc(center, normal, axis, dbgDrawSize, dbgDrawSize, minAng, maxAng,
btVector3(0,0,0), drawSect);
1219 static int nSegments = 8*4;
1223 for (
int i=0; i<nSegments; i++)
1230 if (i%(nSegments/8) == 0)
1249 getDebugDrawer()->
drawArc(pivot, normal, axis1, dbgDrawSize, dbgDrawSize, -twa-tws, -twa+tws,
btVector3(0,0,0),
true);
1272 getDebugDrawer()->
drawSpherePatch(center, up, axis, dbgDrawSize *
btScalar(.9f), minTh, maxTh, minPs, maxPs,
btVector3(0,0,0));
1281 ref[0] = cy*cz*axis[0] + cy*sz*axis[1] - sy*axis[2];
1282 ref[1] = -sz*axis[0] + cz*axis[1];
1283 ref[2] = cz*sy*axis[0] + sz*sy*axis[1] + cy*axis[2];
1290 getDebugDrawer()->
drawArc(center, normal, ref, dbgDrawSize, dbgDrawSize, -
SIMD_PI,
SIMD_PI,
btVector3(0,0,0),
false);
1292 else if(minFi < maxFi)
1294 getDebugDrawer()->
drawArc(center, normal, ref, dbgDrawSize, dbgDrawSize, minFi, maxFi,
btVector3(0,0,0),
true);
1321 getDebugDrawer()->
drawArc(center, normal, axis, dbgDrawSize, dbgDrawSize, a_min, a_max,
btVector3(0,0,0),
true);
1398 #ifdef BT_USE_DOUBLE_PRECISION
1408 memset(worldInfo ,0x00,len);
1438 #ifdef BT_USE_DOUBLE_PRECISION
1439 const char* structType =
"btDynamicsWorldDoubleData";
1440 #else//BT_USE_DOUBLE_PRECISION
1441 const char* structType =
"btDynamicsWorldFloatData";
1442 #endif//BT_USE_DOUBLE_PRECISION