【发布时间】:2015-12-15 10:49:58
【问题描述】:
我正在使用 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...
我显然在这里遗漏了一些非常基本和明显的东西,但我看不出它是什么。
【问题讨论】:
标签: c++ file 3d loading assimp