Assimp Faces都有索引(0,1,2)

时间:2015-09-18 10:12:20

标签: c++ file 3d loading assimp

我正在使用Assimp加载OBJ文件,使用我自己的渲染管道在OpenGL中渲染。

但是当我加载文件时,每个面都有索引(0,1,2),而不是顶点数组中的相应条目。

我能找到的每个例子都有类似的东西(我正在做的事情):

for (size_t k = 0; k<mesh->mNumFaces; ++k)
{
    if (mesh->mFaces->mNumIndices == 3)
    {
        out.index_list.push_back(mesh->mFaces->mIndices[0]);
        out.index_list.push_back(mesh->mFaces->mIndices[1]);
        out.index_list.push_back(mesh->mFaces->mIndices[2]);
    }
    else
    {
        std::cout << "wierd number of indices to a face: " << mesh->mFaces->mNumIndices << std::endl;
    }
}

或者这(我已经尝试了,并且非常错误):

for (size_t k = 0; k<mesh->mNumFaces; ++k)
{
    if (mesh->mFaces->mNumIndices == 3)
    {
        out.index_list.push_back(mesh->mFaces->mIndices[0]+k*3);
        out.index_list.push_back(mesh->mFaces->mIndices[1]+k*3);
        out.index_list.push_back(mesh->mFaces->mIndices[2]+k*3);
    }
    else
    {
        std::cout << "wierd number of indices to a face: " << mesh->mFaces->mNumIndices << std::endl;
    }
}

我还尝试了一些基于网格中顶点和面的相对数量的变化,猜测它应该是一个三角形条等等......而且这也没有用。

示例:

if (mesh->mNumFaces == mesh->mNumVertices-2)
    for (size_t k = 0; k<mesh->mNumVertices-2; ++k)
    {
        if (k%2)
        {
            out.index_list.push_back(k+1);
            out.index_list.push_back(k+0);
            out.index_list.push_back(k+2);
        }
        else
        {
            out.index_list.push_back(k+0);
            out.index_list.push_back(k+1);
            out.index_list.push_back(k+2);
        }
    }
else if...

我显然在这里遗漏了一些非常基本和明显的东西,但我看不出它是什么。

2 个答案:

答案 0 :(得分:1)

我认为你的代码只是加载网格中第一个三角形(面)的索引(aiMesh)。

mesh->mFace是一个指针,指向aiFace s数组的第一个元素。

您的(第一个)代码没有考虑变量k,即您的面部索引
相反,这样做:

for (size_t k = 0; k<mesh->mNumFaces; ++k)
{
    if (mesh->mFaces->mNumIndices == 3)
    {
        // kth face!
        out.index_list.push_back(mesh->mFaces[k].mIndices[0]);
        out.index_list.push_back(mesh->mFaces[k].mIndices[1]);
        out.index_list.push_back(mesh->mFaces[k].mIndices[2]);
    }
    else
    {
        std::cout << "wierd number of indices to a face: " << mesh->mFaces->mNumIndices << std::endl;
    }
}

这样,您的index_list应填充正确的索引
希望这可以帮助! :)

答案 1 :(得分:0)

mFaces是一个数组...即一个指针。 执行mFaces-> mIndices就像执行mFaces [0]-> mIndices。

这就是为什么您获得相同的索引...