29 const btVector3& invInertiaADiag,
31 const btVector3& linvelA,
const btVector3& angvelA,
32 const btVector3& rel_posA1,
33 const btVector3& invInertiaBDiag,
35 const btVector3& linvelB,
const btVector3& angvelB,
36 const btVector3& rel_posA2,
38 btScalar depthA,
const btVector3& normalA,
39 const btVector3& rel_posB1,
const btVector3& rel_posB2,
40 btScalar depthB,
const btVector3& normalB,
58 btJacobianEntry jacA(world2A, world2B, rel_posA1, rel_posA2, normalA, invInertiaADiag, invMassA,
59 invInertiaBDiag, invMassB);
60 btJacobianEntry jacB(world2A, world2B, rel_posB1, rel_posB2, normalB, invInertiaADiag, invMassA,
61 invInertiaBDiag, invMassB);
73 const btScalar dv0 = depthA * m_tau * massTerm - vel0 * m_damping;
86 btScalar nonDiag = jacA.getNonDiagonal(jacB, invMassA, invMassB);
87 btScalar invDet =
btScalar(1.0) / (jacA.getDiagonal() * jacB.getDiagonal() - nonDiag * nonDiag);
92 imp0 = dv0 * jacA.getDiagonal() * invDet + dv1 * -nonDiag * invDet;
93 imp1 = dv1 * jacB.getDiagonal() * invDet + dv0 * -nonDiag * invDet;
108 const btVector3& invInertiaADiag,
110 const btVector3& linvelA,
const btVector3& angvelA,
111 const btVector3& rel_posA1,
112 const btVector3& invInertiaBDiag,
114 const btVector3& linvelB,
const btVector3& angvelB,
115 const btVector3& rel_posA2,
117 btScalar depthA,
const btVector3& normalA,
118 const btVector3& rel_posB1,
const btVector3& rel_posB2,
119 btScalar depthB,
const btVector3& normalB,
137 btJacobianEntry jacA(world2A, world2B, rel_posA1, rel_posA2, normalA, invInertiaADiag, invMassA,
138 invInertiaBDiag, invMassB);
139 btJacobianEntry jacB(world2A, world2B, rel_posB1, rel_posB2, normalB, invInertiaADiag, invMassA,
140 invInertiaBDiag, invMassB);
149 const btScalar dv0 = depthA * m_tau - vel0 * m_damping;
162 btScalar nonDiag = jacA.getNonDiagonal(jacB, invMassA, invMassB);
163 btScalar invDet =
btScalar(1.0) / (jacA.getDiagonal() * jacB.getDiagonal() - nonDiag * nonDiag);
168 imp0 = dv0 * jacA.getDiagonal() * invDet + dv1 * -nonDiag * invDet;
169 imp1 = dv1 * jacB.getDiagonal() * invDet + dv0 * -nonDiag * invDet;
188 imp0 = dv0 / jacA.getDiagonal();
202 imp1 = dv1 / jacB.getDiagonal();
207 imp0 = dv0 / jacA.getDiagonal();
btMatrix3x3
The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with...
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
SIMD_FORCE_INLINE btScalar btFabs(btScalar x)
btVector3 getVelocityInLocalPoint(const btVector3 &rel_pos) const
void resolveBilateralPairConstraint(btRigidBody *body0, btRigidBody *body1, const btMatrix3x3 &world2A, const btMatrix3x3 &world2B, const btVector3 &invInertiaADiag, const btScalar invMassA, const btVector3 &linvelA, const btVector3 &angvelA, const btVector3 &rel_posA1, const btVector3 &invInertiaBDiag, const btScalar invMassB, const btVector3 &linvelB, const btVector3 &angvelB, const btVector3 &rel_posA2, btScalar depthA, const btVector3 &normalA, const btVector3 &rel_posB1, const btVector3 &rel_posB2, btScalar depthB, const btVector3 &normalB, btScalar &imp0, btScalar &imp1)
void resolveUnilateralPairConstraint(btRigidBody *body0, btRigidBody *body1, const btMatrix3x3 &world2A, const btMatrix3x3 &world2B, const btVector3 &invInertiaADiag, const btScalar invMassA, const btVector3 &linvelA, const btVector3 &angvelA, const btVector3 &rel_posA1, const btVector3 &invInertiaBDiag, const btScalar invMassB, const btVector3 &linvelB, const btVector3 &angvelB, const btVector3 &rel_posA2, btScalar depthA, const btVector3 &normalA, const btVector3 &rel_posB1, const btVector3 &rel_posB2, btScalar depthB, const btVector3 &normalB, btScalar &imp0, btScalar &imp1)