Как создать многогранную сетку с помощью reactphysics3d

#c #game-engine #game-physics #physics-engine

#c #игровой движок #игра-физика #физический движок

Вопрос:

Я использую библиотеку reactphysics3d https://github.com/DanielChappuis/reactphysics3d

Я пытаюсь создать квадратную пирамиду в виде многогранной сетки — 4 внешних треугольных грани и две базовые треугольные грани.

Я могу успешно создать массив вершин полигона, но у меня возникли проблемы на этапе создания многогранника.

Я слежу за процессом создания формы, как описано в руководстве пользователя.

Я был бы признателен за помощь в этом! Спасибо

Это мой код — я попытался использовать треугольную пирамиду (треугольное основание с треугольными гранями) для создания треугольной сетки и смог это сделать. Затем я смог создать вогнутую форму.

Однако я хочу создать выпуклую форму, используя многогранную сетку для треугольной пирамиды с квадратным основанием. Любые советы будут оценены!

 //array of 5 points, 3 coordinates
        float vertices[15];
        for(int k=0; k<5; k  ){
                std::string vert = "v"   std::to_string(k);
                vertices[3*k] = j3["data"]["vertices"][vert]["x"];
                vertices[3*k 1] = j3["data"]["vertices"][vert]["y"];
                vertices[3*k 2] = j3["data"]["vertices"][vert]["z"];
                std::cout << std::setprecision(8);
                std::cout << "added " << vertices[3*k] << "to index" << 3*k << std::endl;
                std::cout << "added " << vertices[3*k 1] << "to index" << 3*k 1 << std::endl;
                std::cout << "added " << vertices[3*k 2] << "to index" << 3*k 2 << std::endl;
        }


        //6 triangle faces
        int indices[18];

        //each face is defined through vertices (ccw)
        //face1
        indices[0] = 0; indices[1] = 2; indices[2] = 1;

        //face2
        indices[3] = 0; indices[4] = 2; indices[5] = 3;

        //face3
        indices[6] = 0; indices[7] = 4; indices[8] = 3;

        //face4
        indices[9] = 0; indices[10] = 1; indices[11] = 4;

        //face5
        indices[12] = 1; indices[13] = 2; indices[14] = 4;

        //face6
        indices[15] = 4; indices[16] = 2; indices[17] = 3;

        rp3d::PolygonVertexArray::PolygonFace* polygonFaces = new rp3d::PolygonVertexArray::PolygonFace[6];
        rp3d::PolygonVertexArray::PolygonFace* face = polygonFaces;

        //each face has 3 indices
        //6 triangles
        for (int f=0; f<6; f  ){
                face->indexBase = f*3;
                face->nbVertices = 3;
        }

        std::cout << "created polygon faces" << std::endl;


        //create the polygon vertex array
        rp3d::PolygonVertexArray* pva = new rp3d::PolygonVertexArray(5, vertices, sizeof(float), indices, sizeof(int), 6, polygonFaces, rp3d::PolygonVertexArray::VertexDataType::VERTEX_FLOAT_TYPE, rp3d::PolygonVertexArray::IndexDataType::INDEX_INTEGER_TYPE);

std::cout << "polygon vertex array created" << std::endl;

        //create the polyhedron mesh
        rp3d::PolyhedronMesh* pMesh = new rp3d::PolyhedronMesh(pva);
        std::cout << "polyhedron mesh created" << std::endl;

        //create the convex mesh collision shape
        rp3d::ConvexMeshShape* convexMesh = new rp3d::ConvexMeshShape(pMesh);
        std::cout << "convex mesh shape created" << std::endl;
  

Ответ №1:

я думаю, вы забыли face в цикле faces