Bullet Collision Detection & Physics Library: btSequentialImpulseConstraintSolver Class Reference

Bullet Collision Detection & Physics Library

Public Member Functions | 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 More...
virtual void | reset ()
| clear internal cached data and reset random seed More...
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. More...
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. More...
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 *)

## Protected Member Functions
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, 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, 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)
virtual void | convertContacts (btPersistentManifold **manifoldPtr, int numManifolds, const btContactSolverInfo &infoGlobal)
void | convertContact (btPersistentManifold *manifold, const btContactSolverInfo &infoGlobal)
btSimdScalar | 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)
btSimdScalar | resolveSingleConstraintRowGeneric (btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
btSimdScalar | resolveSingleConstraintRowGenericSIMD (btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
btSimdScalar | resolveSingleConstraintRowLowerLimit (btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
btSimdScalar | resolveSingleConstraintRowLowerLimitSIMD (btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
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
btScalar | m_leastSquaresResidual
unsigned long | m_btSeed2
| m_btSeed2 is used for re-arranging the constraint rows. improves convergence/quality of friction More...

## Detailed Description

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

Definition at line 33 of file btSequentialImpulseConstraintSolver.h.

## Constructor & Destructor Documentation

## § btSequentialImpulseConstraintSolver()

btSequentialImpulseConstraintSolver::btSequentialImpulseConstraintSolver | ( |  | ) |

Definition at line 370 of file btSequentialImpulseConstraintSolver.cpp.

## § ~btSequentialImpulseConstraintSolver()

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

Definition at line 392 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,
|  | btScalar | desiredVelocity = `0.`,
|  | btScalar | cfmSlip = `0.`
| ) |  |
| protected

Definition at line 624 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 711 of file btSequentialImpulseConstraintSolver.cpp.

## § applyAnisotropicFriction()

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

Definition at line 517 of file btSequentialImpulseConstraintSolver.cpp.

## § BT_DECLARE_ALIGNED_ALLOCATOR()

btSequentialImpulseConstraintSolver::BT_DECLARE_ALIGNED_ALLOCATOR | ( |  | ) |

## § btRand2()

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

Definition at line 428 of file btSequentialImpulseConstraintSolver.cpp.

## § btRandInt2()

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

Definition at line 437 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 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 1066 of file btSequentialImpulseConstraintSolver.cpp.

## § convertContacts()

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

Reimplemented in btMultiBodyConstraintSolver.

Definition at line 1230 of file btSequentialImpulseConstraintSolver.cpp.

## § getActiveConstraintRowSolverGeneric()

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

Definition at line 154 of file btSequentialImpulseConstraintSolver.h.

## § getActiveConstraintRowSolverLowerLimit()

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

Definition at line 162 of file btSequentialImpulseConstraintSolver.h.

## § getOrInitSolverBody()

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

Definition at line 721 of file btSequentialImpulseConstraintSolver.cpp.

## § getRandSeed()

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

Definition at line 143 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 396 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 401 of file btSequentialImpulseConstraintSolver.cpp.

## § getSolverType()

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

Implements btConstraintSolver.

Reimplemented in btMLCPSolver, and btNNCGConstraintSolver.

Definition at line 149 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 466 of file btSequentialImpulseConstraintSolver.cpp.

## § reset()

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

clear internal cached data and reset random seed

Implements btConstraintSolver.

Definition at line 2044 of file btSequentialImpulseConstraintSolver.cpp.

## § resolveSingleConstraintRowGeneric()

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

Definition at line 280 of file btSequentialImpulseConstraintSolver.cpp.

## § resolveSingleConstraintRowGenericSIMD()

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

Definition at line 270 of file btSequentialImpulseConstraintSolver.cpp.

## § resolveSingleConstraintRowLowerLimit()

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

Definition at line 295 of file btSequentialImpulseConstraintSolver.cpp.

## § resolveSingleConstraintRowLowerLimitSIMD()

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

Definition at line 285 of file btSequentialImpulseConstraintSolver.cpp.

## § resolveSplitPenetrationImpulseCacheFriendly()

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

Definition at line 301 of file btSequentialImpulseConstraintSolver.cpp.

## § resolveSplitPenetrationSIMD()

btSimdScalar btSequentialImpulseConstraintSolver::resolveSplitPenetrationSIMD | ( | btSolverBody & | bodyA,
|  | btSolverBody & | bodyB,
|  | const btSolverConstraint & | contactConstraint
| ) |  |
| protected

Definition at line 333 of file btSequentialImpulseConstraintSolver.cpp.

## § restitutionCurve()

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

Definition at line 509 of file btSequentialImpulseConstraintSolver.cpp.

## § setConstraintRowSolverGeneric()

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

Definition at line 158 of file btSequentialImpulseConstraintSolver.h.

## § setConstraintRowSolverLowerLimit()

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

Definition at line 166 of file btSequentialImpulseConstraintSolver.h.

## § setFrictionConstraintImpulse()

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

Definition at line 1020 of file btSequentialImpulseConstraintSolver.cpp.

## § setRandSeed()

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

Definition at line 139 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 821 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,
|  | btScalar | desiredVelocity = `0.`,
|  | btScalar | cfmSlip = `0.`
| ) |  |
| protected

Definition at line 537 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 634 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 2029 of file btSequentialImpulseConstraintSolver.cpp.

## § solveGroupCacheFriendlyFinish()

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

Reimplemented in btMultiBodyConstraintSolver, and btNNCGConstraintSolver.

Definition at line 1943 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.

Definition at line 1915 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

setup the btSolverConstraints

the size of btSolverConstraint needs be a multiple of btScalar

finalize the constraint setup

Reimplemented in btMultiBodyConstraintSolver, btMLCPSolver, and btNNCGConstraintSolver.

Definition at line 1244 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

Definition at line 1857 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, using SIMD, if available

solve all contact constraints using SIMD, if available

solve all friction constraints, using SIMD, if available

solve all joint constraints

solve all contact constraints

solve all friction constraints

Reimplemented in btMultiBodyConstraintSolver, and btNNCGConstraintSolver.

Definition at line 1605 of file btSequentialImpulseConstraintSolver.cpp.

## Member Data Documentation

## § 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 85 of file btSequentialImpulseConstraintSolver.h.

## § m_fixedBodyId

int btSequentialImpulseConstraintSolver::m_fixedBodyId
| protected

Definition at line 47 of file btSequentialImpulseConstraintSolver.h.

## § m_kinematicBodyUniqueIdToSolverBodyTable

btAlignedObjectArray<int> btSequentialImpulseConstraintSolver::m_kinematicBodyUniqueIdToSolverBodyTable
| protected

Definition at line 55 of file btSequentialImpulseConstraintSolver.h.

## § m_leastSquaresResidual

btScalar btSequentialImpulseConstraintSolver::m_leastSquaresResidual
| protected

Definition at line 60 of file btSequentialImpulseConstraintSolver.h.

## § m_maxOverrideNumSolverIterations

int btSequentialImpulseConstraintSolver::m_maxOverrideNumSolverIterations
| protected

Definition at line 46 of file btSequentialImpulseConstraintSolver.h.

## § m_orderFrictionConstraintPool

btAlignedObjectArray<int> btSequentialImpulseConstraintSolver::m_orderFrictionConstraintPool
| protected

Definition at line 44 of file btSequentialImpulseConstraintSolver.h.

## § m_orderNonContactConstraintPool

btAlignedObjectArray<int> btSequentialImpulseConstraintSolver::m_orderNonContactConstraintPool
| protected

Definition at line 43 of file btSequentialImpulseConstraintSolver.h.

## § m_orderTmpConstraintPool

btAlignedObjectArray<int> btSequentialImpulseConstraintSolver::m_orderTmpConstraintPool
| protected

Definition at line 42 of file btSequentialImpulseConstraintSolver.h.

## § m_resolveSingleConstraintRowGeneric

btSingleConstraintRowSolver btSequentialImpulseConstraintSolver::m_resolveSingleConstraintRowGeneric
| protected

Definition at line 57 of file btSequentialImpulseConstraintSolver.h.

## § m_resolveSingleConstraintRowLowerLimit

btSingleConstraintRowSolver btSequentialImpulseConstraintSolver::m_resolveSingleConstraintRowLowerLimit
| protected

Definition at line 58 of file btSequentialImpulseConstraintSolver.h.

## § m_tmpConstraintSizesPool

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

Definition at line 45 of file btSequentialImpulseConstraintSolver.h.

## § m_tmpSolverBodyPool

btAlignedObjectArray<btSolverBody> btSequentialImpulseConstraintSolver::m_tmpSolverBodyPool
| protected

Definition at line 36 of file btSequentialImpulseConstraintSolver.h.

## § m_tmpSolverContactConstraintPool

btConstraintArray btSequentialImpulseConstraintSolver::m_tmpSolverContactConstraintPool
| protected

Definition at line 37 of file btSequentialImpulseConstraintSolver.h.

## § m_tmpSolverContactFrictionConstraintPool

btConstraintArray btSequentialImpulseConstraintSolver::m_tmpSolverContactFrictionConstraintPool
| protected

Definition at line 39 of file btSequentialImpulseConstraintSolver.h.

## § m_tmpSolverContactRollingFrictionConstraintPool

btConstraintArray btSequentialImpulseConstraintSolver::m_tmpSolverContactRollingFrictionConstraintPool
| protected

Definition at line 40 of file btSequentialImpulseConstraintSolver.h.

## § m_tmpSolverNonContactConstraintPool

btConstraintArray btSequentialImpulseConstraintSolver::m_tmpSolverNonContactConstraintPool
| protected

Definition at line 38 of file btSequentialImpulseConstraintSolver.h.

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

- btSequentialImpulseConstraintSolver.h
- btSequentialImpulseConstraintSolver.cpp