26 m_contactManifold(*contactManifold)
30btContactConstraint::~btContactConstraint()
36 m_contactManifold = *contactManifold;
47void btContactConstraint::buildJacobian()
70 const btVector3& normal = contactNormalOnB;
72 btVector3 rel_pos1 = contactPositionWorld - body1->getWorldTransform().getOrigin();
73 btVector3 rel_pos2 = contactPositionWorld - colObj2->getWorldTransform().getOrigin();
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();
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;
btFixedConstraint btRigidBody & rbB
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
SIMD_FORCE_INLINE btScalar btFabs(btScalar x)
btTypedConstraint(btTypedConstraintType type, btRigidBody &rbA)
@ CONTACT_CONSTRAINT_TYPE
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
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
float distance(VecOp< float, D >, VecOp< float, D >) RET