| Bullet Collision Detection & Physics Library
    | 
 
 
 
Go to the documentation of this file.
   13           m_isUnilateral(isUnilateral),
 
   14           m_numDofsFinalized(-1),
 
   15           m_maxAppliedImpulse(100)
 
   48         for (
int i = 0; i < ndof; ++i)
 
   87                 if (solverConstraint.
m_linkA < 0)
 
   89                         rel_pos1 = posAworld - multiBodyA->
getBasePos();
 
   96                 const int ndofA = multiBodyA->
getNumDofs() + 6;
 
  118                         for (
int i = 0; i < ndofA; i++)
 
  139                         torqueAxis0 = constraintNormalAng;
 
  143                         torqueAxis0 = rel_pos1.
cross(constraintNormalLin);
 
  153                         torqueAxis0 = constraintNormalAng;
 
  157                         torqueAxis0 = rel_pos1.
cross(constraintNormalLin);
 
  166                 if (solverConstraint.
m_linkB < 0)
 
  168                         rel_pos2 = posBworld - multiBodyB->
getBasePos();
 
  175                 const int ndofB = multiBodyB->
getNumDofs() + 6;
 
  192                         for (
int i = 0; i < ndofB; i++)
 
  212                         torqueAxis1 = constraintNormalAng;
 
  216                         torqueAxis1 = rel_pos2.
cross(constraintNormalLin);
 
  226                         torqueAxis1 = constraintNormalAng;
 
  230                         torqueAxis1 = rel_pos2.
cross(constraintNormalLin);
 
  251                         for (
int i = 0; i < ndofA; ++i)
 
  273                         const int ndofB = multiBodyB->
getNumDofs() + 6;
 
  276                         for (
int i = 0; i < ndofB; ++i)
 
  310         btScalar penetration = isFriction ? 0 : posError;
 
  321                         for (
int i = 0; i < ndofA; ++i)
 
  333                         for (
int i = 0; i < ndofB; ++i)
 
  384                 btScalar velocityError = desiredVelocity - rel_vel;  
 
  391                         erp = infoGlobal.
m_erp;
 
  394                 positionalError = -penetration * erp / infoGlobal.
m_timeStep;
 
  404                         solverConstraint.
m_rhs = penetrationImpulse + velocityImpulse;
 
  415                 solverConstraint.
m_cfm = 0.f;
 
  
btVector3 m_relpos1CrossNormal
The btSolverBody is an internal datastructure for the constraint solver. Only necessary data is packe...
btAlignedObjectArray< btVector3 > scratch_v
btSimdScalar m_appliedPushImpulse
btRigidBody * m_originalBody
The btRigidBody is the main class for rigid body objects.
btVector3 m_angularComponentB
btMultiBodyConstraint(btMultiBody *bodyA, btMultiBody *bodyB, int linkA, int linkB, int numRows, bool isUnilateral)
int getCompanionId() const
const btVector3 & getAngularVelocity() const
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
btAlignedObjectArray< btScalar > m_jacobians
btVector3 cross(const btVector3 &v) const
Return the cross product between this and another vector.
btScalar m_rhsPenetration
btVector3 m_angularComponentA
btScalar dot(const btVector3 &v) const
Return the dot product.
virtual ~btMultiBodyConstraint()
btTransform m_cachedWorldTransform
btMultiBody * m_multiBodyB
1D constraint along a normal axis between bodyA and bodyB. It can be combined to solve contact and fr...
void calcAccelerationDeltasMultiDof(const btScalar *force, btScalar *output, btAlignedObjectArray< btScalar > &scratch_r, btAlignedObjectArray< btVector3 > &scratch_v) const
stepVelocitiesMultiDof is deprecated, use computeAccelerationsArticulatedBodyAlgorithmMultiDof instea...
void resize(int newsize, const T &fillData=T())
const btVector3 & getAngularFactor() const
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)
btScalar getInvMass() const
btAlignedObjectArray< btScalar > scratch_r
const btMultibodyLink & getLink(int index) const
btVector3 can be used to represent 3D points and vectors.
const btVector3 & getLinearVelocity() const
void setCompanionId(int id)
btMultiBody * m_multiBodyA
void allocateJacobiansMultiDof()
btAlignedObjectArray< btScalar > m_deltaVelocities
btAlignedObjectArray< btSolverBody > * m_solverBodyPool
btSimdScalar m_appliedImpulse
btVector3 m_contactNormal1
const btTransform & getWorldTransform() const
const btScalar * getVelocityVector() const
const btMatrix3x3 & getInvInertiaTensorWorld() const
btAlignedObjectArray< btScalar > m_data
void updateJacobianSizes()
btVector3 m_relpos2CrossNormal
const btVector3 & getBasePos() const
btVector3 m_contactNormal2
btAlignedObjectArray< btMatrix3x3 > scratch_m
btAlignedObjectArray< btScalar > m_deltaVelocitiesUnitImpulse
const T & at(int n) const
void applyDeltaVee(btMultiBodyJacobianData &data, btScalar *delta_vee, btScalar impulse, int velocityIndex, int ndof)
void fillConstraintJacobianMultiDof(int link, const btVector3 &contact_point, const btVector3 &normal_ang, const btVector3 &normal_lin, btScalar *jac, btAlignedObjectArray< btScalar > &scratch_r, btAlignedObjectArray< btVector3 > &scratch_v, btAlignedObjectArray< btMatrix3x3 > &scratch_m) const
int size() const
return the number of elements in the array