2014-06-16 8 views
1

내 응용 프로그램의 큰 메쉬에서 btBvhTriangleMeshShape를 만들고 리지드 바디로 사용하려고합니다. 이 딱딱한 몸체는 고정되어 움직이지 않는 '접지면'을 구성합니다. 문제는 심지어 거기에없는 것처럼 모든 것이 곧바로 빠져 나간다는 것입니다. 여기에 전류 소스입니다 : 빨리 강체를 만들 단지 도우미 함수글 머리 기호 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(), 나는 다른 객체를 사용하고 잘 충돌하기 때문에이 기능이 제대로 작동 알고있다.

여기에 대한 모든 통찰력은 크게 감사하겠습니다. 시간 내 주셔서 대단히 감사합니다.

편집 : enter image description here 그리고 여기 해명 는 위의 샷 : 여기 디버그 서랍 (이 메쉬 아래에서 샷) 무엇가 표시됩니다 접선 후 enter image description here

내가 돈이 ' 메쉬 자체 나 물리 메쉬를 만들기 위해 꼭지점을 반복하는 코드가 있는지 확인하십시오.

+0

무엇이 바닥을 떨어 뜨리는 걸까요? 디버그 뷰를 켜서 발생하지 않았는지 확인 했습니까? – weston

+0

그래, 내가 가서 디버그 뷰를 연결하고 바닥은 있어야합니다. – KKlouzal

+0

녹색이 삼각형이고 빨간색이 바인딩 볼륨이라고 생각합니다. 바닥이 어떻게 보이는지 설명 할 수 있습니다. 마치 틈새가 많은 것처럼 보이기 때문에 실제로는 대부분 틈이 있습니다. 그래서 나는 많은 것이 떨어지는 것에 놀라지 않을 것입니다. – weston

답변

0

Irrlicht 메쉬 버퍼를 통해 제공된 삼각형을 반복 할 때, 현재 존재하는 모든 메쉬 버퍼를 반복 할 필요가있었습니다. 모델은 이렇게 :

btTriangleMesh* tMesh = new btTriangleMesh(); 

irr::u32 MBCount = WorldMesh1->getMeshBufferCount(); 

for (irr::u32 m = 0; m < MBCount; m++) 
{ 
    irr::scene::IMeshBuffer* MB = WorldNode1->getMesh()->getMeshBuffer(m); 

    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)); 
    } 
} 
관련 문제