diff options
Diffstat (limited to 'extern/bullet2/src/BulletDynamics/Dynamics')
7 files changed, 214 insertions, 226 deletions
diff --git a/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp b/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp index fc37cf2e3c3..f80a0826fbf 100644 --- a/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp +++ b/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp @@ -16,7 +16,6 @@ subject to the following restrictions: #include "btDiscreteDynamicsWorld.h" - //collision detection #include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h" #include "BulletCollision/BroadphaseCollision/btSimpleBroadphase.h" @@ -54,8 +53,6 @@ subject to the following restrictions: -#include <algorithm> - btDiscreteDynamicsWorld::btDiscreteDynamicsWorld(btDispatcher* dispatcher,btOverlappingPairCache* pairCache,btConstraintSolver* constraintSolver) @@ -63,7 +60,7 @@ btDiscreteDynamicsWorld::btDiscreteDynamicsWorld(btDispatcher* dispatcher,btOver m_constraintSolver(constraintSolver? constraintSolver: new btSequentialImpulseConstraintSolver), m_debugDrawer(0), m_gravity(0,-10,0), -m_localTime(1.f/60.f), +m_localTime(btScalar(1.)/btScalar(60.)), m_profileTimings(0) { m_islandManager = new btSimulationIslandManager(); @@ -81,10 +78,10 @@ btDiscreteDynamicsWorld::~btDiscreteDynamicsWorld() delete m_constraintSolver; } -void btDiscreteDynamicsWorld::saveKinematicState(float timeStep) +void btDiscreteDynamicsWorld::saveKinematicState(btScalar timeStep) { - for (unsigned int i=0;i<m_collisionObjects.size();i++) + for (int i=0;i<m_collisionObjects.size();i++) { btCollisionObject* colObj = m_collisionObjects[i]; btRigidBody* body = btRigidBody::upcast(colObj); @@ -110,27 +107,27 @@ void btDiscreteDynamicsWorld::synchronizeMotionStates() { //todo: iterate over awake simulation islands! - for (unsigned int i=0;i<m_collisionObjects.size();i++) + for ( int i=0;i<m_collisionObjects.size();i++) { btCollisionObject* colObj = m_collisionObjects[i]; if (getDebugDrawer() && getDebugDrawer()->getDebugMode() & btIDebugDraw::DBG_DrawWireframe) { - btVector3 color(255.f,255.f,255.f); + btVector3 color(btScalar(255.),btScalar(255.),btScalar(255.)); switch(colObj->getActivationState()) { case ACTIVE_TAG: - color = btVector3(255.f,255.f,255.f); break; + color = btVector3(btScalar(255.),btScalar(255.),btScalar(255.)); break; case ISLAND_SLEEPING: - color = btVector3(0.f,255.f,0.f);break; + color = btVector3(btScalar(0.),btScalar(255.),btScalar(0.));break; case WANTS_DEACTIVATION: - color = btVector3(0.f,255.f,255.f);break; + color = btVector3(btScalar(0.),btScalar(255.),btScalar(255.));break; case DISABLE_DEACTIVATION: - color = btVector3(255.f,0.f,0.f);break; + color = btVector3(btScalar(255.),btScalar(0.),btScalar(0.));break; case DISABLE_SIMULATION: - color = btVector3(255.f,255.f,0.f);break; + color = btVector3(btScalar(255.),btScalar(255.),btScalar(0.));break; default: { - color = btVector3(255.f,0.f,0.f); + color = btVector3(btScalar(255.),btScalar(0.),btScalar(0.)); } }; @@ -139,7 +136,10 @@ void btDiscreteDynamicsWorld::synchronizeMotionStates() btRigidBody* body = btRigidBody::upcast(colObj); if (body && body->getMotionState() && !body->isStaticOrKinematicObject()) { - if (body->getActivationState() != ISLAND_SLEEPING) + //we need to call the update at least once, even for sleeping objects + //otherwise the 'graphics' transform never updates properly + //so todo: add 'dirty' flag + //if (body->getActivationState() != ISLAND_SLEEPING) { btTransform interpolatedTransform; btTransformUtil::integrateTransform(body->getInterpolationWorldTransform(), @@ -152,7 +152,7 @@ void btDiscreteDynamicsWorld::synchronizeMotionStates() if (getDebugDrawer() && getDebugDrawer()->getDebugMode() & btIDebugDraw::DBG_DrawWireframe) { - for (unsigned int i=0;i<this->m_vehicles.size();i++) + for ( int i=0;i<this->m_vehicles.size();i++) { for (int v=0;v<m_vehicles[i]->getNumWheels();v++) { @@ -188,7 +188,7 @@ void btDiscreteDynamicsWorld::synchronizeMotionStates() } -int btDiscreteDynamicsWorld::stepSimulation( float timeStep,int maxSubSteps, float fixedTimeStep) +int btDiscreteDynamicsWorld::stepSimulation( btScalar timeStep,int maxSubSteps, btScalar fixedTimeStep) { int numSimulationSubSteps = 0; @@ -243,7 +243,7 @@ int btDiscreteDynamicsWorld::stepSimulation( float timeStep,int maxSubSteps, flo return numSimulationSubSteps; } -void btDiscreteDynamicsWorld::internalSingleStepSimulation(float timeStep) +void btDiscreteDynamicsWorld::internalSingleStepSimulation(btScalar timeStep) { startProfiling(timeStep); @@ -291,7 +291,7 @@ void btDiscreteDynamicsWorld::internalSingleStepSimulation(float timeStep) void btDiscreteDynamicsWorld::setGravity(const btVector3& gravity) { m_gravity = gravity; - for (unsigned int i=0;i<m_collisionObjects.size();i++) + for ( int i=0;i<m_collisionObjects.size();i++) { btCollisionObject* colObj = m_collisionObjects[i]; btRigidBody* body = btRigidBody::upcast(colObj); @@ -318,19 +318,19 @@ void btDiscreteDynamicsWorld::addRigidBody(btRigidBody* body) if (body->getCollisionShape()) { bool isDynamic = !(body->isStaticObject() || body->isKinematicObject()); - short collisionFilterGroup = isDynamic? btBroadphaseProxy::DefaultFilter : btBroadphaseProxy::StaticFilter; - short collisionFilterMask = isDynamic? btBroadphaseProxy::AllFilter : btBroadphaseProxy::AllFilter ^ btBroadphaseProxy::StaticFilter; + short collisionFilterGroup = isDynamic? short(btBroadphaseProxy::DefaultFilter) : short(btBroadphaseProxy::StaticFilter); + short collisionFilterMask = isDynamic? short(btBroadphaseProxy::AllFilter) : short(btBroadphaseProxy::AllFilter ^ btBroadphaseProxy::StaticFilter); addCollisionObject(body,collisionFilterGroup,collisionFilterMask); } } -void btDiscreteDynamicsWorld::updateVehicles(float timeStep) +void btDiscreteDynamicsWorld::updateVehicles(btScalar timeStep) { BEGIN_PROFILE("updateVehicles"); - for (unsigned int i=0;i<m_vehicles.size();i++) + for ( int i=0;i<m_vehicles.size();i++) { btRaycastVehicle* vehicle = m_vehicles[i]; vehicle->updateVehicle( timeStep); @@ -338,11 +338,11 @@ void btDiscreteDynamicsWorld::updateVehicles(float timeStep) END_PROFILE("updateVehicles"); } -void btDiscreteDynamicsWorld::updateActivationState(float timeStep) +void btDiscreteDynamicsWorld::updateActivationState(btScalar timeStep) { BEGIN_PROFILE("updateActivationState"); - for (unsigned int i=0;i<m_collisionObjects.size();i++) + for ( int i=0;i<m_collisionObjects.size();i++) { btCollisionObject* colObj = m_collisionObjects[i]; btRigidBody* body = btRigidBody::upcast(colObj); @@ -377,11 +377,7 @@ void btDiscreteDynamicsWorld::addConstraint(btTypedConstraint* constraint) void btDiscreteDynamicsWorld::removeConstraint(btTypedConstraint* constraint) { - std::vector<btTypedConstraint*>::iterator cit = std::find(m_constraints.begin(),m_constraints.end(),constraint); - if (!(cit==m_constraints.end())) - { - m_constraints.erase(cit); - } + m_constraints.remove(constraint); } void btDiscreteDynamicsWorld::addVehicle(btRaycastVehicle* vehicle) @@ -391,11 +387,7 @@ void btDiscreteDynamicsWorld::addVehicle(btRaycastVehicle* vehicle) void btDiscreteDynamicsWorld::removeVehicle(btRaycastVehicle* vehicle) { - std::vector<btRaycastVehicle*>::iterator vit = std::find(m_vehicles.begin(),m_vehicles.end(),vehicle); - if (!(vit==m_vehicles.end())) - { - m_vehicles.erase(vit); - } + m_vehicles.remove(vehicle); } inline int btGetConstraintIslandId(const btTypedConstraint* lhs) @@ -409,19 +401,26 @@ inline int btGetConstraintIslandId(const btTypedConstraint* lhs) } -static bool btSortConstraintOnIslandPredicate(const btTypedConstraint* lhs, const btTypedConstraint* rhs) + +class btSortConstraintOnIslandPredicate { - int rIslandId0,lIslandId0; - rIslandId0 = btGetConstraintIslandId(rhs); - lIslandId0 = btGetConstraintIslandId(lhs); - return lIslandId0 < rIslandId0; -} + public: + + bool operator() ( const btTypedConstraint* lhs, const btTypedConstraint* rhs ) + { + int rIslandId0,lIslandId0; + rIslandId0 = btGetConstraintIslandId(rhs); + lIslandId0 = btGetConstraintIslandId(lhs); + return lIslandId0 < rIslandId0; + } +}; + + + void btDiscreteDynamicsWorld::solveConstraints(btContactSolverInfo& solverInfo) { - BEGIN_PROFILE("solveConstraints"); - struct InplaceSolverIslandCallback : public btSimulationIslandManager::IslandCallback { @@ -430,7 +429,7 @@ void btDiscreteDynamicsWorld::solveConstraints(btContactSolverInfo& solverInfo) btTypedConstraint** m_sortedConstraints; int m_numConstraints; btIDebugDraw* m_debugDrawer; - + btStackAlloc* m_stackAlloc; InplaceSolverIslandCallback( @@ -438,17 +437,25 @@ void btDiscreteDynamicsWorld::solveConstraints(btContactSolverInfo& solverInfo) btConstraintSolver* solver, btTypedConstraint** sortedConstraints, int numConstraints, - btIDebugDraw* debugDrawer) + btIDebugDraw* debugDrawer, + btStackAlloc* stackAlloc) :m_solverInfo(solverInfo), m_solver(solver), m_sortedConstraints(sortedConstraints), m_numConstraints(numConstraints), - m_debugDrawer(debugDrawer) + m_debugDrawer(debugDrawer), + m_stackAlloc(stackAlloc) { } - virtual void ProcessIsland(btPersistentManifold** manifolds,int numManifolds, int islandId) + InplaceSolverIslandCallback& operator=(InplaceSolverIslandCallback& other) + { + btAssert(0); + (void)other; + return *this; + } + virtual void ProcessIsland(btCollisionObject** bodies,int numBodies,btPersistentManifold** manifolds,int numManifolds, int islandId) { //also add all non-contact constraints/joints for this island btTypedConstraint** startConstraint = 0; @@ -473,36 +480,35 @@ void btDiscreteDynamicsWorld::solveConstraints(btContactSolverInfo& solverInfo) } } - m_solver->solveGroup( manifolds, numManifolds,startConstraint,numCurConstraints,m_solverInfo,m_debugDrawer); + m_solver->solveGroup( bodies,numBodies,manifolds, numManifolds,startConstraint,numCurConstraints,m_solverInfo,m_debugDrawer,m_stackAlloc); } }; - - - - //sorted version of all btTypedConstraint, based on islandId - std::vector<btTypedConstraint*> sortedConstraints; + btAlignedObjectArray<btTypedConstraint*> sortedConstraints; sortedConstraints.resize( m_constraints.size()); int i; for (i=0;i<getNumConstraints();i++) { sortedConstraints[i] = m_constraints[i]; } + +// assert(0); + - std::sort(sortedConstraints.begin(),sortedConstraints.end(),btSortConstraintOnIslandPredicate); + + sortedConstraints.heapSort(btSortConstraintOnIslandPredicate()); btTypedConstraint** constraintsPtr = getNumConstraints() ? &sortedConstraints[0] : 0; - InplaceSolverIslandCallback solverCallback( solverInfo, m_constraintSolver, constraintsPtr,sortedConstraints.size(), m_debugDrawer); + InplaceSolverIslandCallback solverCallback( solverInfo, m_constraintSolver, constraintsPtr,sortedConstraints.size(), m_debugDrawer,m_stackAlloc); /// solve all the constraints for this island m_islandManager->buildAndProcessIslands(getCollisionWorld()->getDispatcher(),getCollisionWorld()->getCollisionObjectArray(),&solverCallback); - END_PROFILE("solveConstraints"); } @@ -545,37 +551,6 @@ void btDiscreteDynamicsWorld::calculateSimulationIslands() } -static void DrawAabb(btIDebugDraw* debugDrawer,const btVector3& from,const btVector3& to,const btVector3& color) -{ - - btVector3 halfExtents = (to-from)* 0.5f; - btVector3 center = (to+from) *0.5f; - int i,j; - - btVector3 edgecoord(1.f,1.f,1.f),pa,pb; - for (i=0;i<4;i++) - { - for (j=0;j<3;j++) - { - pa = btVector3(edgecoord[0]*halfExtents[0], edgecoord[1]*halfExtents[1], - edgecoord[2]*halfExtents[2]); - pa+=center; - - int othercoord = j%3; - edgecoord[othercoord]*=-1.f; - pb = btVector3(edgecoord[0]*halfExtents[0], edgecoord[1]*halfExtents[1], - edgecoord[2]*halfExtents[2]); - pb+=center; - - debugDrawer->drawLine(pa,pb,color); - } - edgecoord = btVector3(-1.f,-1.f,-1.f); - if (i<3) - edgecoord[i]*=-1.f; - } - - -} void btDiscreteDynamicsWorld::updateAabbs() { @@ -583,7 +558,7 @@ void btDiscreteDynamicsWorld::updateAabbs() btVector3 colorvec(1,0,0); btTransform predictedTrans; - for (unsigned int i=0;i<m_collisionObjects.size();i++) + for ( int i=0;i<m_collisionObjects.size();i++) { btCollisionObject* colObj = m_collisionObjects[i]; @@ -594,34 +569,33 @@ void btDiscreteDynamicsWorld::updateAabbs() { btPoint3 minAabb,maxAabb; colObj->getCollisionShape()->getAabb(colObj->getWorldTransform(), minAabb,maxAabb); - btSimpleBroadphase* bp = (btSimpleBroadphase*)m_broadphasePairCache; + btBroadphaseInterface* bp = (btBroadphaseInterface*)m_broadphasePairCache; //moving objects should be moderately sized, probably something wrong if not - if ( colObj->isStaticObject() || ((maxAabb-minAabb).length2() < 1e12f)) + if ( colObj->isStaticObject() || ((maxAabb-minAabb).length2() < btScalar(1e12))) { bp->setAabb(body->getBroadphaseHandle(),minAabb,maxAabb); } else { //something went wrong, investigate //this assert is unwanted in 3D modelers (danger of loosing work) - assert(0); body->setActivationState(DISABLE_SIMULATION); static bool reportMe = true; - if (reportMe) + if (reportMe && m_debugDrawer) { reportMe = false; - printf("Overflow in AABB, object removed from simulation \n"); - printf("If you can reproduce this, please email bugs@continuousphysics.com\n"); - printf("Please include above information, your Platform, version of OS.\n"); - printf("Thanks.\n"); + m_debugDrawer->reportErrorWarning("Overflow in AABB, object removed from simulation"); + m_debugDrawer->reportErrorWarning("If you can reproduce this, please email bugs@continuousphysics.com\n"); + m_debugDrawer->reportErrorWarning("Please include above information, your Platform, version of OS.\n"); + m_debugDrawer->reportErrorWarning("Thanks.\n"); } } if (m_debugDrawer && (m_debugDrawer->getDebugMode() & btIDebugDraw::DBG_DrawAabb)) { - DrawAabb(m_debugDrawer,minAabb,maxAabb,colorvec); + m_debugDrawer->drawAabb(minAabb,maxAabb,colorvec); } } } @@ -630,11 +604,11 @@ void btDiscreteDynamicsWorld::updateAabbs() END_PROFILE("updateAabbs"); } -void btDiscreteDynamicsWorld::integrateTransforms(float timeStep) +void btDiscreteDynamicsWorld::integrateTransforms(btScalar timeStep) { BEGIN_PROFILE("integrateTransforms"); btTransform predictedTrans; - for (unsigned int i=0;i<m_collisionObjects.size();i++) + for ( int i=0;i<m_collisionObjects.size();i++) { btCollisionObject* colObj = m_collisionObjects[i]; btRigidBody* body = btRigidBody::upcast(colObj); @@ -652,10 +626,10 @@ void btDiscreteDynamicsWorld::integrateTransforms(float timeStep) -void btDiscreteDynamicsWorld::predictUnconstraintMotion(float timeStep) +void btDiscreteDynamicsWorld::predictUnconstraintMotion(btScalar timeStep) { BEGIN_PROFILE("predictUnconstraintMotion"); - for (unsigned int i=0;i<m_collisionObjects.size();i++) + for ( int i=0;i<m_collisionObjects.size();i++) { btCollisionObject* colObj = m_collisionObjects[i]; btRigidBody* body = btRigidBody::upcast(colObj); @@ -676,8 +650,9 @@ void btDiscreteDynamicsWorld::predictUnconstraintMotion(float timeStep) } -void btDiscreteDynamicsWorld::startProfiling(float timeStep) +void btDiscreteDynamicsWorld::startProfiling(btScalar timeStep) { + (void)timeStep; #ifdef USE_QUICKPROF @@ -724,10 +699,10 @@ class DebugDrawcallback : public btTriangleCallback, public btInternalTriangleIn public: - DebugDrawcallback(btIDebugDraw* debugDrawer,const btTransform& worldTrans,const btVector3& color) - : m_debugDrawer(debugDrawer), - m_worldTrans(worldTrans), - m_color(color) + DebugDrawcallback(btIDebugDraw* debugDrawer,const btTransform& worldTrans,const btVector3& color) : + m_debugDrawer(debugDrawer), + m_color(color), + m_worldTrans(worldTrans) { } @@ -738,6 +713,9 @@ public: virtual void processTriangle(btVector3* triangle,int partId, int triangleIndex) { + (void)partId; + (void)triangleIndex; + btVector3 wv0,wv1,wv2; wv0 = m_worldTrans*triangle[0]; wv1 = m_worldTrans*triangle[1]; @@ -771,7 +749,7 @@ void btDiscreteDynamicsWorld::debugDrawObject(const btTransform& worldTransform, case SPHERE_SHAPE_PROXYTYPE: { const btSphereShape* sphereShape = static_cast<const btSphereShape*>(shape); - float radius = sphereShape->getMargin();//radius doesn't include the margin, so draw with margin + btScalar radius = sphereShape->getMargin();//radius doesn't include the margin, so draw with margin btVector3 start = worldTransform.getOrigin(); getDebugDrawer()->drawLine(start,start+worldTransform.getBasis() * btVector3(radius,0,0),color); getDebugDrawer()->drawLine(start,start+worldTransform.getBasis() * btVector3(0,radius,0),color); @@ -783,13 +761,13 @@ void btDiscreteDynamicsWorld::debugDrawObject(const btTransform& worldTransform, case CONE_SHAPE_PROXYTYPE: { const btConeShape* coneShape = static_cast<const btConeShape*>(shape); - float radius = coneShape->getRadius();//+coneShape->getMargin(); - float height = coneShape->getHeight();//+coneShape->getMargin(); + btScalar radius = coneShape->getRadius();//+coneShape->getMargin(); + btScalar height = coneShape->getHeight();//+coneShape->getMargin(); btVector3 start = worldTransform.getOrigin(); - getDebugDrawer()->drawLine(start+worldTransform.getBasis() * btVector3(0.f,0.f,0.5f*height),start+worldTransform.getBasis() * btVector3(radius,0.f,-0.5f*height),color); - getDebugDrawer()->drawLine(start+worldTransform.getBasis() * btVector3(0.f,0.f,0.5f*height),start+worldTransform.getBasis() * btVector3(-radius,0.f,-0.5f*height),color); - getDebugDrawer()->drawLine(start+worldTransform.getBasis() * btVector3(0.f,0.f,0.5f*height),start+worldTransform.getBasis() * btVector3(0.f,radius,-0.5f*height),color); - getDebugDrawer()->drawLine(start+worldTransform.getBasis() * btVector3(0.f,0.f,0.5f*height),start+worldTransform.getBasis() * btVector3(0.f,-radius,-0.5f*height),color); + getDebugDrawer()->drawLine(start+worldTransform.getBasis() * btVector3(btScalar(0.),btScalar(0.),btScalar(0.5)*height),start+worldTransform.getBasis() * btVector3(radius,btScalar(0.),btScalar(-0.5)*height),color); + getDebugDrawer()->drawLine(start+worldTransform.getBasis() * btVector3(btScalar(0.),btScalar(0.),btScalar(0.5)*height),start+worldTransform.getBasis() * btVector3(-radius,btScalar(0.),btScalar(-0.5)*height),color); + getDebugDrawer()->drawLine(start+worldTransform.getBasis() * btVector3(btScalar(0.),btScalar(0.),btScalar(0.5)*height),start+worldTransform.getBasis() * btVector3(btScalar(0.),radius,btScalar(-0.5)*height),color); + getDebugDrawer()->drawLine(start+worldTransform.getBasis() * btVector3(btScalar(0.),btScalar(0.),btScalar(0.5)*height),start+worldTransform.getBasis() * btVector3(btScalar(0.),-radius,btScalar(-0.5)*height),color); break; } @@ -797,8 +775,8 @@ void btDiscreteDynamicsWorld::debugDrawObject(const btTransform& worldTransform, { const btCylinderShape* cylinder = static_cast<const btCylinderShape*>(shape); int upAxis = cylinder->getUpAxis(); - float radius = cylinder->getRadius(); - float halfHeight = cylinder->getHalfExtents()[upAxis]; + btScalar radius = cylinder->getRadius(); + btScalar halfHeight = cylinder->getHalfExtents()[upAxis]; btVector3 start = worldTransform.getOrigin(); btVector3 offsetHeight(0,0,0); offsetHeight[upAxis] = halfHeight; @@ -814,12 +792,12 @@ void btDiscreteDynamicsWorld::debugDrawObject(const btTransform& worldTransform, if (shape->getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE) { btTriangleMeshShape* concaveMesh = (btTriangleMeshShape*) shape; - //btVector3 aabbMax(1e30f,1e30f,1e30f); - //btVector3 aabbMax(100,100,100);//1e30f,1e30f,1e30f); + //btVector3 aabbMax(btScalar(1e30),btScalar(1e30),btScalar(1e30)); + //btVector3 aabbMax(100,100,100);//btScalar(1e30),btScalar(1e30),btScalar(1e30)); //todo pass camera, for some culling - btVector3 aabbMax(1e30f,1e30f,1e30f); - btVector3 aabbMin(-1e30f,-1e30f,-1e30f); + btVector3 aabbMax(btScalar(1e30),btScalar(1e30),btScalar(1e30)); + btVector3 aabbMin(btScalar(-1e30),btScalar(-1e30),btScalar(-1e30)); DebugDrawcallback drawCallback(getDebugDrawer(),worldTransform,color); concaveMesh->processAllTriangles(&drawCallback,aabbMin,aabbMax); @@ -830,8 +808,8 @@ void btDiscreteDynamicsWorld::debugDrawObject(const btTransform& worldTransform, { btConvexTriangleMeshShape* convexMesh = (btConvexTriangleMeshShape*) shape; //todo: pass camera for some culling - btVector3 aabbMax(1e30f,1e30f,1e30f); - btVector3 aabbMin(-1e30f,-1e30f,-1e30f); + btVector3 aabbMax(btScalar(1e30),btScalar(1e30),btScalar(1e30)); + btVector3 aabbMin(btScalar(-1e30),btScalar(-1e30),btScalar(-1e30)); //DebugDrawcallback drawCallback; DebugDrawcallback drawCallback(getDebugDrawer(),worldTransform,color); convexMesh->getStridingMesh()->InternalProcessAllTriangles(&drawCallback,aabbMin,aabbMax); diff --git a/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h b/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h index 8575f8506f1..7ffa2c07ee6 100644 --- a/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h +++ b/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h @@ -23,12 +23,12 @@ class btOverlappingPairCache; class btConstraintSolver; class btSimulationIslandManager; class btTypedConstraint; -#include "BulletDynamics/ConstraintSolver/btContactSolverInfo.h" +#include "../ConstraintSolver/btContactSolverInfo.h" class btRaycastVehicle; class btIDebugDraw; +#include "../../LinearMath/btAlignedObjectArray.h" -#include <vector> ///btDiscreteDynamicsWorld provides discrete rigid body simulation ///those classes replace the obsolete CcdPhysicsEnvironment/CcdPhysicsController @@ -40,14 +40,14 @@ protected: btSimulationIslandManager* m_islandManager; - std::vector<btTypedConstraint*> m_constraints; + btAlignedObjectArray<btTypedConstraint*> m_constraints; btIDebugDraw* m_debugDrawer; btVector3 m_gravity; //for variable timesteps - float m_localTime; + btScalar m_localTime; //for variable timesteps bool m_ownsIslandManager; @@ -56,29 +56,29 @@ protected: btContactSolverInfo m_solverInfo; - std::vector<btRaycastVehicle*> m_vehicles; + btAlignedObjectArray<btRaycastVehicle*> m_vehicles; int m_profileTimings; - void predictUnconstraintMotion(float timeStep); + void predictUnconstraintMotion(btScalar timeStep); - void integrateTransforms(float timeStep); + void integrateTransforms(btScalar timeStep); void calculateSimulationIslands(); void solveConstraints(btContactSolverInfo& solverInfo); - void updateActivationState(float timeStep); + void updateActivationState(btScalar timeStep); - void updateVehicles(float timeStep); + void updateVehicles(btScalar timeStep); - void startProfiling(float timeStep); + void startProfiling(btScalar timeStep); - virtual void internalSingleStepSimulation( float timeStep); + virtual void internalSingleStepSimulation( btScalar timeStep); void synchronizeMotionStates(); - void saveKinematicState(float timeStep); + void saveKinematicState(btScalar timeStep); public: @@ -90,7 +90,7 @@ public: virtual ~btDiscreteDynamicsWorld(); ///if maxSubSteps > 0, it will interpolate motion between fixedTimeStep's - virtual int stepSimulation( float timeStep,int maxSubSteps=1, float fixedTimeStep=1.f/60.f); + virtual int stepSimulation( btScalar timeStep,int maxSubSteps=1, btScalar fixedTimeStep=btScalar(1.)/btScalar(60.)); virtual void updateAabbs(); diff --git a/extern/bullet2/src/BulletDynamics/Dynamics/btDynamicsWorld.h b/extern/bullet2/src/BulletDynamics/Dynamics/btDynamicsWorld.h index 617ed98d2af..d3ea7db8e5c 100644 --- a/extern/bullet2/src/BulletDynamics/Dynamics/btDynamicsWorld.h +++ b/extern/bullet2/src/BulletDynamics/Dynamics/btDynamicsWorld.h @@ -16,7 +16,7 @@ subject to the following restrictions: #ifndef BT_DYNAMICS_WORLD_H #define BT_DYNAMICS_WORLD_H -#include "BulletCollision/CollisionDispatch/btCollisionWorld.h" +#include "../../BulletCollision/CollisionDispatch/btCollisionWorld.h" class btTypedConstraint; class btRaycastVehicle; class btConstraintSolver; @@ -39,17 +39,17 @@ class btDynamicsWorld : public btCollisionWorld ///stepSimulation proceeds the simulation over timeStep units ///if maxSubSteps > 0, it will interpolate time steps - virtual int stepSimulation( float timeStep,int maxSubSteps=1, float fixedTimeStep=1.f/60.f)=0; + virtual int stepSimulation( btScalar timeStep,int maxSubSteps=1, btScalar fixedTimeStep=btScalar(1.)/btScalar(60.))=0; virtual void updateAabbs() = 0; - virtual void addConstraint(btTypedConstraint* constraint) {}; + virtual void addConstraint(btTypedConstraint* constraint) { (void)constraint;}; - virtual void removeConstraint(btTypedConstraint* constraint) {}; + virtual void removeConstraint(btTypedConstraint* constraint) {(void)constraint;}; - virtual void addVehicle(btRaycastVehicle* vehicle) {}; + virtual void addVehicle(btRaycastVehicle* vehicle) {(void)vehicle;}; - virtual void removeVehicle(btRaycastVehicle* vehicle) {}; + virtual void removeVehicle(btRaycastVehicle* vehicle) {(void)vehicle;}; virtual void setDebugDrawer(btIDebugDraw* debugDrawer) = 0; @@ -68,9 +68,9 @@ class btDynamicsWorld : public btCollisionWorld virtual int getNumConstraints() const { return 0; } - virtual btTypedConstraint* getConstraint(int index) { return 0; } + virtual btTypedConstraint* getConstraint(int index) { (void)index; return 0; } - virtual const btTypedConstraint* getConstraint(int index) const { return 0; } + virtual const btTypedConstraint* getConstraint(int index) const { (void)index; return 0; } }; diff --git a/extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.cpp b/extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.cpp index 705c023d3a0..dbf73b85bcf 100644 --- a/extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.cpp +++ b/extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.cpp @@ -19,25 +19,25 @@ subject to the following restrictions: #include <LinearMath/btTransformUtil.h> #include <LinearMath/btMotionState.h> -float gLinearAirDamping = 1.f; +btScalar gLinearAirDamping = btScalar(1.); //'temporarily' global variables -float gDeactivationTime = 2.f; +btScalar gDeactivationTime = btScalar(2.); bool gDisableDeactivation = false; -float gLinearSleepingThreshold = 0.8f; -float gAngularSleepingThreshold = 1.0f; +btScalar gLinearSleepingThreshold = btScalar(0.8); +btScalar gAngularSleepingThreshold = btScalar(1.0); static int uniqueId = 0; -btRigidBody::btRigidBody(float mass, btMotionState* motionState, btCollisionShape* collisionShape, const btVector3& localInertia,btScalar linearDamping,btScalar angularDamping,btScalar friction,btScalar restitution) +btRigidBody::btRigidBody(btScalar mass, btMotionState* motionState, btCollisionShape* collisionShape, const btVector3& localInertia,btScalar linearDamping,btScalar angularDamping,btScalar friction,btScalar restitution) : - m_gravity(0.0f, 0.0f, 0.0f), - m_totalForce(0.0f, 0.0f, 0.0f), - m_totalTorque(0.0f, 0.0f, 0.0f), - m_linearVelocity(0.0f, 0.0f, 0.0f), - m_angularVelocity(0.f,0.f,0.f), - m_angularFactor(1.f), - m_linearDamping(0.f), - m_angularDamping(0.5f), + m_linearVelocity(btScalar(0.0), btScalar(0.0), btScalar(0.0)), + m_angularVelocity(btScalar(0.),btScalar(0.),btScalar(0.)), + m_angularFactor(btScalar(1.)), + m_gravity(btScalar(0.0), btScalar(0.0), btScalar(0.0)), + m_totalForce(btScalar(0.0), btScalar(0.0), btScalar(0.0)), + m_totalTorque(btScalar(0.0), btScalar(0.0), btScalar(0.0)), + m_linearDamping(btScalar(0.)), + m_angularDamping(btScalar(0.5)), m_optionalMotionState(motionState), m_contactSolverType(0), m_frictionSolverType(0) @@ -72,15 +72,15 @@ btRigidBody::btRigidBody(float mass, btMotionState* motionState, btCollisionShap } #ifdef OBSOLETE_MOTIONSTATE_LESS -btRigidBody::btRigidBody( float mass,const btTransform& worldTransform,btCollisionShape* collisionShape,const btVector3& localInertia,btScalar linearDamping,btScalar angularDamping,btScalar friction,btScalar restitution) +btRigidBody::btRigidBody( btScalar mass,const btTransform& worldTransform,btCollisionShape* collisionShape,const btVector3& localInertia,btScalar linearDamping,btScalar angularDamping,btScalar friction,btScalar restitution) : - m_gravity(0.0f, 0.0f, 0.0f), - m_totalForce(0.0f, 0.0f, 0.0f), - m_totalTorque(0.0f, 0.0f, 0.0f), - m_linearVelocity(0.0f, 0.0f, 0.0f), - m_angularVelocity(0.f,0.f,0.f), - m_linearDamping(0.f), - m_angularDamping(0.5f), + m_gravity(btScalar(0.0), btScalar(0.0), btScalar(0.0)), + m_totalForce(btScalar(0.0), btScalar(0.0), btScalar(0.0)), + m_totalTorque(btScalar(0.0), btScalar(0.0), btScalar(0.0)), + m_linearVelocity(btScalar(0.0), btScalar(0.0), btScalar(0.0)), + m_angularVelocity(btScalar(0.),btScalar(0.),btScalar(0.)), + m_linearDamping(btScalar(0.)), + m_angularDamping(btScalar(0.5)), m_optionalMotionState(0), m_contactSolverType(0), m_frictionSolverType(0) @@ -110,16 +110,18 @@ btRigidBody::btRigidBody( float mass,const btTransform& worldTransform,btCollisi #endif //OBSOLETE_MOTIONSTATE_LESS -//#define EXPERIMENTAL_JITTER_REMOVAL 1 + + +#define EXPERIMENTAL_JITTER_REMOVAL 1 #ifdef EXPERIMENTAL_JITTER_REMOVAL //Bullet 2.20b has experimental damping code to reduce jitter just before objects fall asleep/deactivate //doesn't work very well yet (value 0 disabled this damping) //note there this influences deactivation thresholds! -float gClippedAngvelThresholdSqr = 0.01f; -float gClippedLinearThresholdSqr = 0.01f; +btScalar gClippedAngvelThresholdSqr = btScalar(0.01); +btScalar gClippedLinearThresholdSqr = btScalar(0.01); #endif //EXPERIMENTAL_JITTER_REMOVAL -float gJitterVelocityDampingFactor = 1.f; +btScalar gJitterVelocityDampingFactor = btScalar(0.7); void btRigidBody::predictIntegratedTransform(btScalar timeStep,btTransform& predictedTransform) { @@ -144,7 +146,7 @@ void btRigidBody::predictIntegratedTransform(btScalar timeStep,btTransform& pred void btRigidBody::saveKinematicState(btScalar timeStep) { //todo: clamp to some (user definable) safe minimum timestep, to limit maximum angular/linear velocities - if (timeStep != 0.f) + if (timeStep != btScalar(0.)) { //if we use motionstate to synchronize world transforms, get the new kinematic/animated world transform if (getMotionState()) @@ -169,9 +171,9 @@ void btRigidBody::getAabb(btVector3& aabbMin,btVector3& aabbMax) const void btRigidBody::setGravity(const btVector3& acceleration) { - if (m_inverseMass != 0.0f) + if (m_inverseMass != btScalar(0.0)) { - m_gravity = acceleration * (1.0f / m_inverseMass); + m_gravity = acceleration * (btScalar(1.0) / m_inverseMass); } } @@ -182,8 +184,8 @@ void btRigidBody::setGravity(const btVector3& acceleration) void btRigidBody::setDamping(btScalar lin_damping, btScalar ang_damping) { - m_linearDamping = GEN_clamped(lin_damping, 0.0f, 1.0f); - m_angularDamping = GEN_clamped(ang_damping, 0.0f, 1.0f); + m_linearDamping = GEN_clamped(lin_damping, (btScalar)btScalar(0.0), (btScalar)btScalar(1.0)); + m_angularDamping = GEN_clamped(ang_damping, (btScalar)btScalar(0.0), (btScalar)btScalar(1.0)); } @@ -198,36 +200,36 @@ void btRigidBody::applyForces(btScalar step) applyCentralForce(m_gravity); - m_linearVelocity *= GEN_clamped((1.f - step * gLinearAirDamping * m_linearDamping), 0.0f, 1.0f); - m_angularVelocity *= GEN_clamped((1.f - step * m_angularDamping), 0.0f, 1.0f); + m_linearVelocity *= GEN_clamped((btScalar(1.) - step * gLinearAirDamping * m_linearDamping), (btScalar)btScalar(0.0), (btScalar)btScalar(1.0)); + m_angularVelocity *= GEN_clamped((btScalar(1.) - step * m_angularDamping), (btScalar)btScalar(0.0), (btScalar)btScalar(1.0)); #define FORCE_VELOCITY_DAMPING 1 #ifdef FORCE_VELOCITY_DAMPING - float speed = m_linearVelocity.length(); + btScalar speed = m_linearVelocity.length(); if (speed < m_linearDamping) { - float dampVel = 0.005f; + btScalar dampVel = btScalar(0.005); if (speed > dampVel) { btVector3 dir = m_linearVelocity.normalized(); m_linearVelocity -= dir * dampVel; } else { - m_linearVelocity.setValue(0.f,0.f,0.f); + m_linearVelocity.setValue(btScalar(0.),btScalar(0.),btScalar(0.)); } } - float angSpeed = m_angularVelocity.length(); + btScalar angSpeed = m_angularVelocity.length(); if (angSpeed < m_angularDamping) { - float angDampVel = 0.005f; + btScalar angDampVel = btScalar(0.005); if (angSpeed > angDampVel) { btVector3 dir = m_angularVelocity.normalized(); m_angularVelocity -= dir * angDampVel; } else { - m_angularVelocity.setValue(0.f,0.f,0.f); + m_angularVelocity.setValue(btScalar(0.),btScalar(0.),btScalar(0.)); } } #endif //FORCE_VELOCITY_DAMPING @@ -242,19 +244,19 @@ void btRigidBody::proceedToTransform(const btTransform& newTrans) void btRigidBody::setMassProps(btScalar mass, const btVector3& inertia) { - if (mass == 0.f) + if (mass == btScalar(0.)) { m_collisionFlags |= btCollisionObject::CF_STATIC_OBJECT; - m_inverseMass = 0.f; + m_inverseMass = btScalar(0.); } else { m_collisionFlags &= (~btCollisionObject::CF_STATIC_OBJECT); - m_inverseMass = 1.0f / mass; + m_inverseMass = btScalar(1.0) / mass; } - m_invInertiaLocal.setValue(inertia[0] != 0.0f ? 1.0f / inertia[0]: 0.0f, - inertia[1] != 0.0f ? 1.0f / inertia[1]: 0.0f, - inertia[2] != 0.0f ? 1.0f / inertia[2]: 0.0f); + m_invInertiaLocal.setValue(inertia.x() != btScalar(0.0) ? btScalar(1.0) / inertia.x(): btScalar(0.0), + inertia.y() != btScalar(0.0) ? btScalar(1.0) / inertia.y(): btScalar(0.0), + inertia.z() != btScalar(0.0) ? btScalar(1.0) / inertia.z(): btScalar(0.0)); } @@ -276,7 +278,7 @@ void btRigidBody::integrateVelocities(btScalar step) #define MAX_ANGVEL SIMD_HALF_PI /// clamp angular velocity. collision calculations will fail on higher angular velocities - float angvel = m_angularVelocity.length(); + btScalar angvel = m_angularVelocity.length(); if (angvel*step > MAX_ANGVEL) { m_angularVelocity *= (MAX_ANGVEL/step) /angvel; @@ -295,7 +297,7 @@ btQuaternion btRigidBody::getOrientation() const void btRigidBody::setCenterOfMassTransform(const btTransform& xform) { - m_interpolationWorldTransform = m_worldTransform; + m_interpolationWorldTransform = xform;//m_worldTransform; m_interpolationLinearVelocity = getLinearVelocity(); m_interpolationAngularVelocity = getAngularVelocity(); m_worldTransform = xform; diff --git a/extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.h b/extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.h index 43869363cdf..9da545adb68 100644 --- a/extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.h +++ b/extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.h @@ -16,26 +16,22 @@ subject to the following restrictions: #ifndef RIGIDBODY_H #define RIGIDBODY_H -#include <vector> -#include <LinearMath/btPoint3.h> -#include <LinearMath/btTransform.h> -#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" - - -#include "BulletCollision/CollisionDispatch/btCollisionObject.h" +#include "../../LinearMath/btPoint3.h" +#include "../../LinearMath/btTransform.h" +#include "../../BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" +#include "../../BulletCollision/CollisionDispatch/btCollisionObject.h" class btCollisionShape; class btMotionState; -extern float gLinearAirDamping; -extern bool gUseEpa; +extern btScalar gLinearAirDamping; -extern float gDeactivationTime; +extern btScalar gDeactivationTime; extern bool gDisableDeactivation; -extern float gLinearSleepingThreshold; -extern float gAngularSleepingThreshold; +extern btScalar gLinearSleepingThreshold; +extern btScalar gAngularSleepingThreshold; /// btRigidBody class for btRigidBody Dynamics @@ -65,10 +61,10 @@ public: #ifdef OBSOLETE_MOTIONSTATE_LESS //not supported, please use btMotionState - btRigidBody(float mass, const btTransform& worldTransform, btCollisionShape* collisionShape, const btVector3& localInertia=btVector3(0,0,0),btScalar linearDamping=0.f,btScalar angularDamping=0.f,btScalar friction=0.5f,btScalar restitution=0.f); + btRigidBody(btScalar mass, const btTransform& worldTransform, btCollisionShape* collisionShape, const btVector3& localInertia=btVector3(0,0,0),btScalar linearDamping=btScalar(0.),btScalar angularDamping=btScalar(0.),btScalar friction=btScalar(0.5),btScalar restitution=btScalar(0.)); #endif //OBSOLETE_MOTIONSTATE_LESS - btRigidBody(float mass, btMotionState* motionState, btCollisionShape* collisionShape, const btVector3& localInertia=btVector3(0,0,0),btScalar linearDamping=0.f,btScalar angularDamping=0.f,btScalar friction=0.5f,btScalar restitution=0.f); + btRigidBody(btScalar mass, btMotionState* motionState, btCollisionShape* collisionShape, const btVector3& localInertia=btVector3(0,0,0),btScalar linearDamping=btScalar(0.),btScalar angularDamping=btScalar(0.),btScalar friction=btScalar(0.5),btScalar restitution=btScalar(0.)); void proceedToTransform(const btTransform& newTrans); @@ -157,7 +153,7 @@ public: void applyImpulse(const btVector3& impulse, const btVector3& rel_pos) { - if (m_inverseMass != 0.f) + if (m_inverseMass != btScalar(0.)) { applyCentralImpulse(impulse); if (m_angularFactor) @@ -168,9 +164,9 @@ public: } //Optimization for the iterative solver: avoid calculating constant terms involving inertia, normal, relative position - inline void internalApplyImpulse(const btVector3& linearComponent, const btVector3& angularComponent,float impulseMagnitude) + inline void internalApplyImpulse(const btVector3& linearComponent, const btVector3& angularComponent,btScalar impulseMagnitude) { - if (m_inverseMass != 0.f) + if (m_inverseMass != btScalar(0.)) { m_linearVelocity += linearComponent*impulseMagnitude; if (m_angularFactor) @@ -182,8 +178,8 @@ public: void clearForces() { - m_totalForce.setValue(0.0f, 0.0f, 0.0f); - m_totalTorque.setValue(0.0f, 0.0f, 0.0f); + m_totalForce.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0)); + m_totalTorque.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0)); } void updateInertiaTensor(); @@ -238,7 +234,7 @@ public: - inline float computeImpulseDenominator(const btPoint3& pos, const btVector3& normal) const + inline btScalar computeImpulseDenominator(const btPoint3& pos, const btVector3& normal) const { btVector3 r0 = pos - getCenterOfMassPosition(); @@ -250,13 +246,13 @@ public: } - inline float computeAngularImpulseDenominator(const btVector3& axis) const + inline btScalar computeAngularImpulseDenominator(const btVector3& axis) const { btVector3 vec = axis * getInvInertiaTensorWorld(); return axis.dot(vec); } - inline void updateDeactivation(float timeStep) + inline void updateDeactivation(btScalar timeStep) { if ( (getActivationState() == ISLAND_SLEEPING) || (getActivationState() == DISABLE_DEACTIVATION)) return; @@ -267,7 +263,7 @@ public: m_deactivationTime += timeStep; } else { - m_deactivationTime=0.f; + m_deactivationTime=btScalar(0.); setActivationState(0); } @@ -280,7 +276,7 @@ public: return false; //disable deactivation - if (gDisableDeactivation || (gDeactivationTime == 0.f)) + if (gDisableDeactivation || (gDeactivationTime == btScalar(0.))) return false; if ( (getActivationState() == ISLAND_SLEEPING) || (getActivationState() == WANTS_DEACTIVATION)) @@ -328,11 +324,11 @@ public: int m_contactSolverType; int m_frictionSolverType; - void setAngularFactor(float angFac) + void setAngularFactor(btScalar angFac) { m_angularFactor = angFac; } - float getAngularFactor() const + btScalar getAngularFactor() const { return m_angularFactor; } diff --git a/extern/bullet2/src/BulletDynamics/Dynamics/btSimpleDynamicsWorld.cpp b/extern/bullet2/src/BulletDynamics/Dynamics/btSimpleDynamicsWorld.cpp index fe0124c041a..4ebcb8e7517 100644 --- a/extern/bullet2/src/BulletDynamics/Dynamics/btSimpleDynamicsWorld.cpp +++ b/extern/bullet2/src/BulletDynamics/Dynamics/btSimpleDynamicsWorld.cpp @@ -22,6 +22,14 @@ subject to the following restrictions: #include "BulletDynamics/ConstraintSolver/btContactSolverInfo.h" +/* + Make sure this dummy function never changes so that it + can be used by probes that are checking whether the + library is actually installed. +*/ +extern "C" void btBulletDynamicsProbe () {} + + btSimpleDynamicsWorld::btSimpleDynamicsWorld(btDispatcher* dispatcher,btOverlappingPairCache* pairCache,btConstraintSolver* constraintSolver) @@ -41,8 +49,12 @@ btSimpleDynamicsWorld::~btSimpleDynamicsWorld() delete m_constraintSolver; } -int btSimpleDynamicsWorld::stepSimulation( float timeStep,int maxSubSteps, float fixedTimeStep) +int btSimpleDynamicsWorld::stepSimulation( btScalar timeStep,int maxSubSteps, btScalar fixedTimeStep) { + (void)fixedTimeStep; + (void)maxSubSteps; + + ///apply gravity, predict motion predictUnconstraintMotion(timeStep); @@ -63,7 +75,7 @@ int btSimpleDynamicsWorld::stepSimulation( float timeStep,int maxSubSteps, floa btContactSolverInfo infoGlobal; infoGlobal.m_timeStep = timeStep; - m_constraintSolver->solveGroup(manifoldPtr, numManifolds,0,0,infoGlobal,m_debugDrawer); + m_constraintSolver->solveGroup(0,0,manifoldPtr, numManifolds,0,0,infoGlobal,m_debugDrawer, m_stackAlloc); } ///integrate transforms @@ -81,7 +93,7 @@ int btSimpleDynamicsWorld::stepSimulation( float timeStep,int maxSubSteps, floa void btSimpleDynamicsWorld::setGravity(const btVector3& gravity) { m_gravity = gravity; - for (unsigned int i=0;i<m_collisionObjects.size();i++) + for ( int i=0;i<m_collisionObjects.size();i++) { btCollisionObject* colObj = m_collisionObjects[i]; btRigidBody* body = btRigidBody::upcast(colObj); @@ -110,7 +122,7 @@ void btSimpleDynamicsWorld::addRigidBody(btRigidBody* body) void btSimpleDynamicsWorld::updateAabbs() { btTransform predictedTrans; - for (unsigned int i=0;i<m_collisionObjects.size();i++) + for ( int i=0;i<m_collisionObjects.size();i++) { btCollisionObject* colObj = m_collisionObjects[i]; btRigidBody* body = btRigidBody::upcast(colObj); @@ -127,10 +139,10 @@ void btSimpleDynamicsWorld::updateAabbs() } } -void btSimpleDynamicsWorld::integrateTransforms(float timeStep) +void btSimpleDynamicsWorld::integrateTransforms(btScalar timeStep) { btTransform predictedTrans; - for (unsigned int i=0;i<m_collisionObjects.size();i++) + for ( int i=0;i<m_collisionObjects.size();i++) { btCollisionObject* colObj = m_collisionObjects[i]; btRigidBody* body = btRigidBody::upcast(colObj); @@ -147,9 +159,9 @@ void btSimpleDynamicsWorld::integrateTransforms(float timeStep) -void btSimpleDynamicsWorld::predictUnconstraintMotion(float timeStep) +void btSimpleDynamicsWorld::predictUnconstraintMotion(btScalar timeStep) { - for (unsigned int i=0;i<m_collisionObjects.size();i++) + for ( int i=0;i<m_collisionObjects.size();i++) { btCollisionObject* colObj = m_collisionObjects[i]; btRigidBody* body = btRigidBody::upcast(colObj); @@ -172,7 +184,7 @@ void btSimpleDynamicsWorld::predictUnconstraintMotion(float timeStep) void btSimpleDynamicsWorld::synchronizeMotionStates() { //todo: iterate over awake simulation islands! - for (unsigned int i=0;i<m_collisionObjects.size();i++) + for ( int i=0;i<m_collisionObjects.size();i++) { btCollisionObject* colObj = m_collisionObjects[i]; btRigidBody* body = btRigidBody::upcast(colObj); diff --git a/extern/bullet2/src/BulletDynamics/Dynamics/btSimpleDynamicsWorld.h b/extern/bullet2/src/BulletDynamics/Dynamics/btSimpleDynamicsWorld.h index cdc0c5559f6..25f4ccd8e68 100644 --- a/extern/bullet2/src/BulletDynamics/Dynamics/btSimpleDynamicsWorld.h +++ b/extern/bullet2/src/BulletDynamics/Dynamics/btSimpleDynamicsWorld.h @@ -37,9 +37,9 @@ protected: btIDebugDraw* m_debugDrawer; - void predictUnconstraintMotion(float timeStep); + void predictUnconstraintMotion(btScalar timeStep); - void integrateTransforms(float timeStep); + void integrateTransforms(btScalar timeStep); btVector3 m_gravity; @@ -53,7 +53,7 @@ public: virtual ~btSimpleDynamicsWorld(); ///maxSubSteps/fixedTimeStep for interpolation is currently ignored for btSimpleDynamicsWorld, use btDiscreteDynamicsWorld instead - virtual int stepSimulation( float timeStep,int maxSubSteps=1, float fixedTimeStep=1.f/60.f); + virtual int stepSimulation( btScalar timeStep,int maxSubSteps=1, btScalar fixedTimeStep=btScalar(1.)/btScalar(60.)); virtual void setDebugDrawer(btIDebugDraw* debugDrawer) { |