[英]Cant access correct number of vertices for a 3d model (.OBJ) using Assimp
我正在嘗試訪問 an.Obj 文件的頂點,然后對它們進行一些操作。 但是assimp lib顯示的頂點數。 實際上與我通過使用文本編輯器(例如記事本++)打開.Obj 文件來檢查它們是不一樣的。 在這方面的任何建議都非常好,在此先感謝。 我正在使用以下代碼片段:
std::string path = "model.obj";
Assimp::Importer importer;
const aiScene* scene = importer.ReadFile(path, aiProcess_Triangulate);
//i've changed the parameters but the issue is same
auto mesh = scene->mMeshes[0]; //Zero index because Im loading single model only
ofstream outputfile; //write the vertices in a text file read by assimp
outputfile.open("vertex file.txt");
for (int i = 0; i < mesh->mNumVertices; i++) {
auto& v = mesh->mVertices[i];
outputfile << v.x <<" " ;
outputfile << v.y << " ";
outputfile << v.z << " "<<endl;
}
outputfile.close();
附加頂點只是現有頂點的副本嗎? 如果是這種情況,則可能是因為所述頂點是多個面的一部分。 由於Assimp將法線,UV映射等與頂點位置一起存儲,因此屬於兩個不同面的一部分的同一頂點具有兩個法線,兩個UV坐標等。這可能是附加頂點的原因。
Assimp Library
從文件加載模型,它將建立一個樹形結構以將對象存儲在模型中。 例如:一個房屋模型包含牆壁,地板等...如果模型中有多個對象,那么您的代碼是錯誤的。 如果是這樣,您可以嘗試以下方式:
void loadModel(const std::string& vPath)
{
Assimp::Importer Import;
const aiScene* pScene = Import.ReadFile(vPath, aiProcess_Triangulate | aiProcess_FlipUVs);
if(!pScene || pScene->mFlags & AI_SCENE_FLAGS_INCOMPLETE || !pScene->mRootNode)
{
std::cerr << "Assimp error: " << Import.GetErrorString() << endl;
return;
}
processNode(pScene->mRootNode, pScene);
}
void processNode(aiNode* vNode, const aiScene* vScene)
{
// Process all the vNode's meshes (if any)
for (GLuint i = 0; i < vNode->mNumMeshes; i++)
{
aiMesh* pMesh = vScene->mMeshes[vNode->mMeshes[i]];
for(GLuint i = 0; i < pMesh->mNumVertices; ++i)
{
// Here, you can save those coords to file
pMesh->mVertices[i].x;
pMesh->mVertices[i].y;
pMesh->mVertices[i].z;
}
}
// Then do the same for each of its children
for (GLuint i = 0; i < vNode->mNumChildren; ++i)
{
this->processNode(vNode->mChildren[i], vScene);
}
}
請注意,我不會編譯這些代碼,而只是在文本編輯器中進行編碼。 祝好運。
有點舊,但也許有人會發現它有用。
只需添加aiProcess_JoinIdenticalVertices
const aiScene *scene = importer.ReadFile(path, aiProcess_Triangulate | aiProcess_JoinIdenticalVertices);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.