Bullet Collision Detection & Physics Library: btSequentialImpulseConstraintSolver Class Reference

Bullet Collision Detection & Physics Library

- Main Page
- Namespaces
- Classes
- Files

- Class List
- Class Hierarchy
- Class Members

Public Member Functions | Public Attributes | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
btSequentialImpulseConstraintSolver Class Reference

The btSequentialImpulseConstraintSolver is a fast SIMD implementation of the Projected Gauss Seidel (iterative LCP) method. More...

`#include <btSequentialImpulseConstraintSolver.h>`

Inheritance diagram for btSequentialImpulseConstraintSolver:
[legend]
Collaboration diagram for btSequentialImpulseConstraintSolver:
[legend]

## Public Member Functions
| BT_DECLARE_ALIGNED_ALLOCATOR ()
| btSequentialImpulseConstraintSolver ()
virtual | ~btSequentialImpulseConstraintSolver ()
virtual btScalar | solveGroup (btCollisionObject **bodies, int numBodies, btPersistentManifold **manifold, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &info, btIDebugDraw *debugDrawer, btDispatcher *dispatcher)
| btSequentialImpulseConstraintSolver Sequentially applies impulses
virtual void | reset ()
| clear internal cached data and reset random seed
unsigned long | btRand2 ()
int | btRandInt2 (int n)
void | setRandSeed (unsigned long seed)
unsigned long | getRandSeed () const
virtual btConstraintSolverType | getSolverType () const
btSingleConstraintRowSolver | getActiveConstraintRowSolverGeneric ()
void | setConstraintRowSolverGeneric (btSingleConstraintRowSolver rowSolver)
btSingleConstraintRowSolver | getActiveConstraintRowSolverLowerLimit ()
void | setConstraintRowSolverLowerLimit (btSingleConstraintRowSolver rowSolver)
btSingleConstraintRowSolver | getScalarConstraintRowSolverGeneric ()
| Various implementations of solving a single constraint row using a generic equality constraint, using scalar reference, SSE2 or SSE4.
btSingleConstraintRowSolver | getSSE2ConstraintRowSolverGeneric ()
btSingleConstraintRowSolver | getSSE4_1ConstraintRowSolverGeneric ()
btSingleConstraintRowSolver | getScalarConstraintRowSolverLowerLimit ()
| Various implementations of solving a single constraint row using an inequality (lower limit) constraint, using scalar reference, SSE2 or SSE4.
btSingleConstraintRowSolver | getSSE2ConstraintRowSolverLowerLimit ()
btSingleConstraintRowSolver | getSSE4_1ConstraintRowSolverLowerLimit ()
Public Member Functions inherited from btConstraintSolver
virtual | ~btConstraintSolver ()
virtual void | prepareSolve (int, int)
virtual void | allSolved (const btContactSolverInfo &, class btIDebugDraw *)

## Public Attributes
btSolverAnalyticsData | m_analyticsData

