首先是一些事实: 我尝试使用Visual Studio 2012在C ++中实现与Bullet的碰撞检测。 到目前为止,我有一个球体:
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);
和我的等级,实现为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);
我知道在三角形中只有一个三角形,但它们会发生碰撞。
现在我的问题是,当它们发生碰撞时,我的程序关闭时没有发生任何特定错误,只是来自visual studio的unhandle异常窗口。
有人有想法吗?
答案 0 :(得分:3)
为了将来参考,下面是一个简单的{+ 1}} C ++的简短工作示例,受上述问题的启发。质量为btBvhTriangleMeshShape
,因为网格显然是一个静态对象。
0.0f
答案 1 :(得分:2)
在这一行
triangles.addTriangle(btVector3 (0, 0, 0),btVector3 (0, 0, 0),btVector3 (0, 0, 0));
你给所有坐标都是零值,所以三角形不正确,也许这就是问题的原因。