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");
141 col->setDeactivationTime(0.f);
149 col->setDeactivationTime(0.f);
239 bool isSleeping =
false;
245 for (
int b = 0; b <
bod->getNumLinks(); b++)
247 if (
bod->getLink(b).m_collider &&
bod->getLink(b).m_collider->getActivationState() ==
ISLAND_SLEEPING)
258 if (
bod->internalNeedsJointFeedback())
260 if (!
bod->isUsingRK4Integration())
262 if (
bod->internalNeedsJointFeedback())
277 bod->processDeltaVeeMultiDof2();
310#ifndef BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
317 bool isSleeping =
false;
323 for (
int b = 0; b <
bod->getNumLinks(); b++)
325 if (
bod->getLink(b).m_collider &&
bod->getLink(b).m_collider->getActivationState() ==
ISLAND_SLEEPING)
338 for (
int j = 0;
j <
bod->getNumLinks(); ++
j)
353 bool isSleeping =
false;
359 for (
int b = 0; b <
bod->getNumLinks(); b++)
361 if (
bod->getLink(b).m_collider &&
bod->getLink(b).m_collider->getActivationState() ==
ISLAND_SLEEPING)
374 if (!
bod->isUsingRK4Integration())
376 bod->computeAccelerationsArticulatedBodyAlgorithmMultiDof(
solverInfo.m_timeStep,
422 for (
int link = 0; link <
bod->getNumLinks(); ++link)
424 for (
int dof = 0;
dof <
bod->getLink(link).m_posVarCount; ++
dof)
438 for (
int dof = 0;
dof <
bod->getNumPosVars() + 7; ++
dof)
447 for (
int i = 0; i <
size; ++i)
459 for (
int i = 0; i <
pBody->getNumDofs() + 6; ++i)
468 for (
int i = 0; i <
size; ++i)
475#define output &m_scratch_r[bod->getNumDofs()]
525 for (
int i = 0; i <
numDofs; ++i)
541 for (
int i = 0; i <
numDofs; ++i)
545 bod->setPosUpdated(
true);
550 for (
int link = 0; link <
bod->getNumLinks(); ++link)
551 bod->getLink(link).updateCacheMultiDof();
559#ifndef BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
560 bod->clearForcesAndTorques();
582 bool isSleeping =
false;
587 for (
int b = 0; b <
bod->getNumLinks(); b++)
589 if (
bod->getLink(b).m_collider &&
bod->getLink(b).m_collider->getActivationState() ==
ISLAND_SLEEPING)
599 if (!
bod->isPosUpdated())
600 bod->stepPositionsMultiDof(timeStep);
607 bod->setPosUpdated(
false);
614 bod->substractSplitV();
618 bod->clearVelocities();
631 bool isSleeping =
false;
636 for (
int b = 0; b <
bod->getNumLinks(); b++)
638 if (
bod->getLink(b).m_collider &&
bod->getLink(b).m_collider->getActivationState() ==
ISLAND_SLEEPING)
645 bod->predictPositionsMultiDof(timeStep);
652 bod->clearVelocities();
674 BT_PROFILE(
"btMultiBodyDynamicsWorld debugDrawWorld");
707 for (
int m = 0;
m <
bod->getNumLinks();
m++)
751#ifdef BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
757 bool isSleeping =
false;
763 for (
int b = 0; b <
bod->getNumLinks(); b++)
765 if (
bod->getLink(b).m_collider &&
bod->getLink(b).m_collider->getActivationState() ==
ISLAND_SLEEPING)
773 for (
int j = 0;
j <
bod->getNumLinks(); ++
j)
787 bod->clearConstraintForces();
798 bool isSleeping =
false;
804 for (
int b = 0; b <
bod->getNumLinks(); b++)
806 if (
bod->getLink(b).m_collider &&
bod->getLink(b).m_collider->getActivationState() ==
ISLAND_SLEEPING)
813 bod->clearForcesAndTorques();
822#ifdef BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
852 int len =
mb->calculateSerializeBufferSize();
865 int len =
colObj->calculateSerializeBufferSize();
#define DISABLE_DEACTIVATION
#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 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 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)
const btMultiBodyLinkCollider * getBaseCollider() const
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