C++ 用c+加载obj文件时出现错误+;和opengl

C++ 用c+加载obj文件时出现错误+;和opengl,c++,opengl,C++,Opengl,我编写了obj loader,并得到以下结果: 这是一只黄鹰,但正如你们所看到的,它的腿和翅膀之间还有一些额外的三角形。我使用的代码是: {.... glBindBuffer(GL_ARRAY_BUFFER,vbo); glBufferData(GL_ARRAY_BUFFER,sizeof(data),data,GL_STATIC_DRAW); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo); glBufferData(GL_

我编写了obj loader,并得到以下结果:

这是一只黄鹰,但正如你们所看到的,它的腿和翅膀之间还有一些额外的三角形。我使用的代码是:

{....
    glBindBuffer(GL_ARRAY_BUFFER,vbo);
    glBufferData(GL_ARRAY_BUFFER,sizeof(data),data,GL_STATIC_DRAW);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER,numOfIndices*sizeof(GLuint),indices,GL_STATIC_DRAW);
}

void Mesh::draw( )
{

    glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER,vbo);
    glVertexAttribPointer(
            0,                  // attribute 0. No particular reason for 0, but must match the layout in the shader.
            3,                  // size
            GL_FLOAT,           // type
            GL_FALSE,           // normalized?
            0,                  // stride
            (void*)0            // array buffer offset
        );
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,ibo);
    glDrawElements(GL_TRIANGLES,numOfIndices,GL_UNSIGNED_INT,(void*)0  );
    glDisableVertexAttribArray(0);
}
其中,数据是顶点数组,索引是索引数组

当我以obj格式获取并保存数据和索引,并在3D编辑器中打开生成的文件时,eagle看起来很好,并且没有这些额外的三角形(这意味着数据和索引都很好)

我花了几个小时试图修复代码,使eagle看起来正常,但现在我没有什么想法了。所以,如果你有任何想法如何使鹰正常与我分享


对于那些认为问题在loader中的人,这里是obj模型的屏幕,它是由loader的数据(来自data[]和Indexs[])组成的。

最终找到了解决方案

obj中的索引。格式从1(不是0)开始,当您将顶点加载到GL#U数组#U缓冲区时,顶点#1变为顶点#0,整个索引中断


因此,有必要将所有索引值减少1,然后指向顶点#1的索引将指向顶点#0,索引将变得正确。

最终找到了解决方案

obj中的索引。格式从1(不是0)开始,当您将顶点加载到GL#U数组#U缓冲区时,顶点#1变为顶点#0,整个索引中断


因此,有必要将所有索引值减少1,然后指向顶点#1的索引将指向顶点#0,索引将变得正确。

您确定错误在于渲染而不是加载吗?使用调试器查看加载的网格数据,是否正确?当然你也可以把它打印出来。我明白你的观点,我也有同样的想法,为了测试它们,我把数据和索引转换回obj,在3d编辑器中得到了正常的模型,正如我前面提到的。因此,加载已经过测试,并且运行良好。您确定错误在于渲染而不是加载吗?使用调试器查看加载的网格数据,是否正确?当然你也可以把它打印出来。我明白你的观点,我也有同样的想法,为了测试它们,我把数据和索引转换回obj,在3d编辑器中得到了正常的模型,正如我前面提到的。因此,负载已经过测试,运行良好