opengl - 使用 Assimp 加载 OBJ 模型时的视觉伪像

标签 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);
}

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

最佳答案

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

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

关于opengl - 使用 Assimp 加载 OBJ 模型时的视觉伪像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24599637/

相关文章:

c++ - glsl 顶点着色器统一变量未激活

c++ - OpenGl - 如何重复纹理?

c++ - 基本 OpenGL 渲染的问题?

c++ - 将指针复制到 aiScene

c++ - Assimp从搅拌器加载电枢导致AI_SCENE_FLAGS_INCOMPLETE

cmake - 将 assimp 库与 find_package 链接

c++ - Opengl 纹理有时会在窗口调整大小时闪烁/移动

c++ - OpenGL 文本忽略转义序列

c++ - OpenGL Assimp 导入模型不渲染

c++ - Assimp 泄漏内存