【发布时间】:2014-06-16 23:13:18
【问题描述】:
我正在尝试在我的应用程序中从一个大网格中创建一个 btBvhTriangleMeshShape,并将其用作刚体。这个刚体将构成静止不动的“地平面”。问题是一切都直截了当,就像它甚至不存在一样。以下是当前来源:
btTriangleMesh* tMesh = new btTriangleMesh();
irr::scene::IMeshBuffer* MB = WorldNode1->getMesh()->getMeshBuffer(1);
irr::video::S3DVertex* Vertices = (irr::video::S3DVertex*)MB->getVertices();
irr::u16* Indices = MB->getIndices();
for (irr::u32 i = 0; i < MB->getIndexCount(); i+=3)
{
irr::core::vector3df Tri1Pos = Vertices[Indices[i]].Pos;
irr::core::vector3df Tri2Pos = Vertices[Indices[i+1]].Pos;
irr::core::vector3df Tri3Pos = Vertices[Indices[i+2]].Pos;
tMesh->addTriangle(btVector3(Tri1Pos.X, Tri1Pos.Y, Tri1Pos.Z), btVector3(Tri2Pos.X, Tri2Pos.Y, Tri2Pos.Z), btVector3(Tri3Pos.X, Tri3Pos.Y, Tri3Pos.Z));
}
btCollisionShape* groundShape = new btBvhTriangleMeshShape(tMesh, false);
btDefaultMotionState* groundMotionState = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(0, -1, 0)));
PH->CreateRigidBody(0, groundMotionState, groundShape);
PH->CreateRigidBody() 只是一个快速创建刚体的辅助函数,我知道这个函数可以正常工作,因为其他对象使用它并且碰撞很好。
非常感谢您对此处问题的任何见解。非常感谢大家的宝贵时间。
编辑: 连接调试抽屉后,它会显示以下内容(这是从网格下方拍摄的照片): 为了澄清,这里是上面的镜头:
我不知道这是网格本身的问题,还是遍历顶点以创建物理网格的代码的问题
【问题讨论】:
-
是什么阻止了地板掉落?您是否打开了调试视图以检查没有发生这种情况?
-
是的,我继续连接调试视图,地板就在它应该在的地方。
-
我猜绿色是三角形,红色是装订量。所以你能解释一下地板应该是什么样子,因为它看起来有很多缝隙,实际上大部分是缝隙。所以我不会对失败的很多事情感到惊讶。
标签: c++ c++11 bulletphysics irrlicht