62 btCollisionObject* colObj2,
63 const btVector3& contactPositionWorld,
64 const btVector3& contactNormalOnB,
70 const btVector3& normal = contactNormalOnB;
72 btVector3 rel_pos1 = contactPositionWorld - body1->getWorldTransform().getOrigin();
73 btVector3 rel_pos2 = contactPositionWorld - colObj2->getWorldTransform().getOrigin();
77 btVector3 vel = vel1 - vel2;
79 rel_vel = normal.dot(vel);
82 btScalar restitution = combinedRestitution * -rel_vel;
85 btScalar velocityError = -(1.0f + restitution) * rel_vel;
89 btScalar jacDiagABInv = relaxation / (denom0 + denom1);
91 btScalar penetrationImpulse = positionalError * jacDiagABInv;
92 btScalar velocityImpulse = velocityError * jacDiagABInv;
94 btScalar normalImpulse = penetrationImpulse + velocityImpulse;
95 normalImpulse = 0.f > normalImpulse ? 0.f : normalImpulse;
99 body2->
applyImpulse(-normal * (normalImpulse), rel_pos2);
101 return normalImpulse;
112 btScalar normalLenSqr = normal.length2();
125 btVector3 vel = vel1 - vel2;
132 btScalar jacDiagAB = jac.getDiagonal();
135 btScalar rel_vel = jac.getRelativeVelocity(
141 rel_vel = normal.dot(vel);
146#ifdef ONLY_USE_LINEAR_MASS
148 impulse = -contactDamping * rel_vel * massTerm;
150 btScalar velocityImpulse = -contactDamping * rel_vel * jacDiagABInv;
151 impulse = velocityImpulse;
btVector3 getVelocityInLocalPoint(const btVector3 &rel_pos) const
btScalar getInvMass() const
const btVector3 & getInvInertiaDiagLocal() const
const btTransform & getCenterOfMassTransform() const
void applyImpulse(const btVector3 &impulse, const btVector3 &rel_pos)
const btVector3 & getAngularVelocity() const
SIMD_FORCE_INLINE btScalar computeImpulseDenominator(const btVector3 &pos, const btVector3 &normal) const
const btVector3 & getCenterOfMassPosition() const
static const btRigidBody * upcast(const btCollisionObject *colObj)
const btVector3 & getLinearVelocity() const