92 if (((
cur) && (!(
cur)->isStaticOrKinematicObject())) &&
93 ((prev) && (!(prev)->isStaticOrKinematicObject())))
99 if (
cur && !
cur->isStaticOrKinematicObject())
126 BT_PROFILE(
"btMultiBodyDynamicsWorld::updateActivationState");
142 col->setDeactivationTime(0.f);
150 col->setDeactivationTime(0.f);
286 m_solver->
solveMultiBodyGroup( bodies,
numBodies,
manifolds,
numManifolds,
m_sortedConstraints,
m_numConstraints, &
m_multiBodySortedConstraints[0],
m_numConstraints,*
m_solverInfo,
m_debugDrawer,
m_dispatcher);
371 m_solver->
solveMultiBodyGroup( bodies,
m_bodies.
size(),
manifold,
m_manifolds.
size(),
constraints,
m_constraints.
size() ,
multiBodyConstraints,
m_multiBodyConstraints.
size(), *
m_solverInfo,
m_debugDrawer,
m_dispatcher);
439#ifndef BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
446 bool isSleeping =
false;
452 for (
int b=0;b<
bod->getNumLinks();b++)
467 for (
int j = 0;
j <
bod->getNumLinks(); ++
j)
483 bool isSleeping =
false;
489 for (
int b=0;b<
bod->getNumLinks();b++)
504 if(!
bod->isUsingRK4Integration())
538 for(
int link = 0; link <
bod->getNumLinks(); ++link)
540 for(
int dof = 0;
dof <
bod->getLink(link).m_posVarCount; ++
dof)
563 for(
int i = 0; i <
size; ++i)
575 for(
int i = 0; i <
pBody->getNumDofs() + 6; ++i)
585 for(
int i = 0; i <
size; ++i)
592 #define output &m_scratch_r[bod->getNumDofs()]
632 for(
int i = 0; i <
numDofs; ++i)
648 for(
int i = 0; i <
numDofs; ++i)
652 bod->setPosUpdated(
true);
657 for(
int link = 0; link <
bod->getNumLinks(); ++link)
658 bod->getLink(link).updateCacheMultiDof();
665#ifndef BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
666 bod->clearForcesAndTorques();
684 bool isSleeping =
false;
690 for (
int b=0;b<
bod->getNumLinks();b++)
705 if(!
bod->isUsingRK4Integration())
718 bod->processDeltaVeeMultiDof2();
734 bool isSleeping =
false;
739 for (
int b=0;b<
bod->getNumLinks();b++)
754 if(!
bod->isPosUpdated())
755 bod->stepPositionsMultiDof(timeStep);
762 bod->setPosUpdated(
false);
773 bod->clearVelocities();
799 BT_PROFILE(
"btMultiBodyDynamicsWorld debugDrawWorld");
831 for (
int m = 0;
m<
bod->getNumLinks();
m++)
880#ifdef BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
886 bool isSleeping =
false;
892 for (
int b=0;b<
bod->getNumLinks();b++)
902 for (
int j = 0;
j <
bod->getNumLinks(); ++
j)
916 bod->clearConstraintForces();
927 bool isSleeping =
false;
933 for (
int b=0;b<
bod->getNumLinks();b++)
942 bod->clearForcesAndTorques();
952#ifdef BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
984 int len =
mb->calculateSerializeBufferSize();
#define DISABLE_DEACTIVATION
#define WANTS_DEACTIVATION
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
const T & btMax(const T &a, const T &b)
int btGetConstraintIslandId2(const btTypedConstraint *lhs)
int btGetMultiBodyConstraintIslandId(const btMultiBodyConstraint *lhs)
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 SIMD_FORCE_INLINE
#define BT_MULTIBODY_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()
int getNumCollisionObjects() const
btIDebugDraw * m_debugDrawer
void serializeCollisionObjects(btSerializer *serializer)
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 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.
The btDispatcher interface class can be used in combination with broadphase to dispatch calculations ...
btContactSolverInfo & getSolverInfo()
The btIDebugDraw interface class allows hooking up a debug renderer to visually debug simulations.
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 void solveMultiBodyGroup(btCollisionObject **bodies, int numBodies, btPersistentManifold **manifold, int numManifolds, btTypedConstraint **constraints, int numConstraints, btMultiBodyConstraint **multiBodyConstraints, int numMultiBodyConstraints, const btContactSolverInfo &info, btIDebugDraw *debugDrawer, btDispatcher *dispatcher)
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 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 calculateSimulationIslands()
virtual void removeMultiBodyConstraint(btMultiBodyConstraint *constraint)
virtual void integrateTransforms(btScalar timeStep)
btAlignedObjectArray< btMultiBody * > m_multiBodies
virtual void solveConstraints(btContactSolverInfo &solverInfo)
virtual void debugDrawMultiBodyConstraint(btMultiBodyConstraint *constraint)
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 debugDrawWorld()
void computeAccelerationsArticulatedBodyAlgorithmMultiDof(btScalar dt, btAlignedObjectArray< btScalar > &scratch_r, btAlignedObjectArray< btVector3 > &scratch_v, btAlignedObjectArray< btMatrix3x3 > &scratch_m, bool isConstraintPass=false)
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()
bool operator()(const btTypedConstraint *lhs, const btTypedConstraint *rhs) const
bool operator()(const btMultiBodyConstraint *lhs, const btMultiBodyConstraint *rhs) const
TypedConstraint is the baseclass for Bullet constraints and vehicles.
btVector3 can be used to represent 3D points and vectors.
MultiBodyInplaceSolverIslandCallback & operator=(MultiBodyInplaceSolverIslandCallback &other)
btAlignedObjectArray< btTypedConstraint * > m_constraints
btAlignedObjectArray< btMultiBodyConstraint * > m_multiBodyConstraints
void processConstraints()
virtual void processIsland(btCollisionObject **bodies, int numBodies, btPersistentManifold **manifolds, int numManifolds, int islandId)
btTypedConstraint ** m_sortedConstraints
btContactSolverInfo * m_solverInfo
btMultiBodyConstraint ** m_multiBodySortedConstraints
btAlignedObjectArray< btPersistentManifold * > m_manifolds
btDispatcher * m_dispatcher
void setup(btContactSolverInfo *solverInfo, btTypedConstraint **sortedConstraints, int numConstraints, btMultiBodyConstraint **sortedMultiBodyConstraints, int numMultiBodyConstraints, btIDebugDraw *debugDrawer)
btIDebugDraw * m_debugDrawer
btAlignedObjectArray< btCollisionObject * > m_bodies
int m_numMultiBodyConstraints
MultiBodyInplaceSolverIslandCallback(btMultiBodyConstraintSolver *solver, btDispatcher *dispatcher)
btMultiBodyConstraintSolver * m_solver
class btMultiBodyLinkCollider * m_collider