fix maxLinMotorForce/maxAngMotorForce in btSliderConstraint

Thanks to Stephen Peters, see also https://github.com/bulletphysics/bullet3/pull/328
This commit is contained in:
erwin coumans
2015-04-29 11:05:00 -07:00
parent d1ff63dd49
commit a165ff54c9
3 changed files with 6 additions and 6 deletions

View File

@@ -155,7 +155,7 @@ class ForkLiftDemo : public ExampleInterface
}; };
btScalar maxMotorImpulse = 1400.f; btScalar maxMotorImpulse = 4000.f;
//the sequential impulse solver has difficulties dealing with large mass ratios (differences), between loadMass and the fork parts //the sequential impulse solver has difficulties dealing with large mass ratios (differences), between loadMass and the fork parts
btScalar loadMass = 350.f;// btScalar loadMass = 350.f;//

View File

@@ -131,7 +131,7 @@ class Hinge2Vehicle : public CommonRigidBodyBase
}; };
static btScalar maxMotorImpulse = 1400.f; static btScalar maxMotorImpulse = 4000.f;
//the sequential impulse solver has difficulties dealing with large mass ratios (differences), between loadMass and the fork parts //the sequential impulse solver has difficulties dealing with large mass ratios (differences), between loadMass and the fork parts
static btScalar loadMass = 350.f;// static btScalar loadMass = 350.f;//

View File

@@ -539,8 +539,8 @@ void btSliderConstraint::getInfo2NonVirtual(btConstraintInfo2* info, const btTra
btScalar tag_vel = getTargetLinMotorVelocity(); btScalar tag_vel = getTargetLinMotorVelocity();
btScalar mot_fact = getMotorFactor(m_linPos, m_lowerLinLimit, m_upperLinLimit, tag_vel, info->fps * currERP); btScalar mot_fact = getMotorFactor(m_linPos, m_lowerLinLimit, m_upperLinLimit, tag_vel, info->fps * currERP);
info->m_constraintError[srow] -= signFact * mot_fact * getTargetLinMotorVelocity(); info->m_constraintError[srow] -= signFact * mot_fact * getTargetLinMotorVelocity();
info->m_lowerLimit[srow] += -getMaxLinMotorForce() * info->fps; info->m_lowerLimit[srow] += -getMaxLinMotorForce() / info->fps;
info->m_upperLimit[srow] += getMaxLinMotorForce() * info->fps; info->m_upperLimit[srow] += getMaxLinMotorForce() / info->fps;
} }
if(limit) if(limit)
{ {
@@ -641,8 +641,8 @@ void btSliderConstraint::getInfo2NonVirtual(btConstraintInfo2* info, const btTra
} }
btScalar mot_fact = getMotorFactor(m_angPos, m_lowerAngLimit, m_upperAngLimit, getTargetAngMotorVelocity(), info->fps * currERP); btScalar mot_fact = getMotorFactor(m_angPos, m_lowerAngLimit, m_upperAngLimit, getTargetAngMotorVelocity(), info->fps * currERP);
info->m_constraintError[srow] = mot_fact * getTargetAngMotorVelocity(); info->m_constraintError[srow] = mot_fact * getTargetAngMotorVelocity();
info->m_lowerLimit[srow] = -getMaxAngMotorForce() * info->fps; info->m_lowerLimit[srow] = -getMaxAngMotorForce() / info->fps;
info->m_upperLimit[srow] = getMaxAngMotorForce() * info->fps; info->m_upperLimit[srow] = getMaxAngMotorForce() / info->fps;
} }
if(limit) if(limit)
{ {