Reputation: 119
First some facts: I try to realise Collision Detection with Bullet in C++ using Visual Studio 2012. So far i have a Sphere:
btCollisionShape* fallShape = new btSphereShape(100);
btDefaultMotionState* fallMotionState =
new btDefaultMotionState(btTransform(btQuaternion(0,0,0,1),btVector3(0,500,0)));
btScalar mass = 1000;
btVector3 fallInertia(0,0,0);
fallShape->calculateLocalInertia(mass,fallInertia);
btRigidBody::btRigidBodyConstructionInfo fallRigidBodyCI(mass,fallMotionState,fallShape,fallInertia);
btRigidBody* fallRigidBody = new btRigidBody(fallRigidBodyCI);
physicsWorld->addRigidBody(fallRigidBody);
and my level, realised as btBvhTriangleMeshShape:
triangles.addTriangle(btVector3 (0, 0, 0),btVector3 (0, 0, 0),btVector3 (0, 0, 0));
btCollisionShape* levelShape = new btBvhTriangleMeshShape(&triangles, true, true);
btDefaultMotionState* levelMotionState = new btDefaultMotionState(btTransform(btQuaternion(0,0,0,1),btVector3(0,0,0)));
btRigidBody::btRigidBodyConstructionInfo
levelRigidBodyCI(0,levelMotionState,levelShape,btVector3(0,0,0));
btRigidBody* levelRigidBody = new btRigidBody(levelRigidBodyCI);
physicsWorld->addRigidBody(levelRigidBody);
I know that in triangles is only one triangle but they collide.
My Problem is now, that when they collide, my program shuts down with no specific error, simply a unhandle exception window from visual studio.
Anyone an idea?
Upvotes: 1
Views: 3239
Reputation: 707
For future reference, here below is a short working example in C++ of a flat btBvhTriangleMeshShape
, inspired by the question above. Mass is 0.0f
as the mesh is obviously a static object.
btVector3 vertex1, vertex2, vertex3, vertex4;
btTriangleMesh* triangleMeshTerrain = new btTriangleMesh();
for (int i = -250; i < 250; i = i + 10) {
for (int j = -250; j < 250; j = j + 10) {
vertex1 = btVector3(i, 0.0f, j);
vertex2 = btVector3(i + 10.0f, 0.0f, j);
vertex3 = btVector3(i + 10.0f, 0.0f, j + 10.0f);
vertex4 = btVector3(i, 0.0f, j + 10.0f);
triangleMeshTerrain->addTriangle(vertex1, vertex2, vertex3);
triangleMeshTerrain->addTriangle(vertex1, vertex3, vertex4);
}
}
btCollisionShape* collisionShapeTerrain = new btBvhTriangleMeshShape(triangleMeshTerrain, true);
btDefaultMotionState* motionState = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(0, -15, 0)));
btRigidBody::btRigidBodyConstructionInfo rigidBodyConstructionInfo(0.0f, motionState, collisionShapeTerrain, btVector3(0, 0, 0));
btRigidBody* rigidBodyTerrain = new btRigidBody(rigidBodyConstructionInfo);
rigidBodyTerrain->setFriction(btScalar(0.9));
m_dynamicsWorld->addRigidBody(rigidBodyTerrain);
Upvotes: 5
Reputation: 344
In this line
triangles.addTriangle(btVector3 (0, 0, 0),btVector3 (0, 0, 0),btVector3 (0, 0, 0));
You are giving all coordinates the zero value, so the triangle is not correct and maybe that is the cause of the problem.
Upvotes: 3