我正在尝试将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);
}
我的代码有什么问题?
答案 0 :(得分:2)
您的代码没有明显错误。这些渲染伪影的一个可能原因是你加载的OBJ模型有一些面是三角形,有些面不是。您将所有内容渲染为GL_TRIANGLES
,但OBJ格式可以将面指定为四边形,三角形条带,三角形甚至其他更奇特的东西,如补丁。
Assimp有一个网格三角测量工具,可以在处理这些多格式网格文件(如OBJ)时让您的生活更轻松。尝试将标志aiProcess_Triangulate传递给导入器的加载方法,如果您作为单独的步骤进行后处理,则尝试将其传递给后处理方法。这可能会解决问题。