它是黄色的老鹰,但是你看到它有一些额外的三角形从它的腿到翅膀。我使用的代码:
{....
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看起来很好并且没有这些额外的三角形(这意味着数据和索引都很好)。
我花了好几个小时试图修复代码并让老鹰看起来很正常,但现在我已经没想完了。所以,如果您有任何想法如何让老鹰正常与我分享,那么请。
对于那些认为问题出现在加载程序中的人来说,obj模型的屏幕是由加载器中的数据构成的(来自data []和indices [])
答案 0 :(得分:2)
Finally found solution.
Indexing in obj. format starts at 1 (not 0 ) and when you load vertices to GL_ARRAY_BUFFER vertex #1 becomes vertex#0 and whole indexing breaks.
Therefore it is necessary to decrease all values of indices by 1 and then index that pointed to vertex #1 will point to vertex #0 and indexing will become correct.