physics.h:
Code: Select all
#ifndef __physicsinit__
#define __physicsinit__
#ifndef __btBulletDynamicsCommon__
#define __btBulletDynamicsCommon__
#include <btBulletDynamicsCommon.h>
#endif
class Object
{
public:
Object(btScalar radius, btTransform anglePos, btScalar mass);
btRigidBody* getBody();
btCollisionShape* collisionShape;
btMotionState* motionState;
btRigidBody* rigidBody;
};
btDiscreteDynamicsWorld* makeworld();
#endif
Code: Select all
#include "physics.h"
btDiscreteDynamicsWorld* makeworld()
{
btVector3 worldAabbMin(-1000,-1000,-1000);
btVector3 worldAabbMax(1000,1000,1000);
btAxisSweep3* broadphase = new btAxisSweep3(worldAabbMin, worldAabbMax, 1024);
btDefaultCollisionConfiguration* collisionConfig = new btDefaultCollisionConfiguration();
btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfig);
btSequentialImpulseConstraintSolver* solver = new btSequentialImpulseConstraintSolver;
btDiscreteDynamicsWorld* dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,broadphase,solver,collisionConfig);
dynamicsWorld->setGravity(btVector3(0,-10,0));
return dynamicsWorld;
}
Object::Object(btScalar radius, btTransform anglePos, btScalar mass)
{
this->collisionShape = new btSphereShape(radius);
//btSphereShape(
this->motionState = new btDefaultMotionState(anglePos);
btVector3 inertia(0,0,0);
this->collisionShape->calculateLocalInertia(mass, inertia);
btRigidBody::btRigidBodyConstructionInfo rigidBodyInfo(mass, this->motionState, this->collisionShape, inertia);
this->rigidBody = new btRigidBody(rigidBodyInfo);
}
btRigidBody* Object::getBody()
{
return this->rigidBody;
}
Code: Select all
#include "physics.h"
#include <btBulletDynamicsCommon.h>
#include <iostream>
using namespace std;
int main()
{
btDiscreteDynamicsWorld* pworld = makeworld();
pworld->setGravity(btVector3(0,-10,0));
Object firstObject(1,btTransform(btQuaternion(0,0,0,1)),0); //sphere with no mass and regular pos
Object secondObject(1,btTransform(btQuaternion(0,0,0,1),btVector3(0,500,0)),10); //above other sphere - should fall
pworld->addRigidBody(firstObject.getBody());
pworld->addRigidBody(secondObject.getBody());
// for (int i=0 ; i<300 ; i++)
//{
//
// pworld->stepSimulation(1/60.f,10);
//
// btTransform trans;
////groundRigidBody->getMotionState()->getWorldTransform(trans);
//secondObject.rigidBody->getMotionState()->getWorldTransform(trans);
//
// cout << "sphere height: " << trans.getOrigin().getY() << std::endl;
// }
return 0;
}