Blender V4.3
btMultiBodyConstraintSolver.h File Reference

Go to the source code of this file.

Macros

#define DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS
 

Functions

btScalar resolveSingleConstraintRowGeneric (const btMultiBodySolverConstraint &c)
 
btScalar resolveConeFrictionConstraintRows (const btMultiBodySolverConstraint &cA1, const btMultiBodySolverConstraint &cB)
 
void convertContacts (btPersistentManifold **manifoldPtr, int numManifolds, const btContactSolverInfo &infoGlobal)
 
btMultiBodySolverConstraintaddMultiBodyFrictionConstraint (const btVector3 &normalAxis, const btScalar &appliedImpulse, btPersistentManifold *manifold, int frictionIndex, btManifoldPoint &cp, btCollisionObject *colObj0, btCollisionObject *colObj1, btScalar relaxation, const btContactSolverInfo &infoGlobal, btScalar desiredVelocity=0, btScalar cfmSlip=0)
 
btMultiBodySolverConstraintaddMultiBodyTorsionalFrictionConstraint (const btVector3 &normalAxis, btPersistentManifold *manifold, int frictionIndex, btManifoldPoint &cp, btScalar combinedTorsionalFriction, btCollisionObject *colObj0, btCollisionObject *colObj1, btScalar relaxation, const btContactSolverInfo &infoGlobal, btScalar desiredVelocity=0, btScalar cfmSlip=0)
 
btMultiBodySolverConstraintaddMultiBodySpinningFrictionConstraint (const btVector3 &normalAxis, btPersistentManifold *manifold, int frictionIndex, btManifoldPoint &cp, btScalar combinedTorsionalFriction, btCollisionObject *colObj0, btCollisionObject *colObj1, btScalar relaxation, const btContactSolverInfo &infoGlobal, btScalar desiredVelocity=0, btScalar cfmSlip=0)
 
void setupMultiBodyJointLimitConstraint (btMultiBodySolverConstraint &constraintRow, btScalar *jacA, btScalar *jacB, btScalar penetration, btScalar combinedFrictionCoeff, btScalar combinedRestitutionCoeff, const btContactSolverInfo &infoGlobal)
 
void setupMultiBodyContactConstraint (btMultiBodySolverConstraint &solverConstraint, const btVector3 &contactNormal, const btScalar &appliedImpulse, btManifoldPoint &cp, const btContactSolverInfo &infoGlobal, btScalar &relaxation, bool isFriction, btScalar desiredVelocity=0, btScalar cfmSlip=0)
 
void setupMultiBodyTorsionalFrictionConstraint (btMultiBodySolverConstraint &solverConstraint, const btVector3 &contactNormal, btManifoldPoint &cp, btScalar combinedTorsionalFriction, const btContactSolverInfo &infoGlobal, btScalar &relaxation, bool isFriction, btScalar desiredVelocity=0, btScalar cfmSlip=0)
 
void convertMultiBodyContact (btPersistentManifold *manifold, const btContactSolverInfo &infoGlobal)
 
virtual btScalar solveGroupCacheFriendlySetup (btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer)
 
virtual btScalar solveSingleIteration (int iteration, btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer)
 
void applyDeltaVee (btScalar *deltaV, btScalar impulse, int velocityIndex, int ndof)
 
void writeBackSolverBodyToMultiBody (btMultiBodySolverConstraint &constraint, btScalar deltaTime)
 
 BT_DECLARE_ALIGNED_ALLOCATOR ()
 
virtual btScalar solveGroup (btCollisionObject **bodies, int numBodies, btPersistentManifold **manifold, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &info, btIDebugDraw *debugDrawer, btDispatcher *dispatcher)
 this method should not be called, it was just used during porting/integration of Featherstone btMultiBody, providing backwards compatibility but no support for btMultiBodyConstraint (only contact constraints)
 
virtual btScalar solveGroupCacheFriendlyFinish (btCollisionObject **bodies, int numBodies, const btContactSolverInfo &infoGlobal)
 
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)
 

Variables

btMultiBodyConstraintSolver __pad0__
 
btMultiBodyConstraintArray m_multiBodyNormalContactConstraints
 
btMultiBodyConstraintArray m_multiBodyFrictionContactConstraints
 
