54 for (
int i=0;i<
m_bodyA->getNumLinks();i++)
56 if (
m_bodyA->getLink(i).m_collider)
57 return m_bodyA->getLink(i).m_collider->getIslandTag();
71 for (
int i=0;i<
m_bodyB->getNumLinks();i++)
73 col =
m_bodyB->getLink(i).m_collider;
105 unsigned int offsetA = 6 + (
m_bodyA->getLink(
m_linkA).m_dofOffset + linkDoF);
106 unsigned int offsetB = 6 + (
m_bodyB->getLink(
m_linkB).m_dofOffset + linkDoF);
119 for (
int row=0;row<numRows;row++)
133 currentVelocity += auxVel;
138 btScalar diff = currentPositionB+currentPositionA;
140 posError = -
m_erp*(desiredPositionDiff - diff);
143 btScalar desiredRelativeVelocity = auxVel;
145 fillMultiBodyConstraint(constraintRow,data,
jacobianA(row),
jacobianB(row),dummy,dummy,dummy,dummy,posError,infoGlobal,-
m_maxAppliedImpulse,
m_maxAppliedImpulse,
false,1,
false,desiredRelativeVelocity);
btAlignedObjectArray< btMultiBodySolverConstraint > btMultiBodyConstraintArray
btVector3 quatRotate(const btQuaternion &rotation, const btVector3 &v)
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
T & expandNonInitializing()
The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with...
btScalar * jacobianA(int row)
btScalar m_maxAppliedImpulse
btScalar * jacobianB(int row)
void allocateJacobiansMultiDof()
btMultiBodyConstraint(btMultiBody *bodyA, btMultiBody *bodyB, int linkA, int linkB, int numRows, bool isUnilateral)
btScalar fillMultiBodyConstraint(btMultiBodySolverConstraint &solverConstraint, btMultiBodyJacobianData &data, btScalar *jacOrgA, btScalar *jacOrgB, const btVector3 &constraintNormalAng, const btVector3 &constraintNormalLin, const btVector3 &posAworld, const btVector3 &posBworld, btScalar posError, const btContactSolverInfo &infoGlobal, btScalar lowerLimit, btScalar upperLimit, bool angConstraint=false, btScalar relaxation=1.f, bool isFriction=false, btScalar desiredVelocity=0, btScalar cfmSlip=0)
virtual ~btMultiBodyGearConstraint()
virtual void createConstraintRows(btMultiBodyConstraintArray &constraintRows, btMultiBodyJacobianData &data, const btContactSolverInfo &infoGlobal)
btScalar m_relativePositionTarget
btMultiBodyGearConstraint(btMultiBody *bodyA, int linkA, btMultiBody *bodyB, int linkB, const btVector3 &pivotInA, const btVector3 &pivotInB, const btMatrix3x3 &frameInA, const btMatrix3x3 &frameInB)
This file was written by Erwin Coumans.
virtual void finalizeMultiDof()
virtual int getIslandIdA() const
virtual int getIslandIdB() const
btVector3 can be used to represent 3D points and vectors.
1D constraint along a normal axis between bodyA and bodyB. It can be combined to solve contact and fr...
btMultiBodyConstraint * m_orgConstraint
btVector3 m_relpos1CrossNormal
btVector3 m_contactNormal2
btVector3 m_contactNormal1
btVector3 m_relpos2CrossNormal