Here is my entire code:
Code: Select all
#include <iostream>
#include "btBulletDynamicsCommon.h"
int main()
{
// Initialisation
btDefaultCollisionConfiguration* collision_configuration = new btDefaultCollisionConfiguration();
btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collision_configuration);
btBroadphaseInterface* broadphase = new btDbvtBroadphase();
btSequentialImpulseConstraintSolver* solver = new btSequentialImpulseConstraintSolver;
btDiscreteDynamicsWorld* dynamics_world = new btDiscreteDynamicsWorld(dispatcher, broadphase, solver, collision_configuration);
dynamics_world->setGravity(btVector3(0, -10, 0));
// Static plane
btCollisionShape* ground_collision_shape = new btStaticPlaneShape(btVector3(0, 1, 0), 0);
btDefaultMotionState* ground_motion_state = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(0, 0, 0)));
btScalar ground_mass = 0;
btRigidBody* ground_body = new btRigidBody(ground_mass, ground_motion_state, ground_collision_shape);
dynamics_world->addRigidBody(ground_body);
// Mesh
btTriangleMesh* mesh = new btTriangleMesh();
btVector3 v1(0, 0, 0);
btVector3 v2(1, 0, 0);
btVector3 v3(0.5, 1, 0);
mesh->addTriangle(v1, v2, v3);
v1 = btVector3(1, 0, 0);
v2 = btVector3(0.5, 0, 1);
v3 = btVector3(0.5, 0.866, 0);
mesh->addTriangle(v1, v2, v3);
v1 = btVector3(0.5, 0, 0.866);
v2 = btVector3(0, 0, 0);
v3 = btVector3(0.5, 0.866, 0);
mesh->addTriangle(v1, v2, v3);
v1 = btVector3(0, 0, 0);
v2 = btVector3(1, 0, 0);
v3 = btVector3(0.5, 0, 0.866);
mesh->addTriangle(v1, v2, v3);
btCollisionShape* mesh_collision_shape = new btBvhTriangleMeshShape(mesh, 1);
btDefaultMotionState* mesh_motion_state = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(0, 50, 0)));
btScalar mesh_mass = 1;
btVector3 mesh_inertia(0, 0, 0);
mesh_collision_shape->calculateLocalInertia(mesh_mass, mesh_inertia);
btRigidBody* mesh_body = new btRigidBody(mesh_mass, mesh_motion_state, mesh_collision_shape);
dynamics_world->addRigidBody(mesh_body);
// Simulation
for (int i = 0; i < 300; i++)
{
dynamics_world->stepSimulation(1.f/60.f, 10);
btTransform mesh_transform;
mesh_body->getMotionState()->getWorldTransform(mesh_transform);
std::cout << mesh_transform.getOrigin().getY() << std::endl;
}
return 0;
}