Fix for the slider constraint (case when useLinearReferenceFrameA == false)

This commit is contained in:
rponom
2010-02-04 01:21:45 +00:00
parent 58c5630d7f
commit af1dafc659
3 changed files with 7 additions and 6 deletions

View File

@@ -68,7 +68,7 @@ void btSliderConstraint::initParams()
m_maxAngMotorForce = btScalar(0.); m_maxAngMotorForce = btScalar(0.);
m_accumulatedAngMotorImpulse = btScalar(0.0); m_accumulatedAngMotorImpulse = btScalar(0.0);
m_useLinearReferenceFrameA = USE_OFFSET_FOR_CONSTANT_FRAME; m_flags = 0;
m_flags = 0; m_flags = 0;
calculateTransforms(m_rbA.getCenterOfMassTransform(),m_rbB.getCenterOfMassTransform()); calculateTransforms(m_rbA.getCenterOfMassTransform(),m_rbB.getCenterOfMassTransform());
@@ -82,18 +82,19 @@ btSliderConstraint::btSliderConstraint(btRigidBody& rbA, btRigidBody& rbB, const
: btTypedConstraint(SLIDER_CONSTRAINT_TYPE, rbA, rbB), : btTypedConstraint(SLIDER_CONSTRAINT_TYPE, rbA, rbB),
m_useSolveConstraintObsolete(false), m_useSolveConstraintObsolete(false),
m_frameInA(frameInA), m_frameInA(frameInA),
m_frameInB(frameInB) m_frameInB(frameInB),
m_useLinearReferenceFrameA(useLinearReferenceFrameA)
{ {
initParams(); initParams();
} }
btSliderConstraint::btSliderConstraint(btRigidBody& rbB, const btTransform& frameInB, bool useLinearReferenceFrameB) btSliderConstraint::btSliderConstraint(btRigidBody& rbB, const btTransform& frameInB, bool useLinearReferenceFrameA)
: btTypedConstraint(SLIDER_CONSTRAINT_TYPE, getFixedBody(), rbB), : btTypedConstraint(SLIDER_CONSTRAINT_TYPE, getFixedBody(), rbB),
m_useSolveConstraintObsolete(false), m_useSolveConstraintObsolete(false),
m_frameInB(frameInB), m_frameInB(frameInB),
m_useLinearReferenceFrameA(useLinearReferenceFrameB) m_useLinearReferenceFrameA(useLinearReferenceFrameA)
{ {
///not providing rigidbody A means implicitly using worldspace for body A ///not providing rigidbody A means implicitly using worldspace for body A
m_frameInA = rbB.getCenterOfMassTransform() * m_frameInB; m_frameInA = rbB.getCenterOfMassTransform() * m_frameInB;

View File

@@ -157,7 +157,7 @@ protected:
public: public:
// constructors // constructors
btSliderConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB ,bool useLinearReferenceFrameA); btSliderConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB ,bool useLinearReferenceFrameA);
btSliderConstraint(btRigidBody& rbB, const btTransform& frameInB, bool useLinearReferenceFrameB); btSliderConstraint(btRigidBody& rbB, const btTransform& frameInB, bool useLinearReferenceFrameA);
// overrides // overrides
virtual void buildJacobian(); virtual void buildJacobian();

View File

@@ -1025,7 +1025,7 @@ void btDiscreteDynamicsWorld::debugDrawConstraint(btTypedConstraint* constraint)
if(drawFrames) getDebugDrawer()->drawTransform(tr, dbgDrawSize); if(drawFrames) getDebugDrawer()->drawTransform(tr, dbgDrawSize);
if(drawLimits) if(drawLimits)
{ {
btTransform tr = pSlider->getCalculatedTransformA(); btTransform tr = pSlider->getUseLinearReferenceFrameA() ? pSlider->getCalculatedTransformA() : pSlider->getCalculatedTransformB();
btVector3 li_min = tr * btVector3(pSlider->getLowerLinLimit(), 0.f, 0.f); btVector3 li_min = tr * btVector3(pSlider->getLowerLinLimit(), 0.f, 0.f);
btVector3 li_max = tr * btVector3(pSlider->getUpperLinLimit(), 0.f, 0.f); btVector3 li_max = tr * btVector3(pSlider->getUpperLinLimit(), 0.f, 0.f);
getDebugDrawer()->drawLine(li_min, li_max, btVector3(0, 0, 0)); getDebugDrawer()->drawLine(li_min, li_max, btVector3(0, 0, 0));