153 int n = numConstraintRows;
156 m_b.resize(numConstraintRows);
160 for (
int i = 0; i < numConstraintRows; i++)
177 m_hi.resize(numConstraintRows);
182 for (
int i = 0; i < numConstraintRows; i++)
267 for (
int r = 0; r < 3; r++)
274 J3.setElem(
cur, 3, 0);
276 J3.setElem(
cur, 7, 0);
304 for (
int r = 0; r < 3; r++)
311 J3.setElem(
cur, 3, 0);
313 J3.setElem(
cur, 7, 0);
424 for (
int i = 0; i <
m_A.rows(); ++i)
433 m_A.copyLowerToUpperTriangle();
438 m_x.resize(numConstraintRows);
463 m_b.resize(numConstraintRows);
470 for (
int i = 0; i < numConstraintRows; i++)
483 for (
int i = 0; i < numBodies; i++)
492 for (
int r = 0; r < 3; r++)
493 for (
int c = 0; c < 3; c++)
498 J.
resize(numConstraintRows, 6 * numBodies);
501 m_lo.resize(numConstraintRows);
502 m_hi.resize(numConstraintRows);
504 for (
int i = 0; i < numConstraintRows; i++)
550 for (
int i = 0; i <
m_A.rows(); ++i)
556 m_x.resize(numConstraintRows);
bool interleaveContactAndFriction
void setElem(btMatrixXd &mat, int row, int col, double val)
const T & btMax(const T &a, const T &b)
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
bool btFuzzyZero(btScalar x)
The btAlignedObjectArray template class uses a subset of the stl::vector interface for its methods It...
int size() const
return the number of elements in the array
void resize(int newsize, const T &fillData=T())
void push_back(const T &_Val)
btCollisionObject can be used to manage collision detection objects.
The btIDebugDraw interface class allows hooking up a debug renderer to visually debug simulations.
original version written by Erwin Coumans, October 2013
virtual bool solveMLCP(const btMatrixXu &A, const btVectorXu &b, btVectorXu &x, const btVectorXu &lo, const btVectorXu &hi, const btAlignedObjectArray< int > &limitDependency, int numIterations, bool useSparsity=true)=0
btMatrixXu m_scratchJTranspose
btAlignedObjectArray< int > m_limitDependencies
virtual void createMLCP(const btContactSolverInfo &infoGlobal)
btMatrixXu m_scratchJ3
The following scratch variables are not stateful – contents are cleared prior to each use.
virtual bool solveMLCP(const btContactSolverInfo &infoGlobal)
btVectorXu m_bSplit
when using 'split impulse' we solve two separate (M)LCPs
virtual btScalar solveGroupCacheFriendlySetup(btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer)
btAlignedObjectArray< int > m_scratchOfs
btMatrixXu m_scratchJInvM3
virtual void createMLCPFast(const btContactSolverInfo &infoGlobal)
virtual btScalar solveGroupCacheFriendlyIterations(btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer)
btMLCPSolver(btMLCPSolverInterface *solver)
original version written by Erwin Coumans, October 2013
btAlignedObjectArray< btSolverConstraint * > m_allConstraintPtrArray
btMLCPSolverInterface * m_solver
btPersistentManifold is a contact point cache, it stays persistent as long as objects are overlapping...
The btRigidBody is the main class for rigid body objects.
btConstraintArray m_tmpSolverContactConstraintPool
btConstraintArray m_tmpSolverContactFrictionConstraintPool
virtual btScalar solveGroupCacheFriendlyIterations(btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer)
btAlignedObjectArray< btSolverBody > m_tmpSolverBodyPool
btAlignedObjectArray< btTypedConstraint::btConstraintInfo1 > m_tmpConstraintSizesPool
virtual btScalar solveGroupCacheFriendlySetup(btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer)
btConstraintArray m_tmpSolverNonContactConstraintPool
TypedConstraint is the baseclass for Bullet constraints and vehicles.
btVector3 can be used to represent 3D points and vectors.
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...
btVector3 m_contactNormal2
btVector3 m_angularComponentB
btSimdScalar m_appliedImpulse
btVector3 m_angularComponentA
btSimdScalar m_appliedPushImpulse
btVector3 m_contactNormal1