btMultiBodyConstraintArray m_multiBodyTorsionalFrictionContactConstraints
 
btMultiBodyConstraintArray m_multiBodySpinningFrictionContactConstraints
 
btMultiBodyJacobianData m_data
 
btMultiBodyConstraint ** m_tmpMultiBodyConstraints
 
int m_tmpNumMultiBodyConstraints
 

Macro Definition Documentation

◆ DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS

#define DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS

Definition at line 22 of file btMultiBodyConstraintSolver.h.

Function Documentation

◆ addMultiBodyFrictionConstraint()

◆ addMultiBodySpinningFrictionConstraint()

◆ addMultiBodyTorsionalFrictionConstraint()

◆ applyDeltaVee()

void btMultiBodyConstraintSolver::applyDeltaVee ( btScalar * deltaV,
btScalar impulse,
int velocityIndex,
int ndof )

Definition at line 229 of file btMultiBodyConstraintSolver.cpp.

References m_data.

◆ BT_DECLARE_ALIGNED_ALLOCATOR()

BT_DECLARE_ALIGNED_ALLOCATOR ( )

◆ convertContacts()

void convertContacts ( btPersistentManifold ** manifoldPtr,
int numManifolds,
const btContactSolverInfo & infoGlobal )

◆ convertMultiBodyContact()

void btMultiBodyConstraintSolver::convertMultiBodyContact ( btPersistentManifold * manifold,
const btContactSolverInfo & infoGlobal )

avoid collision response between two static objects

Bullet has several options to set the friction directions By default, each contact has only a single friction direction that is recomputed automatically every frame based on the relative linear velocity. If the relative velocity is zero, it will automatically compute a friction direction.

You can also enable two friction directions, using the SOLVER_USE_2_FRICTION_DIRECTIONS. In that case, the second friction direction will be orthogonal to both contact normal and first friction direction.

If you choose SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION, then the friction will be independent from the relative projected velocity.

The user can manually override the friction directions for certain contacts using a contact callback, and set the cp.m_lateralFrictionInitialized to true In that case, you can set the target relative motion in each friction direction (cp.m_contactMotion1 and cp.m_contactMotion2) this will give a conveyor belt effect

Definition at line 1254 of file btMultiBodyConstraintSolver.cpp.

References addMultiBodyFrictionConstraint(), addMultiBodySpinningFrictionConstraint(), addMultiBodyTorsionalFrictionConstraint(), applyAnisotropicFriction(), BT_CONTACT_FLAG_LATERAL_FRICTION_INITIALIZED, btMultiBody, btMultiBodySolverConstraint, btPlaneSpace1(), btAlignedObjectArray< T >::expandNonInitializing(), btManifoldPoint::getDistance(), getOrInitSolverBody(), infoGlobal, btManifoldPoint::m_appliedImpulse, btManifoldPoint::m_appliedImpulseLateral1, btManifoldPoint::m_appliedImpulseLateral2, btManifoldPoint::m_combinedRollingFriction, btManifoldPoint::m_combinedSpinningFriction, btManifoldPoint::m_contactMotion1, btManifoldPoint::m_contactMotion2, btManifoldPoint::m_contactPointFlags, btManifoldPoint::m_frictionCFM, btManifoldPoint::m_lateralFrictionDir1, btManifoldPoint::m_lateralFrictionDir2, btMultiBodyLinkCollider::m_link, btMultiBodyLinkCollider::m_multiBody, m_multiBodyFrictionContactConstraints, m_multiBodyNormalContactConstraints, btManifoldPoint::m_normalWorldOnB, btManifoldPoint::m_prevRHS, setupMultiBodyContactConstraint(), btAlignedObjectArray< T >::size(), SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION, SOLVER_ENABLE_FRICTION_DIRECTION_CACHING, SOLVER_USE_2_FRICTION_DIRECTIONS, and btMultiBodyLinkCollider::upcast().

◆ resolveConeFrictionConstraintRows()

btScalar btMultiBodyConstraintSolver::resolveConeFrictionConstraintRows ( const btMultiBodySolverConstraint & cA1,
const btMultiBodySolverConstraint & cB )

◆ resolveSingleConstraintRowGeneric()

