The btSequentialImpulseConstraintSolver is a fast SIMD implementation of the Projected Gauss Seidel (iterative LCP) method. More...
#include <btSequentialImpulseConstraintSolver.h>

Public Member Functions | |
| unsigned long | btRand2 () |
| int | btRandInt2 (int n) |
| btSequentialImpulseConstraintSolver () | |
| unsigned long | getRandSeed () const |
| virtual void | reset () |
| clear internal cached data and reset random seed | |
| void | setRandSeed (unsigned long seed) |
| virtual btScalar | solveGroup (btCollisionObject **bodies, int numBodies, btPersistentManifold **manifold, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &info, btIDebugDraw *debugDrawer, btStackAlloc *stackAlloc, btDispatcher *dispatcher) |
| solve a group of constraints | |
| virtual | ~btSequentialImpulseConstraintSolver () |
Protected Member Functions | |
| btSolverConstraint & | addFrictionConstraint (const btVector3 &normalAxis, btRigidBody *solverBodyA, btRigidBody *solverBodyB, int frictionIndex, btManifoldPoint &cp, const btVector3 &rel_pos1, const btVector3 &rel_pos2, btCollisionObject *colObj0, btCollisionObject *colObj1, btScalar relaxation, btScalar desiredVelocity=0., btScalar cfmSlip=0.) |
| void | convertContact (btPersistentManifold *manifold, const btContactSolverInfo &infoGlobal) |
| int | getOrInitSolverBody (btCollisionObject &body) |
| void | resolveSingleConstraintRowGeneric (btRigidBody &body1, btRigidBody &body2, const btSolverConstraint &contactConstraint) |
| void | resolveSingleConstraintRowGenericSIMD (btRigidBody &body1, btRigidBody &body2, const btSolverConstraint &contactConstraint) |
| void | resolveSingleConstraintRowLowerLimit (btRigidBody &body1, btRigidBody &body2, const btSolverConstraint &contactConstraint) |
| void | resolveSingleConstraintRowLowerLimitSIMD (btRigidBody &body1, btRigidBody &body2, const btSolverConstraint &contactConstraint) |
| void | resolveSplitPenetrationImpulseCacheFriendly (btRigidBody &body1, btRigidBody &body2, const btSolverConstraint &contactConstraint) |
| void | resolveSplitPenetrationSIMD (btRigidBody &body1, btRigidBody &body2, const btSolverConstraint &contactConstraint) |
| btScalar | restitutionCurve (btScalar rel_vel, btScalar restitution) |
| void | setFrictionConstraintImpulse (btSolverConstraint &solverConstraint, btRigidBody *rb0, btRigidBody *rb1, btManifoldPoint &cp, const btContactSolverInfo &infoGlobal) |
| void | setupContactConstraint (btSolverConstraint &solverConstraint, btCollisionObject *colObj0, btCollisionObject *colObj1, btManifoldPoint &cp, const btContactSolverInfo &infoGlobal, btVector3 &vel, btScalar &rel_vel, btScalar &relaxation, btVector3 &rel_pos1, btVector3 &rel_pos2) |
| void | setupFrictionConstraint (btSolverConstraint &solverConstraint, const btVector3 &normalAxis, btRigidBody *solverBodyA, btRigidBody *solverBodyIdB, btManifoldPoint &cp, const btVector3 &rel_pos1, const btVector3 &rel_pos2, btCollisionObject *colObj0, btCollisionObject *colObj1, btScalar relaxation, btScalar desiredVelocity=0., btScalar cfmSlip=0.) |
| virtual btScalar | solveGroupCacheFriendlyFinish (btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer, btStackAlloc *stackAlloc) |
| virtual btScalar | solveGroupCacheFriendlyIterations (btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer, btStackAlloc *stackAlloc) |
| virtual btScalar | solveGroupCacheFriendlySetup (btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer, btStackAlloc *stackAlloc) |
| virtual void | solveGroupCacheFriendlySplitImpulseIterations (btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer, btStackAlloc *stackAlloc) |
| btScalar | solveSingleIteration (int iteration, btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer, btStackAlloc *stackAlloc) |
Static Protected Member Functions | |
| static btRigidBody & | getFixedBody () |
Protected Attributes | |
| unsigned long | m_btSeed2 |
| m_btSeed2 is used for re-arranging the constraint rows. improves convergence/quality of friction | |
| btAlignedObjectArray< int > | m_orderFrictionConstraintPool |
| btAlignedObjectArray< int > | m_orderTmpConstraintPool |
| btAlignedObjectArray < btTypedConstraint::btConstraintInfo1 > | m_tmpConstraintSizesPool |
| btConstraintArray | m_tmpSolverContactConstraintPool |
| btConstraintArray | m_tmpSolverContactFrictionConstraintPool |
| btConstraintArray | m_tmpSolverNonContactConstraintPool |
The btSequentialImpulseConstraintSolver is a fast SIMD implementation of the Projected Gauss Seidel (iterative LCP) method.
Definition at line 28 of file btSequentialImpulseConstraintSolver.h.
| btSequentialImpulseConstraintSolver::btSequentialImpulseConstraintSolver | ( | ) |
| virtual btSequentialImpulseConstraintSolver::~btSequentialImpulseConstraintSolver | ( | ) | [virtual] |
| btSolverConstraint& btSequentialImpulseConstraintSolver::addFrictionConstraint | ( | const btVector3 & | normalAxis, | |
| btRigidBody * | solverBodyA, | |||
| btRigidBody * | solverBodyB, | |||
| 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] |
| unsigned long btSequentialImpulseConstraintSolver::btRand2 | ( | ) |
| int btSequentialImpulseConstraintSolver::btRandInt2 | ( | int | n | ) |
| void btSequentialImpulseConstraintSolver::convertContact | ( | btPersistentManifold * | manifold, | |
| const btContactSolverInfo & | infoGlobal | |||
| ) | [protected] |
| static btRigidBody& btSequentialImpulseConstraintSolver::getFixedBody | ( | ) | [inline, static, protected] |
Definition at line 79 of file btSequentialImpulseConstraintSolver.h.
| int btSequentialImpulseConstraintSolver::getOrInitSolverBody | ( | btCollisionObject & | body | ) | [protected] |
| unsigned long btSequentialImpulseConstraintSolver::getRandSeed | ( | ) | const [inline] |
Definition at line 114 of file btSequentialImpulseConstraintSolver.h.
| virtual void btSequentialImpulseConstraintSolver::reset | ( | ) | [virtual] |
clear internal cached data and reset random seed
Implements btConstraintSolver.
| void btSequentialImpulseConstraintSolver::resolveSingleConstraintRowGeneric | ( | btRigidBody & | body1, | |
| btRigidBody & | body2, | |||
| const btSolverConstraint & | contactConstraint | |||
| ) | [protected] |
| void btSequentialImpulseConstraintSolver::resolveSingleConstraintRowGenericSIMD | ( | btRigidBody & | body1, | |
| btRigidBody & | body2, | |||
| const btSolverConstraint & | contactConstraint | |||
| ) | [protected] |
| void btSequentialImpulseConstraintSolver::resolveSingleConstraintRowLowerLimit | ( | btRigidBody & | body1, | |
| btRigidBody & | body2, | |||
| const btSolverConstraint & | contactConstraint | |||
| ) | [protected] |
| void btSequentialImpulseConstraintSolver::resolveSingleConstraintRowLowerLimitSIMD | ( | btRigidBody & | body1, | |
| btRigidBody & | body2, | |||
| const btSolverConstraint & | contactConstraint | |||
| ) | [protected] |
| void btSequentialImpulseConstraintSolver::resolveSplitPenetrationImpulseCacheFriendly | ( | btRigidBody & | body1, | |
| btRigidBody & | body2, | |||
| const btSolverConstraint & | contactConstraint | |||
| ) | [protected] |
| void btSequentialImpulseConstraintSolver::resolveSplitPenetrationSIMD | ( | btRigidBody & | body1, | |
| btRigidBody & | body2, | |||
| const btSolverConstraint & | contactConstraint | |||
| ) | [protected] |
| btScalar btSequentialImpulseConstraintSolver::restitutionCurve | ( | btScalar | rel_vel, | |
| btScalar | restitution | |||
| ) | [protected] |
| void btSequentialImpulseConstraintSolver::setFrictionConstraintImpulse | ( | btSolverConstraint & | solverConstraint, | |
| btRigidBody * | rb0, | |||
| btRigidBody * | rb1, | |||
| btManifoldPoint & | cp, | |||
| const btContactSolverInfo & | infoGlobal | |||
| ) | [protected] |
| void btSequentialImpulseConstraintSolver::setRandSeed | ( | unsigned long | seed | ) | [inline] |
Definition at line 110 of file btSequentialImpulseConstraintSolver.h.
| void btSequentialImpulseConstraintSolver::setupContactConstraint | ( | btSolverConstraint & | solverConstraint, | |
| btCollisionObject * | colObj0, | |||
| btCollisionObject * | colObj1, | |||
| btManifoldPoint & | cp, | |||
| const btContactSolverInfo & | infoGlobal, | |||
| btVector3 & | vel, | |||
| btScalar & | rel_vel, | |||
| btScalar & | relaxation, | |||
| btVector3 & | rel_pos1, | |||
| btVector3 & | rel_pos2 | |||
| ) | [protected] |
| void btSequentialImpulseConstraintSolver::setupFrictionConstraint | ( | btSolverConstraint & | solverConstraint, | |
| const btVector3 & | normalAxis, | |||
| btRigidBody * | solverBodyA, | |||
| btRigidBody * | solverBodyIdB, | |||
| btManifoldPoint & | cp, | |||
| const btVector3 & | rel_pos1, | |||
| const btVector3 & | rel_pos2, | |||
| btCollisionObject * | colObj0, | |||
| btCollisionObject * | colObj1, | |||
| btScalar | relaxation, | |||
| btScalar | desiredVelocity = 0., |
|||
| btScalar | cfmSlip = 0. | |||
| ) | [protected] |
| virtual btScalar btSequentialImpulseConstraintSolver::solveGroup | ( | btCollisionObject ** | bodies, | |
| int | numBodies, | |||
| btPersistentManifold ** | manifold, | |||
| int | numManifolds, | |||
| btTypedConstraint ** | constraints, | |||
| int | numConstraints, | |||
| const btContactSolverInfo & | info, | |||
| btIDebugDraw * | debugDrawer, | |||
| btStackAlloc * | stackAlloc, | |||
| btDispatcher * | dispatcher | |||
| ) | [virtual] |
solve a group of constraints
Implements btConstraintSolver.
| virtual btScalar btSequentialImpulseConstraintSolver::solveGroupCacheFriendlyFinish | ( | btCollisionObject ** | bodies, | |
| int | numBodies, | |||
| btPersistentManifold ** | manifoldPtr, | |||
| int | numManifolds, | |||
| btTypedConstraint ** | constraints, | |||
| int | numConstraints, | |||
| const btContactSolverInfo & | infoGlobal, | |||
| btIDebugDraw * | debugDrawer, | |||
| btStackAlloc * | stackAlloc | |||
| ) | [protected, virtual] |
| virtual btScalar btSequentialImpulseConstraintSolver::solveGroupCacheFriendlyIterations | ( | btCollisionObject ** | bodies, | |
| int | numBodies, | |||
| btPersistentManifold ** | manifoldPtr, | |||
| int | numManifolds, | |||
| btTypedConstraint ** | constraints, | |||
| int | numConstraints, | |||
| const btContactSolverInfo & | infoGlobal, | |||
| btIDebugDraw * | debugDrawer, | |||
| btStackAlloc * | stackAlloc | |||
| ) | [protected, virtual] |
| virtual btScalar btSequentialImpulseConstraintSolver::solveGroupCacheFriendlySetup | ( | btCollisionObject ** | bodies, | |
| int | numBodies, | |||
| btPersistentManifold ** | manifoldPtr, | |||
| int | numManifolds, | |||
| btTypedConstraint ** | constraints, | |||
| int | numConstraints, | |||
| const btContactSolverInfo & | infoGlobal, | |||
| btIDebugDraw * | debugDrawer, | |||
| btStackAlloc * | stackAlloc | |||
| ) | [protected, virtual] |
| virtual void btSequentialImpulseConstraintSolver::solveGroupCacheFriendlySplitImpulseIterations | ( | btCollisionObject ** | bodies, | |
| int | numBodies, | |||
| btPersistentManifold ** | manifoldPtr, | |||
| int | numManifolds, | |||
| btTypedConstraint ** | constraints, | |||
| int | numConstraints, | |||
| const btContactSolverInfo & | infoGlobal, | |||
| btIDebugDraw * | debugDrawer, | |||
| btStackAlloc * | stackAlloc | |||
| ) | [protected, virtual] |
| btScalar btSequentialImpulseConstraintSolver::solveSingleIteration | ( | int | iteration, | |
| btCollisionObject ** | bodies, | |||
| int | numBodies, | |||
| btPersistentManifold ** | manifoldPtr, | |||
| int | numManifolds, | |||
| btTypedConstraint ** | constraints, | |||
| int | numConstraints, | |||
| const btContactSolverInfo & | infoGlobal, | |||
| btIDebugDraw * | debugDrawer, | |||
| btStackAlloc * | stackAlloc | |||
| ) | [protected] |
unsigned long btSequentialImpulseConstraintSolver::m_btSeed2 [protected] |
m_btSeed2 is used for re-arranging the constraint rows. improves convergence/quality of friction
Definition at line 49 of file btSequentialImpulseConstraintSolver.h.
btAlignedObjectArray<int> btSequentialImpulseConstraintSolver::m_orderFrictionConstraintPool [protected] |
Definition at line 31 of file btSequentialImpulseConstraintSolver.h.
Definition at line 30 of file btSequentialImpulseConstraintSolver.h.
btAlignedObjectArray<btTypedConstraint::btConstraintInfo1> btSequentialImpulseConstraintSolver::m_tmpConstraintSizesPool [protected] |
Definition at line 32 of file btSequentialImpulseConstraintSolver.h.
Definition at line 27 of file btSequentialImpulseConstraintSolver.h.
btConstraintArray btSequentialImpulseConstraintSolver::m_tmpSolverContactFrictionConstraintPool [protected] |
Definition at line 29 of file btSequentialImpulseConstraintSolver.h.
btConstraintArray btSequentialImpulseConstraintSolver::m_tmpSolverNonContactConstraintPool [protected] |
Definition at line 28 of file btSequentialImpulseConstraintSolver.h.