在PhysX中创建三角形网格的问题

时间:2018-03-14 14:15:28

标签: c++ 3d physx

我构建了一个快速python脚本,它读取wavefront .obj文件并将verticies和faces输出到文件。我有另一个C ++函数,它读取这些文件并根据这些文件创建一个网格。

我遇到的问题是,这种情况有时会完美,而其他时间则不是很多 - 使用相同的网格。例如。我启动我的PhysX程序,并创建10个相同网格的相同对象,其中一些看起来像这样:

Normal Mesh

和其他人看起来像这样:

Broken Mesh

以下C ++是加载verticies和三角形的代码:

bool ModelLoader::LoadVertexFile(const std::string& fileLocation)
{
    std::ifstream file(fileLocation);
    if (!file) {
        std::cerr << "Failed to load vertex data\n";
        return false;
    }

    float x, y, z;
    vertexArray.clear();

    while (file >> x >> y >> z)
    {
        vertexArray.push_back(PhysicsEngine::PxVec3(x, y, z));
    }
    return true;
}

bool ModelLoader::LoadTrianglesFile(const std::string& fileLocation)
{
    std::ifstream file(fileLocation);
    if (!file) {
        std::cerr << "Failed to load vertex data\n";
        return false;
    }

    int x;
    triangleArray.clear();
    while (file >> x)
    {
        triangleArray.push_back(x);
    }
    return true;
}

这是用于创建构建网格的代码

   CustomObject(const PxTransform& pose = PxTransform(PxIdentity), string vertfile = "", string trigfile = "") :
        StaticActor(pose)
    {

        modelLoader = new ModelLoader();
        if(!modelLoader->LoadVertexFile(vertfile))
            throw new Exception("Failed to load VertexFile.");
        if(!modelLoader->LoadTrianglesFile(trigfile))
            throw new Exception("Failed to load TrianglesFile.");

        PxTriangleMeshDesc mesh_desc;
        mesh_desc.points.count = (PxU32)modelLoader->vertexArray.size();
        mesh_desc.points.stride = sizeof(PxVec3);
        mesh_desc.points.data = &modelLoader->vertexArray.front();
        mesh_desc.triangles.count = (PxU32)modelLoader->triangleArray.size();
        mesh_desc.triangles.stride = 3 * sizeof(PxU32);
        mesh_desc.triangles.data = &modelLoader->triangleArray.front();

        CreateShape(PxTriangleMeshGeometry(CookMesh(mesh_desc)));
    }

所以如果有人能帮我弄清楚什么是错的,那将非常感激

0 个答案:

没有答案