Bullet Collision Detection & Physics Library
|
Go to the documentation of this file.
27 for (
int iteration = 0; iteration <
maxIterations; iteration++)
43 #ifdef VERBOSE_RESIDUAL_PRINTF
61 void btDeformableMultiBodyConstraintSolver::solveDeformableBodyGroup(
btCollisionObject * *bodies,
int numBodies,
btCollisionObject * *deformableBodies,
int numDeformableBodies,
btPersistentManifold** manifold,
int numManifolds,
btTypedConstraint** constraints,
int numConstraints,
btMultiBodyConstraint** multiBodyConstraints,
int numMultiBodyConstraints,
const btContactSolverInfo& info,
btIDebugDraw* debugDrawer,
btDispatcher* dispatcher)
70 solveDeformableGroupIterations(bodies, numBodies, deformableBodies, numDeformableBodies, manifold, numManifolds, constraints, numConstraints, info, debugDrawer);
81 for (
int i = 0; i < numBodies; i++)
110 BT_PROFILE(
"solveGroupCacheFriendlySplitImpulseIterations");
116 for (iteration = 0; iteration < infoGlobal.
m_numIterations; iteration++)
118 btScalar leastSquaresResidual = 0.f;
122 for (j = 0; j < numPoolConstraints; j++)
127 leastSquaresResidual =
btMax(leastSquaresResidual, residual * residual);
131 leastSquaresResidual =
btMax(leastSquaresResidual, residual * residual);
133 if (leastSquaresResidual <= infoGlobal.m_leastSquaresResidualThreshold || iteration >= (infoGlobal.
m_numIterations - 1))
135 #ifdef VERBOSE_RESIDUAL_PRINTF
136 printf(
"residual = %f at iteration #%d\n", leastSquaresResidual, iteration);
The btSolverBody is an internal datastructure for the constraint solver. Only necessary data is packe...
btScalar solveContactConstraints(btCollisionObject **deformableBodies, int numDeformableBodies)
TypedConstraint is the baseclass for Bullet constraints and vehicles.
btCollisionObject can be used to manage collision detection objects.
The btRigidBody is the main class for rigid body objects.
btVector3 m_linearVelocity
btScalar resolveSplitPenetrationImpulse(btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
1D constraint along a normal axis between bodyA and bodyB. It can be combined to solve contact and fr...
const btVector3 & getAngularVelocity() const
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
The btDispatcher interface class can be used in combination with broadphase to dispatch calculations ...
virtual btScalar solveGroupCacheFriendlyFinish(btCollisionObject **bodies, int numBodies, const btContactSolverInfo &infoGlobal)
void solverBodyWriteBack(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)
const T & btMax(const T &a, const T &b)
btVector3 m_angularVelocity
virtual btScalar solveGroupCacheFriendlySetup(btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer)
double m_remainingLeastSquaresResidual
int m_tmpNumMultiBodyConstraints
The btIDebugDraw interface class allows hooking up a debug renderer to visually debug simulations.
btScalar getInvMass() const
btAlignedObjectArray< int > m_orderTmpConstraintPool
btSolverAnalyticsData m_analyticsData
virtual btScalar solveDeformableGroupIterations(btCollisionObject **bodies, int numBodies, btCollisionObject **deformableBodies, int numDeformableBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer)
btVector3 m_deltaAngularVelocity
virtual void solveDeformableBodyGroup(btCollisionObject **bodies, int numBodies, btCollisionObject **deformableBodies, int numDeformableBodies, btPersistentManifold **manifold, int numManifolds, btTypedConstraint **constraints, int numConstraints, btMultiBodyConstraint **multiBodyConstraints, int numMultiBodyConstraints, const btContactSolverInfo &info, btIDebugDraw *debugDrawer, btDispatcher *dispatcher)
int m_maxOverrideNumSolverIterations
btPersistentManifold is a contact point cache, it stays persistent as long as objects are overlapping...
const btVector3 & getLinearVelocity() const
int m_numContactManifolds
btConstraintArray m_tmpSolverContactConstraintPool
btScalar solveSplitImpulse(const btContactSolverInfo &infoGlobal)
btAlignedObjectArray< btSolverBody > m_tmpSolverBodyPool
btVector3 m_deltaLinearVelocity
btMultiBodyConstraint ** m_tmpMultiBodyConstraints
btScalar m_leastSquaresResidual
virtual void solveGroupCacheFriendlySplitImpulseIterations(btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer)
int getOrInitSolverBody(btCollisionObject &body, btScalar timeStep)
void splitImpulseSetup(const btContactSolverInfo &infoGlobal)
void writeToSolverBody(btCollisionObject **bodies, int numBodies, const btContactSolverInfo &infoGlobal)
static const btRigidBody * upcast(const btCollisionObject *colObj)
to keep collision detection and dynamics separate we don't store a rigidbody pointer but a rigidbody ...
int size() const
return the number of elements in the array
int getCompanionId() const
btDeformableBodySolver * m_deformableSolver