3

我正在尝试将 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);
}

我的代码可能有什么问题?

4

1 回答 1

2

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

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

于 2014-07-07T19:46:43.323 回答