run the program you will find only z of the ball is changing.
Code: Select all
#include <iostream>
#include <btBulletDynamicsCommon.h>
#include "btBulletWorldImporter.h"
#include "OpenGL/GLDebugDrawer.h"
GLDebugDrawer* debugDrawer = new GLDebugDrawer();
int main (void)
{
btBroadphaseInterface* broadphase = new btDbvtBroadphase();
btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration();
btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration);
btSequentialImpulseConstraintSolver* solver = new btSequentialImpulseConstraintSolver;
btDiscreteDynamicsWorld* dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,broadphase,solver,collisionConfiguration);
btBulletWorldImporter* fileLoader = new btBulletWorldImporter(dynamicsWorld);
bool suc = fileLoader->loadFile("test.bullet");
dynamicsWorld->setGravity(btVector3(0,0,-10));//in blender z axis is up, but in bullet y axis is up
debugDrawer->setDebugMode(1);
dynamicsWorld->setDebugDrawer(debugDrawer);
dynamicsWorld->debugDrawWorld();
int total = dynamicsWorld->getNumCollisionObjects();
btVector3 g = dynamicsWorld->getGravity();
printf("g:%f %f %f\n", g.getX(),g.getY(), g.getZ());
btCollisionObject* obj = dynamicsWorld->getCollisionObjectArray()[0];
btRigidBody* body = btRigidBody::upcast(obj);
btCollisionObject* obj2 = dynamicsWorld->getCollisionObjectArray()[1];
btRigidBody* xp = btRigidBody::upcast(obj2);
while (true){
dynamicsWorld->stepSimulation(1/60.f,10);
std::cout << "position x: " << body->getWorldTransform().getOrigin().getX() << std::endl;
std::cout << "position y: " << body->getWorldTransform().getOrigin().getY() << std::endl;
std::cout << "position z: " << body->getWorldTransform().getOrigin().getZ() << std::endl;
system("PAUSE");
}
delete dynamicsWorld;
delete solver;
delete collisionConfiguration;
delete dispatcher;
delete broadphase;
return 0;
}