Fix for the slider constraint (case when useLinearReferenceFrameA == false)
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
Reference in New Issue
Block a user