## Protected Member Functions
void | setupSolverFunctions (bool useSimd)
void | setupFrictionConstraint (btSolverConstraint &solverConstraint, const btVector3 &normalAxis, int solverBodyIdA, int solverBodyIdB, btManifoldPoint &cp, const btVector3 &rel_pos1, const btVector3 &rel_pos2, btCollisionObject *colObj0, btCollisionObject *colObj1, btScalar relaxation, const btContactSolverInfo &infoGlobal, btScalar desiredVelocity=0., btScalar cfmSlip=0.)
void | setupTorsionalFrictionConstraint (btSolverConstraint &solverConstraint, const btVector3 &normalAxis, int solverBodyIdA, int solverBodyIdB, btManifoldPoint &cp, btScalar combinedTorsionalFriction, const btVector3 &rel_pos1, const btVector3 &rel_pos2, btCollisionObject *colObj0, btCollisionObject *colObj1, btScalar relaxation, btScalar desiredVelocity=0., btScalar cfmSlip=0.)
btSolverConstraint & | addFrictionConstraint (const btVector3 &normalAxis, int solverBodyIdA, int solverBodyIdB, int frictionIndex, btManifoldPoint &cp, const btVector3 &rel_pos1, const btVector3 &rel_pos2, btCollisionObject *colObj0, btCollisionObject *colObj1, btScalar relaxation, const btContactSolverInfo &infoGlobal, btScalar desiredVelocity=0., btScalar cfmSlip=0.)
btSolverConstraint & | addTorsionalFrictionConstraint (const btVector3 &normalAxis, int solverBodyIdA, int solverBodyIdB, int frictionIndex, btManifoldPoint &cp, btScalar torsionalFriction, const btVector3 &rel_pos1, const btVector3 &rel_pos2, btCollisionObject *colObj0, btCollisionObject *colObj1, btScalar relaxation, btScalar desiredVelocity=0, btScalar cfmSlip=0.f)
void | setupContactConstraint (btSolverConstraint &solverConstraint, int solverBodyIdA, int solverBodyIdB, btManifoldPoint &cp, const btContactSolverInfo &infoGlobal, btScalar &relaxation, const btVector3 &rel_pos1, const btVector3 &rel_pos2)
void | setFrictionConstraintImpulse (btSolverConstraint &solverConstraint, int solverBodyIdA, int solverBodyIdB, btManifoldPoint &cp, const btContactSolverInfo &infoGlobal)
btScalar | restitutionCurve (btScalar rel_vel, btScalar restitution, btScalar velocityThreshold)
virtual void | convertContacts (btPersistentManifold **manifoldPtr, int numManifolds, const btContactSolverInfo &infoGlobal)
void | convertContact (btPersistentManifold *manifold, const btContactSolverInfo &infoGlobal)
virtual void | convertJoints (btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal)
void | convertJoint (btSolverConstraint *currentConstraintRow, btTypedConstraint *constraint, const btTypedConstraint::btConstraintInfo1 &info1, int solverBodyIdA, int solverBodyIdB, const btContactSolverInfo &infoGlobal)
virtual void | convertBodies (btCollisionObject **bodies, int numBodies, const btContactSolverInfo &infoGlobal)
btScalar | resolveSplitPenetrationSIMD (btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
btScalar | resolveSplitPenetrationImpulseCacheFriendly (btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
int | getOrInitSolverBody (btCollisionObject &body, btScalar timeStep)
void | initSolverBody (btSolverBody *solverBody, btCollisionObject *collisionObject, btScalar timeStep)
btScalar | resolveSingleConstraintRowGeneric (btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
btScalar | resolveSingleConstraintRowGenericSIMD (btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
btScalar | resolveSingleConstraintRowLowerLimit (btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
btScalar | resolveSingleConstraintRowLowerLimitSIMD (btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
btScalar | resolveSplitPenetrationImpulse (btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
void | writeBackContacts (int iBegin, int iEnd, const btContactSolverInfo &infoGlobal)
void | writeBackJoints (int iBegin, int iEnd, const btContactSolverInfo &infoGlobal)
void | writeBackBodies (int iBegin, int iEnd, const btContactSolverInfo &infoGlobal)
virtual void | solveGroupCacheFriendlySplitImpulseIterations (btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer)
virtual btScalar | solveGroupCacheFriendlyFinish (btCollisionObject **bodies, int numBodies, const btContactSolverInfo &infoGlobal)
virtual btScalar | solveSingleIteration (int iteration, btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer)
virtual btScalar | solveGroupCacheFriendlySetup (btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer)
virtual btScalar | solveGroupCacheFriendlyIterations (btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer)

## Static Protected Member Functions
static void | applyAnisotropicFriction (btCollisionObject *colObj, btVector3 &frictionDirection, int frictionMode)

## Protected Attributes
btAlignedObjectArray< btSolverBody > | m_tmpSolverBodyPool
btConstraintArray | m_tmpSolverContactConstraintPool
btConstraintArray | m_tmpSolverNonContactConstraintPool
btConstraintArray | m_tmpSolverContactFrictionConstraintPool
btConstraintArray | m_tmpSolverContactRollingFrictionConstraintPool
btAlignedObjectArray< int > | m_orderTmpConstraintPool
btAlignedObjectArray< int > | m_orderNonContactConstraintPool
btAlignedObjectArray< int > | m_orderFrictionConstraintPool
btAlignedObjectArray< btTypedConstraint::btConstraintInfo1 > | m_tmpConstraintSizesPool
int | m_maxOverrideNumSolverIterations
int | m_fixedBodyId
btAlignedObjectArray< int > | m_kinematicBodyUniqueIdToSolverBodyTable
btSingleConstraintRowSolver | m_resolveSingleConstraintRowGeneric
btSingleConstraintRowSolver | m_resolveSingleConstraintRowLowerLimit
btSingleConstraintRowSolver | m_resolveSplitPenetrationImpulse
int | m_cachedSolverMode
btScalar | m_leastSquaresResidual
unsigned long | m_btSeed2
| m_btSeed2 is used for re-arranging the constraint rows. improves convergence/quality of friction

## Detailed Description

The btSequentialImpulseConstraintSolver is a fast SIMD implementation of the Projected Gauss Seidel (iterative LCP) method.

Definition at line 50 of file btSequentialImpulseConstraintSolver.h.

## Constructor & Destructor Documentation

## ◆ btSequentialImpulseConstraintSolver()

btSequentialImpulseConstraintSolver::btSequentialImpulseConstraintSolver | ( |  | ) |

Definition at line 353 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ ~btSequentialImpulseConstraintSolver()

btSequentialImpulseConstraintSolver::~btSequentialImpulseConstraintSolver | ( |  | ) |
| virtual

Definition at line 385 of file btSequentialImpulseConstraintSolver.cpp.

## Member Function Documentation

## ◆ addFrictionConstraint()

btSolverConstraint & btSequentialImpulseConstraintSolver::addFrictionConstraint | ( | const btVector3 & | normalAxis,
|  | int | solverBodyIdA,
|  | int | solverBodyIdB,
|  | int | frictionIndex,
|  | btManifoldPoint & | cp,
|  | const btVector3 & | rel_pos1,
|  | const btVector3 & | rel_pos2,
|  | btCollisionObject * | colObj0,
|  | btCollisionObject * | colObj1,
|  | btScalar | relaxation,
|  | const btContactSolverInfo & | infoGlobal,
|  | btScalar | desiredVelocity = 0.,
|  | btScalar | cfmSlip = 0. )
| protected

Definition at line 610 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ addTorsionalFrictionConstraint()

btSolverConstraint & btSequentialImpulseConstraintSolver::addTorsionalFrictionConstraint | ( | const btVector3 & | normalAxis,
|  | int | solverBodyIdA,
|  | int | solverBodyIdB,
|  | int | frictionIndex,
|  | btManifoldPoint & | cp,
|  | btScalar | torsionalFriction,
|  | const btVector3 & | rel_pos1,
|  | const btVector3 & | rel_pos2,
|  | btCollisionObject * | colObj0,
|  | btCollisionObject * | colObj1,
|  | btScalar | relaxation,
|  | btScalar | desiredVelocity = 0,
|  | btScalar | cfmSlip = 0.f )
| protected

Definition at line 682 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ applyAnisotropicFriction()

void btSequentialImpulseConstraintSolver::applyAnisotropicFriction | ( | btCollisionObject * | colObj,
|  | btVector3 & | frictionDirection,
|  | int | frictionMode )
| staticprotected

Definition at line 504 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ BT_DECLARE_ALIGNED_ALLOCATOR()

btSequentialImpulseConstraintSolver::BT_DECLARE_ALIGNED_ALLOCATOR | ( |  | ) |

## ◆ btRand2()

unsigned long btSequentialImpulseConstraintSolver::btRand2 | ( |  | ) |

Definition at line 420 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ btRandInt2()

int btSequentialImpulseConstraintSolver::btRandInt2 | ( | int | n | ) |

Definition at line 427 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ convertBodies()

void btSequentialImpulseConstraintSolver::convertBodies | ( | btCollisionObject ** | bodies,
|  | int | numBodies,
|  | const btContactSolverInfo & | infoGlobal )
| protectedvirtual

Reimplemented in btSequentialImpulseConstraintSolverMt.

Definition at line 1358 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ convertContact()

void btSequentialImpulseConstraintSolver::convertContact | ( | btPersistentManifold * | manifold,
|  | const btContactSolverInfo & | infoGlobal )
| protected

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 very frame based on the relative linear velocity. If the relative velocity it 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 use contactPoint.m_contactPointFlags |= BT_CONTACT_FLAG_LATERAL_FRICTION_INITIALIZED 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 999 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ convertContacts()

void btSequentialImpulseConstraintSolver::convertContacts | ( | btPersistentManifold ** | manifoldPtr,
|  | int | numManifolds,
|  | const btContactSolverInfo & | infoGlobal )
| protectedvirtual

Reimplemented in btMultiBodyConstraintSolver, and btSequentialImpulseConstraintSolverMt.

Definition at line 1149 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ convertJoint()

void btSequentialImpulseConstraintSolver::convertJoint | ( | btSolverConstraint * | currentConstraintRow,
|  | btTypedConstraint * | constraint,
|  | const btTypedConstraint::btConstraintInfo1 & | info1,
|  | int | solverBodyIdA,
|  | int | solverBodyIdB,
|  | const btContactSolverInfo & | infoGlobal )
| protected

the size of btSolverConstraint needs be a multiple of btScalar

finalize the constraint setup

Definition at line 1162 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ convertJoints()

void btSequentialImpulseConstraintSolver::convertJoints | ( | btTypedConstraint ** | constraints,
|  | int | numConstraints,
|  | const btContactSolverInfo & | infoGlobal )
| protectedvirtual

setup the btSolverConstraints

Reimplemented in btSequentialImpulseConstraintSolverMt.

Definition at line 1294 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ getActiveConstraintRowSolverGeneric()

btSingleConstraintRowSolver btSequentialImpulseConstraintSolver::getActiveConstraintRowSolverGeneric | ( |  | ) |
| inline

Definition at line 184 of file btSequentialImpulseConstraintSolver.h.

## ◆ getActiveConstraintRowSolverLowerLimit()

btSingleConstraintRowSolver btSequentialImpulseConstraintSolver::getActiveConstraintRowSolverLowerLimit | ( |  | ) |
| inline

Definition at line 192 of file btSequentialImpulseConstraintSolver.h.

## ◆ getOrInitSolverBody()

int btSequentialImpulseConstraintSolver::getOrInitSolverBody | ( | btCollisionObject & | body,
|  | btScalar | timeStep )
| protected

Definition at line 691 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ getRandSeed()

unsigned long btSequentialImpulseConstraintSolver::getRandSeed | ( |  | ) | const
| inline

Definition at line 174 of file btSequentialImpulseConstraintSolver.h.

## ◆ getScalarConstraintRowSolverGeneric()

btSingleConstraintRowSolver btSequentialImpulseConstraintSolver::getScalarConstraintRowSolverGeneric | ( |  | ) |

Various implementations of solving a single constraint row using a generic equality constraint, using scalar reference, SSE2 or SSE4.

Definition at line 389 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ getScalarConstraintRowSolverLowerLimit()

btSingleConstraintRowSolver btSequentialImpulseConstraintSolver::getScalarConstraintRowSolverLowerLimit | ( |  | ) |

Various implementations of solving a single constraint row using an inequality (lower limit) constraint, using scalar reference, SSE2 or SSE4.

Definition at line 394 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ getSolverType()

virtual btConstraintSolverType btSequentialImpulseConstraintSolver::getSolverType | ( |  | ) | const
| inlinevirtual

Implements btConstraintSolver.

Reimplemented in btMLCPSolver, btMultiBodyMLCPConstraintSolver, and btNNCGConstraintSolver.

Definition at line 179 of file btSequentialImpulseConstraintSolver.h.

## ◆ getSSE2ConstraintRowSolverGeneric()

btSingleConstraintRowSolver btSequentialImpulseConstraintSolver::getSSE2ConstraintRowSolverGeneric | ( |  | ) |

## ◆ getSSE2ConstraintRowSolverLowerLimit()

btSingleConstraintRowSolver btSequentialImpulseConstraintSolver::getSSE2ConstraintRowSolverLowerLimit | ( |  | ) |

## ◆ getSSE4_1ConstraintRowSolverGeneric()

btSingleConstraintRowSolver btSequentialImpulseConstraintSolver::getSSE4_1ConstraintRowSolverGeneric | ( |  | ) |

## ◆ getSSE4_1ConstraintRowSolverLowerLimit()

btSingleConstraintRowSolver btSequentialImpulseConstraintSolver::getSSE4_1ConstraintRowSolverLowerLimit | ( |  | ) |

## ◆ initSolverBody()

void btSequentialImpulseConstraintSolver::initSolverBody | ( | btSolverBody * | solverBody,
|  | btCollisionObject * | collisionObject,
|  | btScalar | timeStep )
| protected

Definition at line 459 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ reset()

void btSequentialImpulseConstraintSolver::reset | ( |  | ) |
| virtual

clear internal cached data and reset random seed

Implements btConstraintSolver.

Definition at line 1872 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ resolveSingleConstraintRowGeneric()

btScalar btSequentialImpulseConstraintSolver::resolveSingleConstraintRowGeneric | ( | btSolverBody & | bodyA,
|  | btSolverBody & | bodyB,
|  | const btSolverConstraint & | contactConstraint )
| protected

Definition at line 269 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ resolveSingleConstraintRowGenericSIMD()

btScalar btSequentialImpulseConstraintSolver::resolveSingleConstraintRowGenericSIMD | ( | btSolverBody & | bodyA,
|  | btSolverBody & | bodyB,
|  | const btSolverConstraint & | contactConstraint )
| protected

Definition at line 263 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ resolveSingleConstraintRowLowerLimit()

btScalar btSequentialImpulseConstraintSolver::resolveSingleConstraintRowLowerLimit | ( | btSolverBody & | bodyA,
|  | btSolverBody & | bodyB,
|  | const btSolverConstraint & | contactConstraint )
| protected

Definition at line 279 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ resolveSingleConstraintRowLowerLimitSIMD()

btScalar btSequentialImpulseConstraintSolver::resolveSingleConstraintRowLowerLimitSIMD | ( | btSolverBody & | bodyA,
|  | btSolverBody & | bodyB,
|  | const btSolverConstraint & | contactConstraint )
| protected

Definition at line 274 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ resolveSplitPenetrationImpulse()

btScalar btSequentialImpulseConstraintSolver::resolveSplitPenetrationImpulse | ( | btSolverBody & | bodyA,
|  | btSolverBody & | bodyB,
|  | const btSolverConstraint & | contactConstraint )
| inlineprotected

Definition at line 139 of file btSequentialImpulseConstraintSolver.h.

## ◆ resolveSplitPenetrationImpulseCacheFriendly()

btScalar btSequentialImpulseConstraintSolver::resolveSplitPenetrationImpulseCacheFriendly | ( | btSolverBody & | bodyA,
|  | btSolverBody & | bodyB,
|  | const btSolverConstraint & | contactConstraint )
| inlineprotected

Definition at line 126 of file btSequentialImpulseConstraintSolver.h.

## ◆ resolveSplitPenetrationSIMD()

btScalar btSequentialImpulseConstraintSolver::resolveSplitPenetrationSIMD | ( | btSolverBody & | bodyA,
|  | btSolverBody & | bodyB,
|  | const btSolverConstraint & | contactConstraint )
| inlineprotected

Definition at line 121 of file btSequentialImpulseConstraintSolver.h.

## ◆ restitutionCurve()

btScalar btSequentialImpulseConstraintSolver::restitutionCurve | ( | btScalar | rel_vel,
|  | btScalar | restitution,
|  | btScalar | velocityThreshold )
| protected

Definition at line 494 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ setConstraintRowSolverGeneric()

void btSequentialImpulseConstraintSolver::setConstraintRowSolverGeneric | ( | btSingleConstraintRowSolver | rowSolver | ) |
| inline

Definition at line 188 of file btSequentialImpulseConstraintSolver.h.

## ◆ setConstraintRowSolverLowerLimit()

void btSequentialImpulseConstraintSolver::setConstraintRowSolverLowerLimit | ( | btSingleConstraintRowSolver | rowSolver | ) |
| inline

Definition at line 196 of file btSequentialImpulseConstraintSolver.h.

## ◆ setFrictionConstraintImpulse()

void btSequentialImpulseConstraintSolver::setFrictionConstraintImpulse | ( | btSolverConstraint & | solverConstraint,
|  | int | solverBodyIdA,
|  | int | solverBodyIdB,
|  | btManifoldPoint & | cp,
|  | const btContactSolverInfo & | infoGlobal )
| protected

Definition at line 981 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ setRandSeed()

void btSequentialImpulseConstraintSolver::setRandSeed | ( | unsigned long | seed | ) |
| inline

Definition at line 170 of file btSequentialImpulseConstraintSolver.h.

## ◆ setupContactConstraint()

void btSequentialImpulseConstraintSolver::setupContactConstraint | ( | btSolverConstraint & | solverConstraint,
|  | int | solverBodyIdA,
|  | int | solverBodyIdB,
|  | btManifoldPoint & | cp,
|  | const btContactSolverInfo & | infoGlobal,
|  | btScalar & | relaxation,
|  | const btVector3 & | rel_pos1,
|  | const btVector3 & | rel_pos2 )
| protected

warm starting (or zero if disabled)

Definition at line 796 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ setupFrictionConstraint()

void btSequentialImpulseConstraintSolver::setupFrictionConstraint | ( | btSolverConstraint & | solverConstraint,
|  | const btVector3 & | normalAxis,
|  | int | solverBodyIdA,
|  | int | solverBodyIdB,
|  | btManifoldPoint & | cp,
|  | const btVector3 & | rel_pos1,
|  | const btVector3 & | rel_pos2,
|  | btCollisionObject * | colObj0,
|  | btCollisionObject * | colObj1,
|  | btScalar | relaxation,
|  | const btContactSolverInfo & | infoGlobal,
|  | btScalar | desiredVelocity = 0.,
|  | btScalar | cfmSlip = 0. )
| protected

Definition at line 518 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ setupSolverFunctions()

void btSequentialImpulseConstraintSolver::setupSolverFunctions | ( | bool | useSimd | ) |
| protected

Definition at line 360 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ setupTorsionalFrictionConstraint()

void btSequentialImpulseConstraintSolver::setupTorsionalFrictionConstraint | ( | btSolverConstraint & | solverConstraint,
|  | const btVector3 & | normalAxis,
|  | int | solverBodyIdA,
|  | int | solverBodyIdB,
|  | btManifoldPoint & | cp,
|  | btScalar | combinedTorsionalFriction,
|  | const btVector3 & | rel_pos1,
|  | const btVector3 & | rel_pos2,
|  | btCollisionObject * | colObj0,
|  | btCollisionObject * | colObj1,
|  | btScalar | relaxation,
|  | btScalar | desiredVelocity = 0.,
|  | btScalar | cfmSlip = 0. )
| protected

Definition at line 619 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ solveGroup()

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

btSequentialImpulseConstraintSolver Sequentially applies impulses

Implements btConstraintSolver.

Reimplemented in btMultiBodyConstraintSolver.

Definition at line 1858 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ solveGroupCacheFriendlyFinish()

btScalar btSequentialImpulseConstraintSolver::solveGroupCacheFriendlyFinish | ( | btCollisionObject ** | bodies,
|  | int | numBodies,
|  | const btContactSolverInfo & | infoGlobal )
| protectedvirtual

Reimplemented in btMultiBodyConstraintSolver, btNNCGConstraintSolver, and btSequentialImpulseConstraintSolverMt.

Definition at line 1836 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ solveGroupCacheFriendlyIterations()

btScalar btSequentialImpulseConstraintSolver::solveGroupCacheFriendlyIterations | ( | btCollisionObject ** | bodies,
|  | int | numBodies,
|  | btPersistentManifold ** | manifoldPtr,
|  | int | numManifolds,
|  | btTypedConstraint ** | constraints,
|  | int | numConstraints,
|  | const btContactSolverInfo & | infoGlobal,
|  | btIDebugDraw * | debugDrawer )
| protectedvirtual

this is a special step to resolve penetrations (just for contacts)

Reimplemented in btMLCPSolver, and btMultiBodyMLCPConstraintSolver.

Definition at line 1730 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ solveGroupCacheFriendlySetup()

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

Reimplemented in btMLCPSolver, btMultiBodyConstraintSolver, btMultiBodyMLCPConstraintSolver, btNNCGConstraintSolver, and btSequentialImpulseConstraintSolverMt.

Definition at line 1403 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ solveGroupCacheFriendlySplitImpulseIterations()

void btSequentialImpulseConstraintSolver::solveGroupCacheFriendlySplitImpulseIterations | ( | btCollisionObject ** | bodies,
|  | int | numBodies,
|  | btPersistentManifold ** | manifoldPtr,
|  | int | numManifolds,
|  | btTypedConstraint ** | constraints,
|  | int | numConstraints,
|  | const btContactSolverInfo & | infoGlobal,
|  | btIDebugDraw * | debugDrawer )
| protectedvirtual

Reimplemented in btSequentialImpulseConstraintSolverMt.

Definition at line 1697 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ solveSingleIteration()

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

solve all joint constraints

solve all contact constraints

solve all friction constraints

Reimplemented in btMultiBodyConstraintSolver, btNNCGConstraintSolver, and btSequentialImpulseConstraintSolverMt.

Definition at line 1526 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ writeBackBodies()

void btSequentialImpulseConstraintSolver::writeBackBodies | ( | int | iBegin,
|  | int | iEnd,
|  | const btContactSolverInfo & | infoGlobal )
| protected

Definition at line 1808 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ writeBackContacts()

void btSequentialImpulseConstraintSolver::writeBackContacts | ( | int | iBegin,
|  | int | iEnd,
|  | const btContactSolverInfo & | infoGlobal )
| protected

Definition at line 1765 of file btSequentialImpulseConstraintSolver.cpp.

## ◆ writeBackJoints()

void btSequentialImpulseConstraintSolver::writeBackJoints | ( | int | iBegin,
|  | int | iEnd,
|  | const btContactSolverInfo & | infoGlobal )
| protected

Definition at line 1785 of file btSequentialImpulseConstraintSolver.cpp.

## Member Data Documentation

## ◆ m_analyticsData

btSolverAnalyticsData btSequentialImpulseConstraintSolver::m_analyticsData

Definition at line 212 of file btSequentialImpulseConstraintSolver.h.

## ◆ m_btSeed2

unsigned long btSequentialImpulseConstraintSolver::m_btSeed2
| protected

m_btSeed2 is used for re-arranging the constraint rows. improves convergence/quality of friction

Definition at line 108 of file btSequentialImpulseConstraintSolver.h.

## ◆ m_cachedSolverMode

int btSequentialImpulseConstraintSolver::m_cachedSolverMode
| protected

Definition at line 80 of file btSequentialImpulseConstraintSolver.h.

## ◆ m_fixedBodyId

int btSequentialImpulseConstraintSolver::m_fixedBodyId
| protected

Definition at line 67 of file btSequentialImpulseConstraintSolver.h.

## ◆ m_kinematicBodyUniqueIdToSolverBodyTable

btAlignedObjectArray<int> btSequentialImpulseConstraintSolver::m_kinematicBodyUniqueIdToSolverBodyTable
| protected

Definition at line 75 of file btSequentialImpulseConstraintSolver.h.

## ◆ m_leastSquaresResidual

btScalar btSequentialImpulseConstraintSolver::m_leastSquaresResidual
| protected

Definition at line 83 of file btSequentialImpulseConstraintSolver.h.

## ◆ m_maxOverrideNumSolverIterations

int btSequentialImpulseConstraintSolver::m_maxOverrideNumSolverIterations
| protected

Definition at line 66 of file btSequentialImpulseConstraintSolver.h.

## ◆ m_orderFrictionConstraintPool

btAlignedObjectArray<int> btSequentialImpulseConstraintSolver::m_orderFrictionConstraintPool
| protected

Definition at line 64 of file btSequentialImpulseConstraintSolver.h.

## ◆ m_orderNonContactConstraintPool

btAlignedObjectArray<int> btSequentialImpulseConstraintSolver::m_orderNonContactConstraintPool
| protected

Definition at line 63 of file btSequentialImpulseConstraintSolver.h.

## ◆ m_orderTmpConstraintPool

btAlignedObjectArray<int> btSequentialImpulseConstraintSolver::m_orderTmpConstraintPool
| protected

Definition at line 62 of file btSequentialImpulseConstraintSolver.h.

## ◆ m_resolveSingleConstraintRowGeneric

btSingleConstraintRowSolver btSequentialImpulseConstraintSolver::m_resolveSingleConstraintRowGeneric
| protected

Definition at line 77 of file btSequentialImpulseConstraintSolver.h.

## ◆ m_resolveSingleConstraintRowLowerLimit

btSingleConstraintRowSolver btSequentialImpulseConstraintSolver::m_resolveSingleConstraintRowLowerLimit
| protected

Definition at line 78 of file btSequentialImpulseConstraintSolver.h.

## ◆ m_resolveSplitPenetrationImpulse

btSingleConstraintRowSolver btSequentialImpulseConstraintSolver::m_resolveSplitPenetrationImpulse
| protected

Definition at line 79 of file btSequentialImpulseConstraintSolver.h.

## ◆ m_tmpConstraintSizesPool

btAlignedObjectArray<btTypedConstraint::btConstraintInfo1> btSequentialImpulseConstraintSolver::m_tmpConstraintSizesPool
| protected

Definition at line 65 of file btSequentialImpulseConstraintSolver.h.

## ◆ m_tmpSolverBodyPool

btAlignedObjectArray<btSolverBody> btSequentialImpulseConstraintSolver::m_tmpSolverBodyPool
| protected

Definition at line 56 of file btSequentialImpulseConstraintSolver.h.

## ◆ m_tmpSolverContactConstraintPool

btConstraintArray btSequentialImpulseConstraintSolver::m_tmpSolverContactConstraintPool
| protected

Definition at line 57 of file btSequentialImpulseConstraintSolver.h.

## ◆ m_tmpSolverContactFrictionConstraintPool

btConstraintArray btSequentialImpulseConstraintSolver::m_tmpSolverContactFrictionConstraintPool
| protected

Definition at line 59 of file btSequentialImpulseConstraintSolver.h.

## ◆ m_tmpSolverContactRollingFrictionConstraintPool

btConstraintArray btSequentialImpulseConstraintSolver::m_tmpSolverContactRollingFrictionConstraintPool
| protected

Definition at line 60 of file btSequentialImpulseConstraintSolver.h.

## ◆ m_tmpSolverNonContactConstraintPool

btConstraintArray btSequentialImpulseConstraintSolver::m_tmpSolverNonContactConstraintPool
| protected

Definition at line 58 of file btSequentialImpulseConstraintSolver.h.

The documentation for this class was generated from the following files:

- btSequentialImpulseConstraintSolver.h
- btSequentialImpulseConstraintSolver.cpp