68 for (i = 0; i < numConstraints; i++)
96 if (((
cur) && (!(
cur)->isStaticOrKinematicObject())) &&
97 ((prev) && (!(prev)->isStaticOrKinematicObject())))
103 if (
cur && !
cur->isStaticOrKinematicObject())
127 BT_PROFILE(
"btMultiBodyDynamicsWorld::updateActivationState");
148 col->setDeactivationTime(0.f);
156 col->setDeactivationTime(0.f);
246 bool isSleeping =
false;
252 for (
int b = 0; b <
bod->getNumLinks(); b++)
254 if (
bod->getLink(b).m_collider &&
bod->getLink(b).m_collider->getActivationState() ==
ISLAND_SLEEPING)
265 if (
bod->internalNeedsJointFeedback())
267 if (!
bod->isUsingRK4Integration())
269 if (
bod->internalNeedsJointFeedback())
284 bod->processDeltaVeeMultiDof2();
317#ifndef BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
324 bool isSleeping =
false;
330 for (
int b = 0; b <
bod->getNumLinks(); b++)
332 if (
bod->getLink(b).m_collider &&
bod->getLink(b).m_collider->getActivationState() ==
ISLAND_SLEEPING)
345 for (
int j = 0;
j <
bod->getNumLinks(); ++
j)
360 bool isSleeping =
false;
366 for (
int b = 0; b <
bod->getNumLinks(); b++)
368 if (
bod->getLink(b).m_collider &&
bod->getLink(b).m_collider->getActivationState() ==
ISLAND_SLEEPING)
381 if (!
bod->isUsingRK4Integration())
383 bod->computeAccelerationsArticulatedBodyAlgorithmMultiDof(
solverInfo.m_timeStep,
429 for (
int link = 0; link <
bod->getNumLinks(); ++link)
431 for (
int dof = 0;
dof <
bod->getLink(link).m_posVarCount; ++
dof)
445 for (
int dof = 0;
dof <
bod->getNumPosVars() + 7; ++
dof)
454 for (
int i = 0; i <
size; ++i)
466 for (
int i = 0; i <
pBody->getNumDofs() + 6; ++i)
475 for (
int i = 0; i <
size; ++i)
482#define output &m_scratch_r[bod->getNumDofs()]
532 for (
int i = 0; i <
numDofs; ++i)
548 for (
int i = 0; i <
numDofs; ++i)
552 bod->setPosUpdated(
true);
557 for (
int link = 0; link <
bod->getNumLinks(); ++link)
558 bod->getLink(link).updateCacheMultiDof();
566#ifndef BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
567 bod->clearForcesAndTorques();
589 bool isSleeping =
false;
594 for (
int b = 0; b <
bod->getNumLinks(); b++)
596 if (
bod->getLink(b).m_collider &&
bod->getLink(b).m_collider->getActivationState() ==
ISLAND_SLEEPING)
606 if (!
bod->isPosUpdated())
607 bod->stepPositionsMultiDof(timeStep);
614 bod->setPosUpdated(
false);
621 bod->substractSplitV();
625 bod->clearVelocities();
638 bool isSleeping =
false;
643 for (
int b = 0; b <
bod->getNumLinks(); b++)
645 if (
bod->getLink(b).m_collider &&
bod->getLink(b).m_collider->getActivationState() ==
ISLAND_SLEEPING)
652 bod->predictPositionsMultiDof(timeStep);
659 bod->clearVelocities();
681 BT_PROFILE(
"btMultiBodyDynamicsWorld debugDrawWorld");
714 for (
int m = 0;
m <
bod->getNumLinks();
m++)
758#ifdef BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
764 bool isSleeping =
false;
770 for (
int b = 0; b <
bod->getNumLinks(); b++)
772 if (
bod->getLink(b).m_collider &&
bod->getLink(b).m_collider->getActivationState() ==
ISLAND_SLEEPING)
780 for (
int j = 0;
j <
bod->getNumLinks(); ++
j)
794 bod->clearConstraintForces();
805 bool isSleeping =
false;
811 for (
int b = 0; b <
bod->getNumLinks(); b++)
813 if (
bod->getLink(b).m_collider &&
bod->getLink(b).m_collider->getActivationState() ==
ISLAND_SLEEPING)
820 bod->clearForcesAndTorques();
829#ifdef BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
859 int len =
mb->calculateSerializeBufferSize();
872 int len =
colObj->calculateSerializeBufferSize();
#define DISABLE_DEACTIVATION
#define FIXED_BASE_MULTI_BODY
#define WANTS_DEACTIVATION
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
const T & btMax(const T &a, const T &b)
btVector3 quatRotate(const btQuaternion &rotation, const btVector3 &v)
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
#define BT_MULTIBODY_CODE
#define BT_MB_LINKCOLLIDER_CODE
The btAlignedObjectArray template class uses a subset of the stl::vector interface for its methods It...
int size() const
return the number of elements in the array
void resize(int newsize, const T &fillData=T())
void remove(const T &key)
void quickSort(const L &CompareFunc)
void push_back(const T &_Val)
The btBroadphaseInterface class provides an interface to detect aabb-overlapping object pairs.
btCollisionConfiguration allows to configure Bullet collision detection stack allocator size,...
btCollisionObject can be used to manage collision detection objects.
void setActivationState(int newState) const
btDispatcher * getDispatcher()
virtual btIDebugDraw * getDebugDrawer()
btAlignedObjectArray< btCollisionObject * > m_collisionObjects
int getNumCollisionObjects() const
btIDebugDraw * m_debugDrawer
void serializeContactManifolds(btSerializer *serializer)
void serializeCollisionObjects(btSerializer *serializer)
virtual btConstraintSolverType getSolverType() const =0
virtual void allSolved(const btContactSolverInfo &, class btIDebugDraw *)
virtual void prepareSolve(int, int)
btDiscreteDynamicsWorld provides discrete rigid body simulation those classes replace the obsolete Cc...
btAlignedObjectArray< btPersistentManifold * > m_predictiveManifolds
virtual void integrateTransforms(btScalar timeStep)
void serializeRigidBodies(btSerializer *serializer)
void serializeDynamicsWorldInfo(btSerializer *serializer)
btAlignedObjectArray< btTypedConstraint * > m_sortedConstraints
virtual void setConstraintSolver(btConstraintSolver *solver)
virtual void saveKinematicState(btScalar timeStep)
virtual void applyGravity()
apply gravity, call this once per timestep
btSimulationIslandManager * m_islandManager
btAlignedObjectArray< btTypedConstraint * > m_constraints
virtual int getNumConstraints() const
btSimulationIslandManager * getSimulationIslandManager()
virtual void updateActivationState(btScalar timeStep)
btConstraintSolver * m_constraintSolver
virtual void debugDrawWorld()
btCollisionWorld * getCollisionWorld()
virtual void clearForces()
the forces on each rigidbody is accumulating together with gravity. clear this after each timestep.
virtual void predictUnconstraintMotion(btScalar timeStep)
The btDispatcher interface class can be used in combination with broadphase to dispatch calculations ...
btContactSolverInfo & getSolverInfo()
virtual void drawLine(const btVector3 &from, const btVector3 &to, const btVector3 &color)=0
virtual void drawTransform(const btTransform &transform, btScalar orthoLen)
virtual int getDebugMode() const =0
@ DBG_DrawConstraintLimits
virtual int getIslandIdA() const =0
virtual int getIslandIdB() const =0
btAlignedObjectArray< btMultiBodyConstraint * > m_multiBodyConstraints
virtual void clearForces()
the forces on each rigidbody is accumulating together with gravity. clear this after each timestep.
virtual void solveInternalConstraints(btContactSolverInfo &solverInfo)
virtual void updateActivationState(btScalar timeStep)
btAlignedObjectArray< btQuaternion > m_scratch_world_to_local
btAlignedObjectArray< btQuaternion > m_scratch_world_to_local1
btAlignedObjectArray< btMatrix3x3 > m_scratch_m
MultiBodyInplaceSolverIslandCallback * m_solverMultiBodyIslandCallback
virtual void serialize(btSerializer *serializer)
Preliminary serialization test for Bullet 2.76. Loading those files requires a separate parser (see B...
virtual ~btMultiBodyDynamicsWorld()
btAlignedObjectArray< btVector3 > m_scratch_local_origin1
virtual void serializeMultiBodies(btSerializer *serializer)
virtual void addMultiBodyConstraint(btMultiBodyConstraint *constraint)
btAlignedObjectArray< btVector3 > m_scratch_v
virtual void predictUnconstraintMotion(btScalar timeStep)
virtual void calculateSimulationIslands()
virtual void removeMultiBodyConstraint(btMultiBodyConstraint *constraint)
void predictMultiBodyTransforms(btScalar timeStep)
virtual void integrateTransforms(btScalar timeStep)
btMultiBodyConstraintSolver * m_multiBodyConstraintSolver
btAlignedObjectArray< btMultiBody * > m_multiBodies
virtual void getAnalyticsData(btAlignedObjectArray< struct btSolverAnalyticsData > &m_islandAnalyticsData) const
virtual void solveConstraints(btContactSolverInfo &solverInfo)
void integrateMultiBodyTransforms(btScalar timeStep)
virtual void debugDrawMultiBodyConstraint(btMultiBodyConstraint *constraint)
virtual void solveExternalForces(btContactSolverInfo &solverInfo)
virtual void setConstraintSolver(btConstraintSolver *solver)
btAlignedObjectArray< btVector3 > m_scratch_local_origin
virtual void clearMultiBodyForces()
btAlignedObjectArray< btScalar > m_scratch_r
virtual void removeMultiBody(btMultiBody *body)
btAlignedObjectArray< btMultiBodyConstraint * > m_sortedMultiBodyConstraints
virtual void addMultiBody(btMultiBody *body, int group=btBroadphaseProxy::DefaultFilter, int mask=btBroadphaseProxy::AllFilter)
btMultiBodyDynamicsWorld(btDispatcher *dispatcher, btBroadphaseInterface *pairCache, btMultiBodyConstraintSolver *constraintSolver, btCollisionConfiguration *collisionConfiguration)
virtual void clearMultiBodyConstraintForces()
virtual void saveKinematicState(btScalar timeStep)
virtual void applyGravity()
apply gravity, call this once per timestep
virtual void setMultiBodyConstraintSolver(btMultiBodyConstraintSolver *solver)
virtual void debugDrawWorld()
void computeAccelerationsArticulatedBodyAlgorithmMultiDof(btScalar dt, btAlignedObjectArray< btScalar > &scratch_r, btAlignedObjectArray< btVector3 > &scratch_v, btAlignedObjectArray< btMatrix3x3 > &scratch_m, bool isConstraintPass, bool jointFeedbackInWorldSpace, bool jointFeedbackInJointFrame)
const btMultibodyLink & getLink(int index) const
void checkMotionAndSleepIfRequired(btScalar timestep)
bool isBaseKinematic() const
bool hasFixedBase() const
const btMultiBodyLinkCollider * getBaseCollider() const
void saveKinematicState(btScalar timeStep)
btPersistentManifold is a contact point cache, it stays persistent as long as objects are overlapping...
The btRigidBody is the main class for rigid body objects.
virtual void storeIslandActivationState(btCollisionWorld *world)
virtual void updateActivationState(btCollisionWorld *colWorld, btDispatcher *dispatcher)
void buildAndProcessIslands(btDispatcher *dispatcher, btCollisionWorld *collisionWorld, IslandCallback *callback)
btUnionFind & getUnionFind()
TypedConstraint is the baseclass for Bullet constraints and vehicles.
btVector3 can be used to represent 3D points and vectors.
virtual void processConstraints(int islandId=-1)
virtual void setup(btContactSolverInfo *solverInfo, btTypedConstraint **sortedConstraints, int numConstraints, btMultiBodyConstraint **sortedMultiBodyConstraints, int numMultiBodyConstraints, btIDebugDraw *debugDrawer)
void setMultiBodyConstraintSolver(btMultiBodyConstraintSolver *solver)
btAlignedObjectArray< btSolverAnalyticsData > m_islandAnalyticsData
class btMultiBodyLinkCollider * m_collider