使用Assimp加载OBJ模型时的视觉工件

时间:2014-07-06 19:39:15

标签: opengl assimp

我正在尝试将Assimp加载器集成到我的框架中。一切都很好,但在我正在渲染的这个蜘蛛模型中,它的尖牙没有按预期绘制(见下图)。

spider

以下是相关的代码段:

//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);
}

我的代码有什么问题?

1 个答案:

答案 0 :(得分:2)

您的代码没有明显错误。这些渲染伪影的一个可能原因是你加载的OBJ模型有一些面是三角形,有些面不是。您将所有内容渲染为GL_TRIANGLES,但OBJ格式可以将面指定为四边形,三角形条带,三角形甚至其他更奇特的东西,如补丁。

Assimp有一个网格三角测量工具,可以在处理这些多格式网格文件(如OBJ)时让您的生活更轻松。尝试将标志aiProcess_Triangulate传递给导入器的加载方法,如果您作为单独的步骤进行后处理,则尝试将其传递给后处理方法。这可能会解决问题。