Some fixes to work with constraint angle limits close to -PI or PI
This commit is contained in:
@@ -169,10 +169,12 @@ void ConstraintDemo::initPhysics()
|
||||
slider->setLinearUpperLimit(hiSliderLimit);
|
||||
|
||||
//range should be small, otherwise singularities will 'explode' the constraint
|
||||
slider->setAngularLowerLimit(btVector3(-1.5,0,0));
|
||||
slider->setAngularUpperLimit(btVector3(1.5,0,0));
|
||||
// slider->setAngularLowerLimit(btVector3(-1.5,0,0));
|
||||
// slider->setAngularUpperLimit(btVector3(1.5,0,0));
|
||||
// slider->setAngularLowerLimit(btVector3(0,0,0));
|
||||
// slider->setAngularUpperLimit(btVector3(0,0,0));
|
||||
slider->setAngularLowerLimit(btVector3(-SIMD_PI,0,0));
|
||||
slider->setAngularUpperLimit(btVector3(1.5,0,0));
|
||||
|
||||
slider->getTranslationalLimitMotor()->m_enableMotor[0] = true;
|
||||
slider->getTranslationalLimitMotor()->m_targetVelocity[0] = -5.0f;
|
||||
@@ -198,7 +200,11 @@ void ConstraintDemo::initPhysics()
|
||||
|
||||
spDoorHinge = new btHingeConstraint( *pDoorBody, btPivotA, btAxisA );
|
||||
|
||||
spDoorHinge->setLimit( 0.0f, M_PI_2 );
|
||||
// spDoorHinge->setLimit( 0.0f, M_PI_2 );
|
||||
// test problem values
|
||||
// spDoorHinge->setLimit( -M_PI, M_PI*0.8f);
|
||||
spDoorHinge->setLimit( -M_PI*0.8f, M_PI);
|
||||
// spDoorHinge->setLimit( 0.0f, 0.0f );
|
||||
m_dynamicsWorld->addConstraint(spDoorHinge);
|
||||
spDoorHinge->setDbgDrawSize(btScalar(5.f));
|
||||
|
||||
|
||||
@@ -213,11 +213,13 @@ void SliderConstraintDemo::initPhysics()
|
||||
// spSlider1->setUpperLinLimit(15.0F);
|
||||
// spSlider1->setLowerLinLimit(-10.0F);
|
||||
// spSlider1->setUpperLinLimit(-10.0F);
|
||||
|
||||
spSlider1->setLowerAngLimit(-SIMD_PI / 3.0F);
|
||||
spSlider1->setUpperAngLimit( SIMD_PI / 3.0F);
|
||||
#endif
|
||||
|
||||
m_dynamicsWorld->addConstraint(spSlider1, true);
|
||||
spSlider1->setDbgDrawSize(btScalar(5.f));
|
||||
|
||||
// add kinematic rigid body A2
|
||||
worldPos.setValue(0,2,0);
|
||||
@@ -251,8 +253,13 @@ void SliderConstraintDemo::initPhysics()
|
||||
|
||||
// spSlider2->setLowerAngLimit(SIMD_PI / 2.0F);
|
||||
// spSlider2->setUpperAngLimit(-SIMD_PI / 2.0F);
|
||||
spSlider2->setLowerAngLimit(-SIMD_PI / 2.0F);
|
||||
spSlider2->setUpperAngLimit(SIMD_PI / 2.0F);
|
||||
|
||||
// spSlider2->setLowerAngLimit(-SIMD_PI / 2.0F);
|
||||
// spSlider2->setUpperAngLimit(SIMD_PI / 2.0F);
|
||||
spSlider2->setLowerAngLimit(-SIMD_PI);
|
||||
spSlider2->setUpperAngLimit(SIMD_PI *0.8F);
|
||||
|
||||
|
||||
// spSlider2->setLowerAngLimit(-0.01F);
|
||||
// spSlider2->setUpperAngLimit(0.01F);
|
||||
|
||||
@@ -285,6 +292,7 @@ void SliderConstraintDemo::initPhysics()
|
||||
// spSlider2->setSoftnessLimAng(0.1);
|
||||
#endif
|
||||
m_dynamicsWorld->addConstraint(spSlider2, true);
|
||||
spSlider2->setDbgDrawSize(btScalar(5.f));
|
||||
|
||||
|
||||
#if 1
|
||||
@@ -306,6 +314,8 @@ void SliderConstraintDemo::initPhysics()
|
||||
btVector3 pivB(-2.5, 0., 0.);
|
||||
spP2PConst = new btPoint2PointConstraint(*pRbA3, *pRbB3, pivA, pivB);
|
||||
m_dynamicsWorld->addConstraint(spP2PConst, true);
|
||||
spP2PConst->setDbgDrawSize(btScalar(5.f));
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -335,6 +345,8 @@ void SliderConstraintDemo::initPhysics()
|
||||
spHingeConst->enableAngularMotor(true, 10.0, 0.19);
|
||||
|
||||
m_dynamicsWorld->addConstraint(spHingeConst, true);
|
||||
spHingeConst->setDbgDrawSize(btScalar(5.f));
|
||||
|
||||
#endif
|
||||
|
||||
} // SliderConstraintDemo::initPhysics()
|
||||
|
||||
@@ -17,6 +17,7 @@ int main(int argc,char** argv)
|
||||
|
||||
sliderConstraintDemo->initPhysics();
|
||||
sliderConstraintDemo->getDynamicsWorld()->setDebugDrawer(&gDebugDrawer);
|
||||
sliderConstraintDemo->setDebugMode(btIDebugDraw::DBG_DrawConstraints+btIDebugDraw::DBG_DrawConstraintLimits);
|
||||
|
||||
|
||||
return glutmain(argc, argv,640,480,"Slider Constraint Demo. http://www.continuousphysics.com/Bullet/phpBB2/", sliderConstraintDemo);
|
||||
|
||||
Reference in New Issue
Block a user