16#ifndef BT_SEQUENTIAL_IMPULSE_CONSTRAINT_SOLVER_H
17#define BT_SEQUENTIAL_IMPULSE_CONSTRAINT_SOLVER_H
81 void setupSolverFunctions(
bool useSimd);
85 void setupFrictionConstraint(
btSolverConstraint & solverConstraint,
const btVector3& normalAxis,
int solverBodyIdA,
int solverBodyIdB,
91 void setupTorsionalFrictionConstraint(
btSolverConstraint & solverConstraint,
const btVector3& normalAxis,
int solverBodyIdA,
int solverBodyIdB,
96 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.);
97 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);
104 void setFrictionConstraintImpulse(
btSolverConstraint & solverConstraint,
int solverBodyIdA,
int solverBodyIdB,
123 return m_resolveSplitPenetrationImpulse(bodyA, bodyB, contactConstraint);
128 return m_resolveSplitPenetrationImpulse(bodyA, bodyB, contactConstraint);
141 return m_resolveSplitPenetrationImpulse(bodyA, bodyB, contactConstraint);
164 virtual void reset();
166 unsigned long btRand2();
168 int btRandInt2(
int n);
186 return m_resolveSingleConstraintRowGeneric;
190 m_resolveSingleConstraintRowGeneric = rowSolver;
194 return m_resolveSingleConstraintRowLowerLimit;
198 m_resolveSingleConstraintRowLowerLimit = rowSolver;
btConstraintSolverType
btConstraintSolver provides solver interface
@ BT_SEQUENTIAL_IMPULSE_SOLVER
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
#define ATTRIBUTE_ALIGNED16(a)
btScalar(* btSingleConstraintRowSolver)(btSolverBody &, btSolverBody &, const btSolverConstraint &)
static unsigned long seed
btCollisionObject can be used to manage collision detection objects.
The btDispatcher interface class can be used in combination with broadphase to dispatch calculations ...
The btIDebugDraw interface class allows hooking up a debug renderer to visually debug simulations.
ManifoldContactPoint collects and maintains persistent contactpoints.
btPersistentManifold is a contact point cache, it stays persistent as long as objects are overlapping...
The btSequentialImpulseConstraintSolver is a fast SIMD implementation of the Projected Gauss Seidel (...
btSingleConstraintRowSolver getSSE2ConstraintRowSolverGeneric()
btConstraintArray m_tmpSolverContactConstraintPool
int m_maxOverrideNumSolverIterations
btConstraintArray m_tmpSolverContactFrictionConstraintPool
btAlignedObjectArray< int > m_orderFrictionConstraintPool
btSingleConstraintRowSolver getActiveConstraintRowSolverLowerLimit()
btSingleConstraintRowSolver getActiveConstraintRowSolverGeneric()
unsigned long getRandSeed() const
virtual btConstraintSolverType getSolverType() const
btSolverAnalyticsData m_analyticsData
btScalar resolveSplitPenetrationSIMD(btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
unsigned long m_btSeed2
m_btSeed2 is used for re-arranging the constraint rows. improves convergence/quality of friction
btSingleConstraintRowSolver getSSE2ConstraintRowSolverLowerLimit()
void setRandSeed(unsigned long seed)
btScalar m_leastSquaresResidual
btAlignedObjectArray< btSolverBody > m_tmpSolverBodyPool
btSingleConstraintRowSolver m_resolveSingleConstraintRowLowerLimit
BT_DECLARE_ALIGNED_ALLOCATOR()
btSingleConstraintRowSolver m_resolveSplitPenetrationImpulse
btAlignedObjectArray< btTypedConstraint::btConstraintInfo1 > m_tmpConstraintSizesPool
btAlignedObjectArray< int > m_orderTmpConstraintPool
btAlignedObjectArray< int > m_orderNonContactConstraintPool
btSingleConstraintRowSolver getSSE4_1ConstraintRowSolverGeneric()
void setConstraintRowSolverGeneric(btSingleConstraintRowSolver rowSolver)
btAlignedObjectArray< int > m_kinematicBodyUniqueIdToSolverBodyTable
btConstraintArray m_tmpSolverNonContactConstraintPool
btSingleConstraintRowSolver m_resolveSingleConstraintRowGeneric
btConstraintArray m_tmpSolverContactRollingFrictionConstraintPool
btScalar resolveSplitPenetrationImpulseCacheFriendly(btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
void setConstraintRowSolverLowerLimit(btSingleConstraintRowSolver rowSolver)
btSingleConstraintRowSolver getSSE4_1ConstraintRowSolverLowerLimit()
btScalar resolveSplitPenetrationImpulse(btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
TypedConstraint is the baseclass for Bullet constraints and vehicles.
btVector3 can be used to represent 3D points and vectors.
int m_numContactManifolds
double m_remainingLeastSquaresResidual
The btSolverBody is an internal datastructure for the constraint solver. Only necessary data is packe...
1D constraint along a normal axis between bodyA and bodyB. It can be combined to solve contact and fr...