Blender  V3.3
Macros | Functions | Variables
btMultiBodyConstraintSolver.h File Reference
#include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h"
#include "btMultiBodySolverConstraint.h"
#include "btMultiBodyConstraint.h"

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) More...
 
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()

btMultiBodySolverConstraint & btMultiBodyConstraintSolver::addMultiBodyFrictionConstraint ( 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 
)

◆ addMultiBodySpinningFrictionConstraint()

btMultiBodySolverConstraint & btMultiBodyConstraintSolver::addMultiBodySpinningFrictionConstraint ( 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 
)

◆ addMultiBodyTorsionalFrictionConstraint()

btMultiBodySolverConstraint & btMultiBodyConstraintSolver::addMultiBodyTorsionalFrictionConstraint ( 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 
)

◆ 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, btCollisionObject, btMultiBody, btMultiBodySolverConstraint, btPlaneSpace1(), CF_ANISOTROPIC_FRICTION, CF_ANISOTROPIC_ROLLING_FRICTION, 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, btContactSolverInfoData::m_solverMode, btContactSolverInfoData::m_timeStep, 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, Freestyle::c, 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 
)

Definition at line 501 of file btMultiBodyConstraintSolver.cpp.

References applyDeltaVee(), BT_CONTACT_FLAG_CONTACT_STIFFNESS_DAMPING, BT_CONTACT_FLAG_FRICTION_ANCHOR, BT_CONTACT_FLAG_HAS_CONTACT_CFM, BT_CONTACT_FLAG_HAS_CONTACT_ERP, BT_PROFILE, btAssert, btFabs(), btMultiBody, btSolverBody, btVector3, blender::math::cross(), blender::math::distance(), blender::math::dot(), e, btRigidBody::getAngularFactor(), btManifoldPoint::getDistance(), btRigidBody::getInvInertiaTensorWorld(), btRigidBody::getInvMass(), btRigidBody::getLinearFactor(), btManifoldPoint::getPositionWorldOnA(), btManifoldPoint::getPositionWorldOnB(), btRigidBody::getTotalForce(), btRigidBody::getTotalTorque(), btRigidBody::getVelocityInLocalPoint(), infoGlobal, l, btManifoldPoint::m_appliedImpulse, btContactSolverInfoData::m_articulatedWarmstartingFactor, btManifoldPoint::m_combinedContactDamping1, btManifoldPoint::m_combinedContactStiffness1, btManifoldPoint::m_combinedFriction, btManifoldPoint::m_combinedRestitution, btManifoldPoint::m_contactCFM, btManifoldPoint::m_contactERP, btManifoldPoint::m_contactPointFlags, m_data, btContactSolverInfoData::m_erp2, btContactSolverInfoData::m_frictionCFM, btContactSolverInfoData::m_frictionERP, btContactSolverInfoData::m_globalCfm, btContactSolverInfoData::m_linearSlop, btManifoldPoint::m_prevRHS, btContactSolverInfoData::m_restitutionVelocityThreshold, btContactSolverInfoData::m_solverMode, btContactSolverInfoData::m_sor, btContactSolverInfoData::m_timeStep, btAlignedObjectArray< T >::resize(), restitutionCurve(), SIMD_EPSILON, btAlignedObjectArray< T >::size(), and SOLVER_USE_ARTICULATED_WARMSTARTING.

Referenced by addMultiBodyFrictionConstraint(), and convertMultiBodyContact().

◆ setupMultiBodyJointLimitConstraint()

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

◆ setupMultiBodyTorsionalFrictionConstraint()

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

◆ 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 btVector3, Freestyle::c, and 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

btMultiBodyConstraintArray m_multiBodyFrictionContactConstraints

◆ m_multiBodyNormalContactConstraints

btMultiBodyConstraintArray 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().