[Bullet] btGeneric6DofSpringConstraint rotation

Started by
0 comments, last by Kavarna 6 years, 9 months ago

I want to simulate a object on a rope. Here is what I've tried: 


   btScalar SpringLength( 3 );
   btScalar PivotOffset( 0 );
   btScalar SpringRange( 7 );

   PlaneShape = new btBoxShape( btVector3( 1, 1, 1 ) );
   btTransform tr;
   tr.setIdentity( );
   tr.setOrigin( btVector3( 0, 0, 0 ) );
   tr.getBasis( ).setEulerYPR( 0, 0, 0 );
   MotionState = new btDefaultMotionState( );
   MotionState->setWorldTransform( tr );
   btRigidBody* pBodyA = new btRigidBody( 1, MotionState, PlaneShape );
   m_pWorld->addRigidBody( pBodyA );

   btTransform frameInA;
   frameInA = btTransform::getIdentity( );
   frameInA.setOrigin( btVector3( 0, 0, 0 ) );

   tr.setIdentity( );
   tr.setOrigin( btVector3( 0, 60 - SpringLength - PivotOffset, 0 ) );
   tr.getBasis( ).setEulerYPR( 0, 0, 0 );

   MotionState = new btDefaultMotionState( );
   MotionState->setWorldTransform( tr );
   BoxShape = new btBoxShape( btVector3( 1, 1, 1 ) );
   btRigidBody* pBodyB = new btRigidBody( 0, MotionState, BoxShape );
   m_pWorld->addRigidBody( pBodyB );

   btTransform frameInB;
   frameInB = btTransform::getIdentity( );
   frameInB.setOrigin( btVector3( PivotOffset, -10, 0 ) );

   btGeneric6DofSpringConstraint * pGen6DOFSpring = new btGeneric6DofSpringConstraint(
      *pBodyA, *pBodyB, frameInA, frameInB, true
   );

   pGen6DOFSpring->setLinearLowerLimit( btVector3(  - SpringRange,  - 0,  - SpringRange ) );
   pGen6DOFSpring->setLinearUpperLimit( btVector3(  + SpringRange,  + 0,  + SpringRange ) );

   pGen6DOFSpring->setAngularLowerLimit( btVector3( - SpringRange, - SpringRange, - SpringRange ) );
   pGen6DOFSpring->setAngularUpperLimit( btVector3( + SpringRange, + SpringRange, + SpringRange ) );

   m_pWorld->addConstraint( pGen6DOFSpring, true );

   for ( int i = 0; i < 3; ++i )
   {
      pGen6DOFSpring->enableSpring( i, true );
      pGen6DOFSpring->setStiffness( i, 1 );
      pGen6DOFSpring->setStiffness( i + 3, 1 );
      pGen6DOFSpring->setDamping( i, btScalar( 0.99 ) );
      pGen6DOFSpring->setDamping( i + 3, btScalar( 0.99 ) );
      pGen6DOFSpring->setParam( BT_CONSTRAINT_STOP_CFM, btScalar( (1.0E-5) ), i );
      pGen6DOFSpring->setParam( BT_CONSTRAINT_STOP_CFM, btScalar( ( 1.0E-5 ) ), i + 3 );
      pGen6DOFSpring->setParam( BT_CONSTRAINT_CFM, btScalar( ( 1.0E-5 ) ), i );
      pGen6DOFSpring->setParam( BT_CONSTRAINT_CFM, btScalar( ( 1.0E-5 ) ), i+3 );
   }
   pGen6DOFSpring->setEquilibriumPoint( );

The object moves like it's on a rope, but it doesn't rotate at all. I am an absolute beginner with bullet physics

This topic is closed to new replies.

Advertisement