btScalar btMultiBodyConstraintSolver::resolveSingleConstraintRowGeneric ( const btMultiBodySolverConstraint & c)

Definition at line 235 of file btMultiBodyConstraintSolver.cpp.

References applyDeltaVee(), btSolverBody, m_data, and sum().

◆ setupMultiBodyContactConstraint()

void btMultiBodyConstraintSolver::setupMultiBodyContactConstraint ( btMultiBodySolverConstraint & solverConstraint,
const btVector3 & contactNormal,
const btScalar & appliedImpulse,
btManifoldPoint & cp,
const btContactSolverInfo & infoGlobal,
btScalar & relaxation,
bool isFriction,
btScalar desiredVelocity = 0,
btScalar cfmSlip = 0 )

◆ setupMultiBodyJointLimitConstraint()

void setupMultiBodyJointLimitConstraint ( btMultiBodySolverConstraint & constraintRow,
btScalar * jacA,
btScalar * jacB,
btScalar penetration,
btScalar combinedFrictionCoeff,
btScalar combinedRestitutionCoeff,
const btContactSolverInfo & infoGlobal )

◆ setupMultiBodyTorsionalFrictionConstraint()

◆ solveGroup()

virtual btScalar solveGroup ( btCollisionObject ** bodies,
int numBodies,
btPersistentManifold ** manifold,
int numManifolds,
btTypedConstraint ** constraints,
int numConstraints,
const btContactSolverInfo & info,
btIDebugDraw * debugDrawer,
btDispatcher * dispatcher )
virtual

this method should not be called, it was just used during porting/integration of Featherstone btMultiBody, providing backwards compatibility but no support for btMultiBodyConstraint (only contact constraints)

◆ solveGroupCacheFriendlyFinish()

virtual btScalar solveGroupCacheFriendlyFinish ( btCollisionObject ** bodies,
int numBodies,
const btContactSolverInfo & infoGlobal )
virtual

◆ solveGroupCacheFriendlySetup()

virtual btScalar solveGroupCacheFriendlySetup ( btCollisionObject ** bodies,
int numBodies,
btPersistentManifold ** manifoldPtr,
int numManifolds,
btTypedConstraint ** constraints,
int numConstraints,
const btContactSolverInfo & infoGlobal,
btIDebugDraw * debugDrawer )
virtual

◆ solveMultiBodyGroup()

void btMultiBodyConstraintSolver::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

◆ solveSingleIteration()

virtual btScalar solveSingleIteration ( int iteration,
btCollisionObject ** bodies,
int numBodies,
btPersistentManifold ** manifoldPtr,
int numManifolds,
btTypedConstraint ** constraints,
int numConstraints,
const btContactSolverInfo & infoGlobal,
btIDebugDraw * debugDrawer )
virtual

◆ writeBackSolverBodyToMultiBody()

void btMultiBodyConstraintSolver::writeBackSolverBodyToMultiBody ( btMultiBodySolverConstraint & constraint,
btScalar deltaTime )

Definition at line 1521 of file btMultiBodyConstraintSolver.cpp.

References m_data.

Variable Documentation

◆ __pad0__

btMultiBodyConstraintSolver __pad0__

Definition at line 29 of file btMultiBodyConstraintSolver.h.

◆ m_data

Definition at line 39 of file btMultiBodyConstraintSolver.h.

◆ m_multiBodyFrictionContactConstraints

◆ m_multiBodyNormalContactConstraints

◆ m_multiBodySpinningFrictionContactConstraints

btMultiBodyConstraintArray m_multiBodySpinningFrictionContactConstraints

◆ m_multiBodyTorsionalFrictionContactConstraints

btMultiBodyConstraintArray m_multiBodyTorsionalFrictionContactConstraints

◆ m_tmpMultiBodyConstraints

btMultiBodyConstraint** m_tmpMultiBodyConstraints

Definition at line 42 of file btMultiBodyConstraintSolver.h.

Referenced by solveDeformableBodyGroup(), and solveMultiBodyGroup().

◆ m_tmpNumMultiBodyConstraints

int m_tmpNumMultiBodyConstraints

Definition at line 43 of file btMultiBodyConstraintSolver.h.

Referenced by solveDeformableBodyGroup(), and solveMultiBodyGroup().