Remove unused variables in contact solver
This commit is contained in:
parent
d04cee7d0a
commit
81426293e0
|
@ -45,9 +45,6 @@ ContactPoint::ContactPoint(const ContactPointInfo& contactInfo)
|
|||
contactInfo.localPoint2),
|
||||
mIsRestingContact(false) {
|
||||
|
||||
mFrictionVectors[0] = Vector3(0, 0, 0);
|
||||
mFrictionVectors[1] = Vector3(0, 0, 0);
|
||||
|
||||
assert(mPenetrationDepth > 0.0);
|
||||
assert(mPenetrationDepth > decimal(0.0));
|
||||
|
||||
}
|
||||
|
|
|
@ -128,21 +128,9 @@ class ContactPoint {
|
|||
/// True if the contact is a resting contact (exists for more than one time step)
|
||||
bool mIsRestingContact;
|
||||
|
||||
/// Two orthogonal vectors that span the tangential friction plane
|
||||
Vector3 mFrictionVectors[2];
|
||||
|
||||
/// Cached penetration impulse
|
||||
decimal mPenetrationImpulse;
|
||||
|
||||
/// Cached first friction impulse
|
||||
decimal mFrictionImpulse1;
|
||||
|
||||
/// Cached second friction impulse
|
||||
decimal mFrictionImpulse2;
|
||||
|
||||
/// Cached rolling resistance impulse
|
||||
Vector3 mRollingResistanceImpulse;
|
||||
|
||||
public :
|
||||
|
||||
// -------------------- Methods -------------------- //
|
||||
|
@ -186,27 +174,9 @@ class ContactPoint {
|
|||
/// Return the cached penetration impulse
|
||||
decimal getPenetrationImpulse() const;
|
||||
|
||||
/// Return the cached first friction impulse
|
||||
decimal getFrictionImpulse1() const;
|
||||
|
||||
/// Return the cached second friction impulse
|
||||
decimal getFrictionImpulse2() const;
|
||||
|
||||
/// Return the cached rolling resistance impulse
|
||||
Vector3 getRollingResistanceImpulse() const;
|
||||
|
||||
/// Set the cached penetration impulse
|
||||
void setPenetrationImpulse(decimal impulse);
|
||||
|
||||
/// Set the first cached friction impulse
|
||||
void setFrictionImpulse1(decimal impulse);
|
||||
|
||||
/// Set the second cached friction impulse
|
||||
void setFrictionImpulse2(decimal impulse);
|
||||
|
||||
/// Set the cached rolling resistance impulse
|
||||
void setRollingResistanceImpulse(const Vector3& impulse);
|
||||
|
||||
/// Set the contact world point on body 1
|
||||
void setWorldPointOnBody1(const Vector3& worldPoint);
|
||||
|
||||
|
@ -219,18 +189,6 @@ class ContactPoint {
|
|||
/// Set the mIsRestingContact variable
|
||||
void setIsRestingContact(bool isRestingContact);
|
||||
|
||||
/// Get the first friction vector
|
||||
Vector3 getFrictionVector1() const;
|
||||
|
||||
/// Set the first friction vector
|
||||
void setFrictionVector1(const Vector3& frictionVector1);
|
||||
|
||||
/// Get the second friction vector
|
||||
Vector3 getFrictionVector2() const;
|
||||
|
||||
/// Set the second friction vector
|
||||
void setFrictionVector2(const Vector3& frictionVector2);
|
||||
|
||||
/// Return the penetration depth
|
||||
decimal getPenetrationDepth() const;
|
||||
|
||||
|
@ -283,41 +241,11 @@ inline decimal ContactPoint::getPenetrationImpulse() const {
|
|||
return mPenetrationImpulse;
|
||||
}
|
||||
|
||||
// Return the cached first friction impulse
|
||||
inline decimal ContactPoint::getFrictionImpulse1() const {
|
||||
return mFrictionImpulse1;
|
||||
}
|
||||
|
||||
// Return the cached second friction impulse
|
||||
inline decimal ContactPoint::getFrictionImpulse2() const {
|
||||
return mFrictionImpulse2;
|
||||
}
|
||||
|
||||
// Return the cached rolling resistance impulse
|
||||
inline Vector3 ContactPoint::getRollingResistanceImpulse() const {
|
||||
return mRollingResistanceImpulse;
|
||||
}
|
||||
|
||||
// Set the cached penetration impulse
|
||||
inline void ContactPoint::setPenetrationImpulse(decimal impulse) {
|
||||
mPenetrationImpulse = impulse;
|
||||
}
|
||||
|
||||
// Set the first cached friction impulse
|
||||
inline void ContactPoint::setFrictionImpulse1(decimal impulse) {
|
||||
mFrictionImpulse1 = impulse;
|
||||
}
|
||||
|
||||
// Set the second cached friction impulse
|
||||
inline void ContactPoint::setFrictionImpulse2(decimal impulse) {
|
||||
mFrictionImpulse2 = impulse;
|
||||
}
|
||||
|
||||
// Set the cached rolling resistance impulse
|
||||
inline void ContactPoint::setRollingResistanceImpulse(const Vector3& impulse) {
|
||||
mRollingResistanceImpulse = impulse;
|
||||
}
|
||||
|
||||
// Set the contact world point on body 1
|
||||
inline void ContactPoint::setWorldPointOnBody1(const Vector3& worldPoint) {
|
||||
mWorldPointOnBody1 = worldPoint;
|
||||
|
@ -338,26 +266,6 @@ inline void ContactPoint::setIsRestingContact(bool isRestingContact) {
|
|||
mIsRestingContact = isRestingContact;
|
||||
}
|
||||
|
||||
// Get the first friction vector
|
||||
inline Vector3 ContactPoint::getFrictionVector1() const {
|
||||
return mFrictionVectors[0];
|
||||
}
|
||||
|
||||
// Set the first friction vector
|
||||
inline void ContactPoint::setFrictionVector1(const Vector3& frictionVector1) {
|
||||
mFrictionVectors[0] = frictionVector1;
|
||||
}
|
||||
|
||||
// Get the second friction vector
|
||||
inline Vector3 ContactPoint::getFrictionVector2() const {
|
||||
return mFrictionVectors[1];
|
||||
}
|
||||
|
||||
// Set the second friction vector
|
||||
inline void ContactPoint::setFrictionVector2(const Vector3& frictionVector2) {
|
||||
mFrictionVectors[1] = frictionVector2;
|
||||
}
|
||||
|
||||
// Return the penetration depth of the contact
|
||||
inline decimal ContactPoint::getPenetrationDepth() const {
|
||||
return mPenetrationDepth;
|
||||
|
|
|
@ -134,15 +134,12 @@ void ContactSolver::initializeForIsland(Island* island) {
|
|||
mContactConstraints[mNbContactManifolds].massInverseBody1 = body1->mMassInverse;
|
||||
mContactConstraints[mNbContactManifolds].massInverseBody2 = body2->mMassInverse;
|
||||
mContactConstraints[mNbContactManifolds].nbContacts = externalManifold->getNbContactPoints();
|
||||
mContactConstraints[mNbContactManifolds].restitutionFactor = computeMixedRestitutionFactor(body1, body2);
|
||||
mContactConstraints[mNbContactManifolds].frictionCoefficient = computeMixedFrictionCoefficient(body1, body2);
|
||||
mContactConstraints[mNbContactManifolds].rollingResistanceFactor = computeMixedRollingResistance(body1, body2);
|
||||
mContactConstraints[mNbContactManifolds].externalContactManifold = externalManifold;
|
||||
mContactConstraints[mNbContactManifolds].isBody1DynamicType = body1->getType() == BodyType::DYNAMIC;
|
||||
mContactConstraints[mNbContactManifolds].isBody2DynamicType = body2->getType() == BodyType::DYNAMIC;
|
||||
mContactConstraints[mNbContactManifolds].normal.setToZero();
|
||||
mContactConstraints[mNbContactManifolds].frictionPointBody1 = Vector3::zero();
|
||||
mContactConstraints[mNbContactManifolds].frictionPointBody2 = Vector3::zero();
|
||||
mContactConstraints[mNbContactManifolds].frictionPointBody1.setToZero();
|
||||
mContactConstraints[mNbContactManifolds].frictionPointBody2.setToZero();
|
||||
|
||||
// Get the velocities of the bodies
|
||||
const Vector3& v1 = mLinearVelocities[mContactConstraints[mNbContactManifolds].indexBody1];
|
||||
|
@ -168,13 +165,8 @@ void ContactSolver::initializeForIsland(Island* island) {
|
|||
mContactPoints[mNbContactPoints].penetrationDepth = externalContact->getPenetrationDepth();
|
||||
mContactPoints[mNbContactPoints].isRestingContact = externalContact->getIsRestingContact();
|
||||
externalContact->setIsRestingContact(true);
|
||||
mContactPoints[mNbContactPoints].oldFrictionVector1 = externalContact->getFrictionVector1();
|
||||
mContactPoints[mNbContactPoints].oldFrictionVector2 = externalContact->getFrictionVector2();
|
||||
mContactPoints[mNbContactPoints].penetrationImpulse = externalContact->getPenetrationImpulse();
|
||||
mContactPoints[mNbContactPoints].penetrationSplitImpulse = 0.0;
|
||||
mContactPoints[mNbContactPoints].friction1Impulse = externalContact->getFrictionImpulse1();
|
||||
mContactPoints[mNbContactPoints].friction2Impulse = externalContact->getFrictionImpulse2();
|
||||
mContactPoints[mNbContactPoints].rollingResistanceImpulse = externalContact->getRollingResistanceImpulse();
|
||||
|
||||
mContactConstraints[mNbContactManifolds].frictionPointBody1 += p1;
|
||||
mContactConstraints[mNbContactManifolds].frictionPointBody2 += p2;
|
||||
|
@ -197,8 +189,9 @@ void ContactSolver::initializeForIsland(Island* island) {
|
|||
// velocity bellow a given threshold), we do not add a restitution velocity bias
|
||||
mContactPoints[mNbContactPoints].restitutionBias = 0.0;
|
||||
decimal deltaVDotN = deltaV.dot(mContactPoints[mNbContactPoints].normal);
|
||||
const decimal restitutionFactor = computeMixedRestitutionFactor(body1, body2);
|
||||
if (deltaVDotN < -RESTITUTION_VELOCITY_THRESHOLD) {
|
||||
mContactPoints[mNbContactPoints].restitutionBias = mContactConstraints[mNbContactManifolds].restitutionFactor * deltaVDotN;
|
||||
mContactPoints[mNbContactPoints].restitutionBias = restitutionFactor * deltaVDotN;
|
||||
}
|
||||
|
||||
mContactConstraints[mNbContactManifolds].normal += mContactPoints[mNbContactPoints].normal;
|
||||
|
@ -219,8 +212,10 @@ void ContactSolver::initializeForIsland(Island* island) {
|
|||
mContactConstraints[mNbContactManifolds].frictionTwistImpulse = externalManifold->getFrictionTwistImpulse();
|
||||
|
||||
// Compute the inverse K matrix for the rolling resistance constraint
|
||||
bool isBody1DynamicType = body1->getType() == BodyType::DYNAMIC;
|
||||
bool isBody2DynamicType = body2->getType() == BodyType::DYNAMIC;
|
||||
mContactConstraints[mNbContactManifolds].inverseRollingResistance.setToZero();
|
||||
if (mContactConstraints[mNbContactManifolds].rollingResistanceFactor > 0 && (mContactConstraints[mNbContactManifolds].isBody1DynamicType || mContactConstraints[mNbContactManifolds].isBody2DynamicType)) {
|
||||
if (mContactConstraints[mNbContactManifolds].rollingResistanceFactor > 0 && (isBody1DynamicType || isBody2DynamicType)) {
|
||||
mContactConstraints[mNbContactManifolds].inverseRollingResistance = mContactConstraints[mNbContactManifolds].inverseInertiaTensorBody1 + mContactConstraints[mNbContactManifolds].inverseInertiaTensorBody2;
|
||||
mContactConstraints[mNbContactManifolds].inverseRollingResistance = mContactConstraints[mNbContactManifolds].inverseRollingResistance.getInverse();
|
||||
}
|
||||
|
@ -296,9 +291,6 @@ void ContactSolver::warmStart() {
|
|||
|
||||
// Initialize the accumulated impulses to zero
|
||||
mContactPoints[contactPointIndex].penetrationImpulse = 0.0;
|
||||
mContactPoints[contactPointIndex].friction1Impulse = 0.0;
|
||||
mContactPoints[contactPointIndex].friction2Impulse = 0.0;
|
||||
mContactPoints[contactPointIndex].rollingResistanceImpulse = Vector3::zero();
|
||||
}
|
||||
|
||||
contactPointIndex++;
|
||||
|
@ -594,12 +586,6 @@ void ContactSolver::storeImpulses() {
|
|||
for (short int i=0; i<mContactConstraints[c].nbContacts; i++) {
|
||||
|
||||
mContactPoints[contactPointIndex].externalContact->setPenetrationImpulse(mContactPoints[contactPointIndex].penetrationImpulse);
|
||||
mContactPoints[contactPointIndex].externalContact->setFrictionImpulse1(mContactPoints[contactPointIndex].friction1Impulse);
|
||||
mContactPoints[contactPointIndex].externalContact->setFrictionImpulse2(mContactPoints[contactPointIndex].friction2Impulse);
|
||||
mContactPoints[contactPointIndex].externalContact->setRollingResistanceImpulse(mContactPoints[contactPointIndex].rollingResistanceImpulse);
|
||||
|
||||
mContactPoints[contactPointIndex].externalContact->setFrictionVector1(mContactPoints[contactPointIndex].frictionVector1);
|
||||
mContactPoints[contactPointIndex].externalContact->setFrictionVector2(mContactPoints[contactPointIndex].frictionVector2);
|
||||
|
||||
contactPointIndex++;
|
||||
}
|
||||
|
@ -613,36 +599,6 @@ void ContactSolver::storeImpulses() {
|
|||
}
|
||||
}
|
||||
|
||||
// Compute the two unit orthogonal vectors "t1" and "t2" that span the tangential friction plane
|
||||
// for a contact point. The two vectors have to be such that : t1 x t2 = contactNormal.
|
||||
void ContactSolver::computeFrictionVectors(const Vector3& deltaVelocity,
|
||||
ContactPointSolver& contactPoint) const {
|
||||
|
||||
assert(contactPoint.normal.length() > 0.0);
|
||||
|
||||
// Compute the velocity difference vector in the tangential plane
|
||||
Vector3 normalVelocity = deltaVelocity.dot(contactPoint.normal) * contactPoint.normal;
|
||||
Vector3 tangentVelocity = deltaVelocity - normalVelocity;
|
||||
|
||||
// If the velocty difference in the tangential plane is not zero
|
||||
decimal lengthTangenVelocity = tangentVelocity.length();
|
||||
if (lengthTangenVelocity > MACHINE_EPSILON) {
|
||||
|
||||
// Compute the first friction vector in the direction of the tangent
|
||||
// velocity difference
|
||||
contactPoint.frictionVector1 = tangentVelocity / lengthTangenVelocity;
|
||||
}
|
||||
else {
|
||||
|
||||
// Get any orthogonal vector to the normal as the first friction vector
|
||||
contactPoint.frictionVector1 = contactPoint.normal.getOneUnitOrthogonalVector();
|
||||
}
|
||||
|
||||
// The second friction vector is computed by the cross product of the firs
|
||||
// friction vector and the contact normal
|
||||
contactPoint.frictionVector2 =contactPoint.normal.cross(contactPoint.frictionVector1).getUnit();
|
||||
}
|
||||
|
||||
// Compute the two unit orthogonal vectors "t1" and "t2" that span the tangential friction plane
|
||||
// for a contact manifold. The two vectors have to be such that : t1 x t2 = contactNormal.
|
||||
void ContactSolver::computeFrictionVectors(const Vector3& deltaVelocity,
|
||||
|
|
|
@ -122,33 +122,12 @@ class ContactSolver {
|
|||
/// Accumulated normal impulse
|
||||
decimal penetrationImpulse;
|
||||
|
||||
/// Accumulated impulse in the 1st friction direction
|
||||
decimal friction1Impulse;
|
||||
|
||||
/// Accumulated impulse in the 2nd friction direction
|
||||
decimal friction2Impulse;
|
||||
|
||||
/// Accumulated split impulse for penetration correction
|
||||
decimal penetrationSplitImpulse;
|
||||
|
||||
/// Accumulated rolling resistance impulse
|
||||
Vector3 rollingResistanceImpulse;
|
||||
|
||||
/// Normal vector of the contact
|
||||
Vector3 normal;
|
||||
|
||||
/// First friction vector in the tangent plane
|
||||
Vector3 frictionVector1;
|
||||
|
||||
/// Second friction vector in the tangent plane
|
||||
Vector3 frictionVector2;
|
||||
|
||||
/// Old first friction vector in the tangent plane
|
||||
Vector3 oldFrictionVector1;
|
||||
|
||||
/// Old second friction vector in the tangent plane
|
||||
Vector3 oldFrictionVector2;
|
||||
|
||||
/// Vector from the body 1 center to the contact point
|
||||
Vector3 r1;
|
||||
|
||||
|
@ -188,11 +167,11 @@ class ContactSolver {
|
|||
/// Inverse of the matrix K for the 2nd friction
|
||||
decimal inverseFriction2Mass;
|
||||
|
||||
/// True if the contact was existing last time step
|
||||
bool isRestingContact;
|
||||
|
||||
/// Pointer to the external contact
|
||||
ContactPoint* externalContact;
|
||||
|
||||
/// True if the contact was existing last time step
|
||||
bool isRestingContact;
|
||||
};
|
||||
|
||||
// Structure ContactManifoldSolver
|
||||
|
@ -223,15 +202,6 @@ class ContactSolver {
|
|||
/// Number of contact points
|
||||
short int nbContacts;
|
||||
|
||||
/// True if the body 1 is of type dynamic
|
||||
bool isBody1DynamicType;
|
||||
|
||||
/// True if the body 2 is of type dynamic
|
||||
bool isBody2DynamicType;
|
||||
|
||||
/// Mix of the restitution factor for two bodies
|
||||
decimal restitutionFactor;
|
||||
|
||||
/// Mix friction coefficient for the two bodies
|
||||
decimal frictionCoefficient;
|
||||
|
||||
|
@ -369,12 +339,6 @@ class ContactSolver {
|
|||
/// Compute th mixed rolling resistance factor between two bodies
|
||||
decimal computeMixedRollingResistance(RigidBody* body1, RigidBody* body2) const;
|
||||
|
||||
/// Compute the two unit orthogonal vectors "t1" and "t2" that span the tangential friction
|
||||
/// plane for a contact point. The two vectors have to be
|
||||
/// such that : t1 x t2 = contactNormal.
|
||||
void computeFrictionVectors(const Vector3& deltaVelocity,
|
||||
ContactPointSolver &contactPoint) const;
|
||||
|
||||
/// Compute the two unit orthogonal vectors "t1" and "t2" that span the tangential friction
|
||||
/// plane for a contact manifold. The two vectors have to be
|
||||
/// such that : t1 x t2 = contactNormal.
|
||||
|
|
Loading…
Reference in New Issue
Block a user