我正在尝试将 Assimp 加载程序集成到我的框架中。一切都渲染得很好,但在我渲染的这个蜘蛛模型中,它的毒牙没有按预期绘制(见下图)。
下面是相关的代码片段:
//Storing the Indices
for (unsigned int t = 0; t < mesh->mNumFaces; ++t) {
aiFace* face = &mesh->mFaces[t];
memcpy(&faceArray[index], face->mIndices, 3*sizeof(unsigned int));
index += 3;
}
//Storing the Vertices
for (unsigned int t = 0; t < mesh->mNumVertices; ++t) {
aiVector3D vertex ;
if (mesh->HasPositions()) {
vertex = mesh->mVertices[t];
memcpy(&vertexArray[index], &vertex,3*sizeof(float));
}
index += 3;
}
//Render module
void model::helperDraw(GLuint vertexBufferID, GLuint indexBufferID, GLuint textureID)
{
GLint indexSize;
glBindBuffer(GL_ARRAY_BUFFER,vertexBufferID);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,indexBufferID);
glGetBufferParameteriv(GL_ELEMENT_ARRAY_BUFFER, GL_BUFFER_SIZE, &indexSize);
glBindTexture( GL_TEXTURE_2D, textureID);
glDrawElements(GL_TRIANGLES, indexSize/sizeof(GLuint), GL_UNSIGNED_INT, 0);
}
我的代码可能有什么问题?
最佳答案
您的代码没有明显的错误。这些渲染伪像的一个可能原因是您加载的 OBJ 模型有一些面是三角形的,有些面不是。您正在将所有内容渲染为 GL_TRIANGLES
,但 OBJ 格式可以将面指定为四边形、三角形带、三角形,甚至其他更奇特的东西,如补丁。
Assimp 具有网格三角剖分工具,可以让您在处理这些多格式网格文件(例如 OBJ)时更加轻松。尝试传递标志 aiProcess_Triangulate到导入器的加载方法,如果您将后处理作为一个单独的步骤进行,甚至到后处理方法。这可能会解决问题。
关于opengl - 使用 Assimp 加载 OBJ 模型时的视觉伪像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24599637/