C++ 用c+加载obj文件时出现错误+;和opengl
我编写了obj loader,并得到以下结果: 这是一只黄鹰,但正如你们所看到的,它的腿和翅膀之间还有一些额外的三角形。我使用的代码是: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_
{....
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编辑器中得到了正常的模型,正如我前面提到的。因此,负载已经过测试,运行良好