Bullet Collision Detection & Physics Library
|
Go to the documentation of this file.
57 if (((colObj0) && (!(colObj0)->isStaticOrKinematicObject())) &&
58 ((colObj1) && (!(colObj1)->isStaticOrKinematicObject())))
68 for (i = 0; i < numConstraints; i++)
76 if (((colObj0) && (!(colObj0)->isStaticOrKinematicObject())) &&
77 ((colObj1) && (!(colObj1)->isStaticOrKinematicObject())))
96 if (((cur) && (!(cur)->isStaticOrKinematicObject())) &&
97 ((prev) && (!(prev)->isStaticOrKinematicObject())))
116 if (tagA >= 0 && tagB >= 0)
127 BT_PROFILE(
"btMultiBodyDynamicsWorld::updateActivationState");
179 m_multiBodyConstraintSolver(constraintSolver)
239 bool isSleeping =
false;
264 bool isConstraintPass =
true;
310 #ifndef BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
317 bool isSleeping =
false;
345 #endif //BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
353 bool isSleeping =
false;
371 bool doNotUpdatePos =
false;
372 bool isConstraintPass =
false;
387 scratch_r2.
resize(2 * numPosVars + 8 * numDofs);
410 btAssert((pMem - (2 * numPosVars + 8 * numDofs)) == &scratch_r2[0]);
422 for (
int link = 0; link < bod->
getNumLinks(); ++link)
428 for (
int dof = 0; dof < numDofs; ++dof)
439 scratch_qx[dof] = scratch_q0[dof];
441 } pResetQx = {bod, scratch_qx, scratch_q0};
447 for (
int i = 0; i <
size; ++i)
448 pVal[i] = pCurVal[i] + dt * pDer[i];
459 for (
int i = 0; i < pBody->
getNumDofs() + 6; ++i)
462 } pCopyToVelocityVector;
468 for (
int i = 0; i <
size; ++i)
469 pDst[i] = pSrc[start + i];
475 #define output &m_scratch_r[bod->getNumDofs()]
478 isConstraintPass,
getSolverInfo().m_jointFeedbackInWorldSpace,
480 pCopy(
output, scratch_qdd0, 0, numDofs);
485 pEulerIntegrate(
btScalar(.5) * h, scratch_qdd0, scratch_qd0, scratch_qd1, numDofs);
488 pCopyToVelocityVector(bod, scratch_qd1);
490 isConstraintPass,
getSolverInfo().m_jointFeedbackInWorldSpace,
492 pCopy(
output, scratch_qdd1, 0, numDofs);
497 pEulerIntegrate(
btScalar(.5) * h, scratch_qdd1, scratch_qd0, scratch_qd2, numDofs);
500 pCopyToVelocityVector(bod, scratch_qd2);
502 isConstraintPass,
getSolverInfo().m_jointFeedbackInWorldSpace,
504 pCopy(
output, scratch_qdd2, 0, numDofs);
509 pEulerIntegrate(h, scratch_qdd2, scratch_qd0, scratch_qd3, numDofs);
512 pCopyToVelocityVector(bod, scratch_qd3);
514 isConstraintPass,
getSolverInfo().m_jointFeedbackInWorldSpace,
516 pCopy(
output, scratch_qdd3, 0, numDofs);
525 for (
int i = 0; i < numDofs; ++i)
527 delta_q[i] = h /
btScalar(6.) * (scratch_qd0[i] + 2 * scratch_qd1[i] + 2 * scratch_qd2[i] + scratch_qd3[i]);
528 delta_qd[i] = h /
btScalar(6.) * (scratch_qdd0[i] + 2 * scratch_qdd1[i] + 2 * scratch_qdd2[i] + scratch_qdd3[i]);
533 pCopyToVelocityVector(bod, scratch_qd0);
541 for (
int i = 0; i < numDofs; ++i)
542 pRealBuf[i] = delta_q[i];
550 for (
int link = 0; link < bod->
getNumLinks(); ++link)
553 isConstraintPass,
getSolverInfo().m_jointFeedbackInWorldSpace,
559 #ifndef BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
561 #endif //BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
582 bool isSleeping =
false;
629 bool isSleeping =
false;
672 BT_PROFILE(
"btMultiBodyDynamicsWorld debugDrawWorld");
676 bool drawConstraints =
false;
682 drawConstraints =
true;
749 #ifdef BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
755 bool isSleeping =
false;
777 #endif //BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
796 bool isSleeping =
false;
820 #ifdef BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
btIDebugDraw * m_debugDrawer
btAlignedObjectArray< btTypedConstraint * > m_constraints
virtual void setMultiBodyConstraintSolver(btMultiBodyConstraintSolver *solver)
TypedConstraint is the baseclass for Bullet constraints and vehicles.
btCollisionObject can be used to manage collision detection objects.
virtual void setConstraintSolver(btConstraintSolver *solver)
btSpatialMotionVector m_axes[6]
virtual void storeIslandActivationState(btCollisionWorld *world)
The btRigidBody is the main class for rigid body objects.
void predictPositionsMultiDof(btScalar dt)
const btScalar & y() const
Return the y value.
virtual void processConstraints(int islandId=-1)
#define DISABLE_DEACTIVATION
virtual void calculateSimulationIslands()
virtual void addMultiBodyConstraint(btMultiBodyConstraint *constraint)
void updateCollisionObjectInterpolationWorldTransforms(btAlignedObjectArray< btQuaternion > &world_to_local, btAlignedObjectArray< btVector3 > &local_origin)
btAlignedObjectArray< btQuaternion > m_scratch_world_to_local
virtual void solveExternalForces(btContactSolverInfo &solverInfo)
virtual btIDebugDraw * getDebugDrawer()
void processDeltaVeeMultiDof2()
void buildAndProcessIslands(btDispatcher *dispatcher, btCollisionWorld *collisionWorld, IslandCallback *callback)
btAlignedObjectArray< btTypedConstraint * > m_sortedConstraints
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
btAlignedObjectArray< btVector3 > m_scratch_local_origin1
virtual const char * serialize(void *dataBuffer, class btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure)
const btRigidBody & getRigidBodyA() const
bool internalNeedsJointFeedback() const
The btDispatcher interface class can be used in combination with broadphase to dispatch calculations ...
btSimulationIslandManager * m_islandManager
virtual void clearMultiBodyConstraintForces()
void setMultiBodyConstraintSolver(btMultiBodyConstraintSolver *solver)
void quickSort(const L &CompareFunc)
const btQuaternion & getWorldToBaseRot() const
const btCollisionObject * getBody0() const
void clearConstraintForces()
virtual int getIslandIdB() const =0
bool isPosUpdated() const
btAlignedObjectArray< btCollisionObject * > m_collisionObjects
virtual void solveInternalConstraints(btContactSolverInfo &solverInfo)
virtual int getDebugMode() const =0
virtual void drawTransform(const btTransform &transform, btScalar orthoLen)
virtual void debugDraw(class btIDebugDraw *drawer)=0
btContactSolverInfo & getSolverInfo()
void updateCollisionObjectWorldTransforms(btAlignedObjectArray< btQuaternion > &world_to_local, btAlignedObjectArray< btVector3 > &local_origin)
MultiBodyInplaceSolverIslandCallback * m_solverMultiBodyIslandCallback
int getActivationState() const
virtual int calculateSerializeBufferSize() const
void serializeContactManifolds(btSerializer *serializer)
#define BT_MULTIBODY_CODE
const btScalar & w() const
Return the w value.
btSimulationIslandManager * getSimulationIslandManager()
#define BT_MB_LINKCOLLIDER_CODE
btTransform getBaseWorldTransform() const
bool isUsingRK4Integration() const
void stepPositionsMultiDof(btScalar dt, btScalar *pq=0, btScalar *pqd=0)
virtual void solveConstraints(btContactSolverInfo &solverInfo)
btTransform m_cachedWorldTransform
const btScalar & y() const
Return the y value.
const btRigidBody & getRigidBodyB() const
bool isStaticOrKinematicObject() const
void applyDeltaVeeMultiDof(const btScalar *delta_vee, btScalar multiplier)
virtual void clearForces()
the forces on each rigidbody is accumulating together with gravity. clear this after each timestep.
btAlignedObjectArray< btScalar > m_scratch_r
virtual void setup(btContactSolverInfo *solverInfo, btTypedConstraint **sortedConstraints, int numConstraints, btMultiBodyConstraint **sortedMultiBodyConstraints, int numMultiBodyConstraints, btIDebugDraw *debugDrawer)
virtual btConstraintSolverType getSolverType() const =0
void clearForcesAndTorques()
void addLinkForce(int i, const btVector3 &f)
btCollisionWorld * getCollisionWorld()
virtual void debugDrawWorld()
virtual void integrateTransforms(btScalar timeStep)
void checkMotionAndSleepIfRequired(btScalar timestep)
btAlignedObjectArray< btMultiBody * > m_multiBodies
void resize(int newsize, const T &fillData=T())
virtual void debugDrawWorld()
void addBaseForce(const btVector3 &f)
btAlignedObjectArray< btVector3 > m_scratch_local_origin
btScalar getBaseMass() const
virtual void allSolved(const btContactSolverInfo &, class btIDebugDraw *)
int getNumCollisionObjects() const
virtual int calculateSerializeBufferSize() const
virtual void predictUnconstraintMotion(btScalar timeStep)
void setDeactivationTime(btScalar time)
virtual int getIslandIdA() const =0
virtual void finalizeChunk(btChunk *chunk, const char *structType, int chunkCode, void *oldPtr)=0
virtual void predictUnconstraintMotion(btScalar timeStep)
btMultiBodyConstraintSolver * m_multiBodyConstraintSolver
const btMultibodyLink & getLink(int index) const
btVector3 can be used to represent 3D points and vectors.
btAlignedObjectArray< btMultiBodyConstraint * > m_sortedMultiBodyConstraints
virtual void removeMultiBodyConstraint(btMultiBodyConstraint *constraint)
btAlignedObjectArray< btPersistentManifold * > m_predictiveManifolds
int getNumPosVars() const
virtual void updateActivationState(btCollisionWorld *colWorld, btDispatcher *dispatcher)
btPersistentManifold is a contact point cache, it stays persistent as long as objects are overlapping...
virtual void applyGravity()
apply gravity, call this once per timestep
btAlignedObjectArray< btVector3 > m_scratch_v
virtual void finishSerialization()=0
btAlignedObjectArray< btSolverAnalyticsData > m_islandAnalyticsData
virtual void startSerialization()=0
class btMultiBodyLinkCollider * m_collider
void predictMultiBodyTransforms(btScalar timeStep)
virtual void drawLine(const btVector3 &from, const btVector3 &to, const btVector3 &color)=0
const btScalar & x() const
Return the x value.
virtual void applyGravity()
apply gravity, call this once per timestep
btScalar getLinkMass(int i) const
void computeAccelerationsArticulatedBodyAlgorithmMultiDof(btScalar dt, btAlignedObjectArray< btScalar > &scratch_r, btAlignedObjectArray< btVector3 > &scratch_v, btAlignedObjectArray< btMatrix3x3 > &scratch_m, bool isConstraintPass, bool jointFeedbackInWorldSpace, bool jointFeedbackInJointFrame)
virtual const char * serialize(void *dataBuffer, class btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure)
virtual void integrateTransforms(btScalar timeStep)
void setPosUpdated(bool updated)
btAlignedObjectArray< btMatrix3x3 > m_scratch_m
const btScalar & x() const
Return the x value.
virtual ~btMultiBodyDynamicsWorld()
eFeatherstoneJointType m_jointType
void integrateMultiBodyTransforms(btScalar timeStep)
btMultiBodyDynamicsWorld(btDispatcher *dispatcher, btBroadphaseInterface *pairCache, btMultiBodyConstraintSolver *constraintSolver, btCollisionConfiguration *collisionConfiguration)
The btBroadphaseInterface class provides an interface to detect aabb-overlapping object pairs.
void updateCacheMultiDof(btScalar *pq=0)
void forwardKinematics(btAlignedObjectArray< btQuaternion > &world_to_local, btAlignedObjectArray< btVector3 > &local_origin)
virtual void setConstraintSolver(btConstraintSolver *solver)
const btScalar * getVelocityVector() const
int getInternalType() const
reserved for Bullet internal usage
btConstraintSolver * m_constraintSolver
btAlignedObjectArray< btMultiBodyConstraint * > m_multiBodyConstraints
virtual int getNumConstraints() const
#define WANTS_DEACTIVATION
void serializeRigidBodies(btSerializer *serializer)
virtual void clearMultiBodyForces()
btDispatcher * getDispatcher()
void serializeCollisionObjects(btSerializer *serializer)
const btCollisionObject * getBody1() const
btUnionFind & getUnionFind()
btDiscreteDynamicsWorld provides discrete rigid body simulation those classes replace the obsolete Cc...
virtual void updateActivationState(btScalar timeStep)
virtual void debugDrawMultiBodyConstraint(btMultiBodyConstraint *constraint)
virtual void serialize(btSerializer *serializer)
Preliminary serialization test for Bullet 2.76. Loading those files requires a separate parser (see B...
void push_back(const T &_Val)
const btScalar & z() const
Return the z value.
virtual void prepareSolve(int, int)
virtual void serializeMultiBodies(btSerializer *serializer)
const btVector3 & getBasePos() const
btCollisionConfiguration allows to configure Bullet collision detection stack allocator size,...
virtual void updateActivationState(btScalar timeStep)
virtual void getAnalyticsData(btAlignedObjectArray< struct btSolverAnalyticsData > &m_islandAnalyticsData) const
void remove(const T &key)
virtual void removeMultiBody(btMultiBody *body)
const btMultiBodyLinkCollider * getBaseCollider() const
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
btAlignedObjectArray< btQuaternion > m_scratch_world_to_local1
virtual btChunk * allocate(size_t size, int numElements)=0
void serializeDynamicsWorldInfo(btSerializer *serializer)
const btScalar & z() const
Return the z value.
virtual void clearForces()
the forces on each rigidbody is accumulating together with gravity. clear this after each timestep.
void setActivationState(int newState) const
int size() const
return the number of elements in the array
virtual void addMultiBody(btMultiBody *body, int group=btBroadphaseProxy::DefaultFilter, int mask=btBroadphaseProxy::AllFilter)
btVector3 quatRotate(const btQuaternion &rotation, const btVector3 &v)