Code: Select all
#include <iostream>
#include <btBulletDynamicsCommon.h>
#include "btBulletTest.h"
int main (void)
{
btVector3 worldAabbMin(-10000,-10000,-10000);
btVector3 worldAabbMax(10000,10000,10000);
int maxProxies = 1024;
btAxisSweep3* broadphase = new btAxisSweep3(worldAabbMin,worldAabbMax,maxProxies);
btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration();
btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration);
btSequentialImpulseConstraintSolver* solver = new btSequentialImpulseConstraintSolver;
btDiscreteDynamicsWorld* dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,broadphase,solver,collisionConfiguration);
dynamicsWorld->setGravity(btVector3(0,0,-10));
btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,0,1),1);
btCollisionShape* fallShape = new btSphereShape(5);
btDefaultMotionState* groundMotionState = new btDefaultMotionState(btTransform(btQuaternion(0,0,0,1),btVector3(0,0,1)));
btRigidBody::btRigidBodyConstructionInfo
groundRigidBodyCI(0,groundMotionState,groundShape,btVector3(0,0,0));
btRigidBody* groundRigidBody = new btRigidBody(groundRigidBodyCI);
dynamicsWorld->addRigidBody(groundRigidBody);
btDefaultMotionState* fallMotionState =
new btDefaultMotionState(btTransform(btQuaternion(0,0,0,1),btVector3(0,0,50)));
btScalar mass = 1;
btVector3 fallInertia(1,1,1);
fallShape->calculateLocalInertia(mass,fallInertia);
btRigidBody::btRigidBodyConstructionInfo fallRigidBodyCI(mass,fallMotionState,fallShape,fallInertia);
btRigidBody* fallRigidBody = new btRigidBody(fallRigidBodyCI);
dynamicsWorld->addRigidBody(fallRigidBody);
for (int i=0 ; i<10000 ; i++) {
fallRigidBody->applyCentralImpulse(btVector3(1, 0, 0));
fallRigidBody->applyTorqueImpulse(btVector3(1, 0, 0));
dynamicsWorld->stepSimulation(1/60.f,10);
btTransform trans;
fallRigidBody->getMotionState()->getWorldTransform(trans);
float x[16];
trans.getOpenGLMatrix(x);
printf("x[0]:%d x[1]:%d x[2]:%d x[3]:%d \n", int(x[0]), int(x[1]), int(x[2]), int(x[3]));
printf("x[4]:%d x[5]:%d x[6]:%d x[7]:%d \n", int(x[4]), int(x[5]), int(x[6]), int(x[7]));
printf("x[8]:%d x[9]:%d x[10]:%d x[11]:%d \n", int(x[8]), int(x[9]), int(x[10]), int(x[11]));
printf("x[12]:%d x[13]:%d x[14]:%d x[15]:%d \n\n", int(x[12]), int(x[13]), int(x[14]), int(x[15]));
}
dynamicsWorld->removeRigidBody(fallRigidBody);
delete fallRigidBody->getMotionState();
delete fallRigidBody;
dynamicsWorld->removeRigidBody(groundRigidBody);
delete groundRigidBody->getMotionState();
delete groundRigidBody;
delete fallShape;
delete groundShape;
delete dynamicsWorld;
delete solver;
delete collisionConfiguration;
delete dispatcher;
delete broadphase;
return 0;
}