Guest User

Untitled

a guest
Jun 24th, 2014
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2.  
  3. #include <btBulletDynamicsCommon.h>
  4.  
  5. int main (void)
  6. {
  7.  
  8.         btBroadphaseInterface* broadphase = new btDbvtBroadphase();
  9.  
  10.         btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration();
  11.         btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration);
  12.  
  13.         btSequentialImpulseConstraintSolver* solver = new btSequentialImpulseConstraintSolver;
  14.  
  15.         btDiscreteDynamicsWorld* dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,broadphase,solver,collisionConfiguration);
  16.  
  17.         dynamicsWorld->setGravity(btVector3(0,-10,0));
  18.  
  19.  
  20.         btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),1);
  21.  
  22.         btCollisionShape* fallShape = new btSphereShape(1);
  23.  
  24.  
  25.         btDefaultMotionState* groundMotionState = new btDefaultMotionState(btTransform(btQuaternion(0,0,0,1),btVector3(0,-1,0)));
  26.         btRigidBody::btRigidBodyConstructionInfo
  27.                 groundRigidBodyCI(0,groundMotionState,groundShape,btVector3(0,0,0));
  28.         btRigidBody* groundRigidBody = new btRigidBody(groundRigidBodyCI);
  29.         dynamicsWorld->addRigidBody(groundRigidBody);
  30.  
  31.  
  32.         btDefaultMotionState* fallMotionState =
  33.                 new btDefaultMotionState(btTransform(btQuaternion(0,0,0,1),btVector3(0,50,0)));
  34.         btScalar mass = 1;
  35.         btVector3 fallInertia(0,0,0);
  36.         fallShape->calculateLocalInertia(mass,fallInertia);
  37.         btRigidBody::btRigidBodyConstructionInfo fallRigidBodyCI(mass,fallMotionState,fallShape,fallInertia);
  38.         btRigidBody* fallRigidBody = new btRigidBody(fallRigidBodyCI);
  39.         btRigidBody* fallRigidBody2 = new btRigidBody(fallRigidBodyCI);
  40.         btGeneric6DofConstraint* constraint = new btGeneric6DofConstraint(*fallRigidBody,
  41.                                                                           *fallRigidBody2,
  42.                                                                           btTransform(btMatrix3x3(1,0,0,
  43.                                                                                                   0,1,0,
  44.                                                                                                   0,0,1),
  45.                                                                                       btVector3(0,0,0)),
  46.                                                                           btTransform(btMatrix3x3(0,0,-1,
  47.                                                                                                   0,1,0,
  48.                                                                                                   -1,0,0),
  49.                                                                                       btVector3(0,0,0)),
  50.                                                                           true);
  51.         dynamicsWorld->addRigidBody(fallRigidBody);
  52.         dynamicsWorld->addRigidBody(fallRigidBody2);
  53.         btTransform trans;
  54.         fallRigidBody2->getMotionState()->getWorldTransform(trans);
  55.         //slight rotation of the object fixes the issue
  56.         //trans.getBasis() *= btMatrix3x3(btQuaternion(btVector3(1,2,3).normalized(),0.0001));
  57.         dynamicsWorld->addConstraint(constraint,false);
  58.  
  59.  
  60.         for (int i=0 ; i<300 ; i++) {
  61.                 dynamicsWorld->stepSimulation(1/60.f,10);
  62.  
  63.                 btTransform trans;
  64.                 fallRigidBody->getMotionState()->getWorldTransform(trans);
  65.  
  66.                 std::cout << "sphere height: " << trans.getOrigin().getY() << std::endl;
  67.         }
  68.         dynamicsWorld->removeConstraint(constraint);
  69.         delete constraint;
  70.         dynamicsWorld->removeRigidBody(fallRigidBody);
  71.         dynamicsWorld->removeRigidBody(fallRigidBody2);
  72.         delete fallRigidBody->getMotionState();
  73.         delete fallRigidBody;
  74.  
  75.         dynamicsWorld->removeRigidBody(groundRigidBody);
  76.         delete groundRigidBody->getMotionState();
  77.         delete groundRigidBody;
  78.  
  79.  
  80.         delete fallShape;
  81.  
  82.         delete groundShape;
  83.  
  84.  
  85.         delete dynamicsWorld;
  86.         delete solver;
  87.         delete collisionConfiguration;
  88.         delete dispatcher;
  89.         delete broadphase;
  90.  
  91.         return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment