c – OBJ,缓冲区对象和面部索引
作者:互联网
我最近在使Vertex缓冲区对象工作方面取得了很大进展.
所以我转向Element数组,我想通过这样的实现,然后我可以从obj加载顶点和面部数据.
我不太擅长读取c中的文件所以我编写了一个python doc来解析obj并编写2个单独的txts给我一个顶点数组和面部索引并直接粘贴在我的代码中.这就像6000行,但它的工作原理(没有编译错误).
而这就是它的样子
.
我认为他们错了.我不确定.刚刚从obj中提取的顶点和面的顺序不会改变,因为我还没有法线或纹理适用于缓冲区对象.如果你看看立方体但我不是真的,我会这样做.
继承人render code
void Mesh_handle::DrawTri(){
glBindBuffer(GL_ARRAY_BUFFER,vertexbufferid);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,elementbufferid);
int index1=glGetAttribLocation(bound_program,"inputvertex");
int index2=glGetAttribLocation(bound_program,"inputcolor");
int index3=glGetAttribLocation(bound_program,"inputtexcoord");
glEnableVertexAttribArray(index1);
glVertexAttribPointer(index1,3,GL_FLOAT,GL_FALSE,9*sizeof(float),0);
glEnableVertexAttribArray(index2);
glVertexAttribPointer(index2,4,GL_FLOAT,GL_FALSE,9*sizeof(float),(void*)(3*sizeof(float)));
glEnableVertexAttribArray(index3);
glVertexAttribPointer(index3,2,GL_FLOAT,GL_FALSE,9*sizeof(float),(void*)(7*sizeof(float)));
glDrawArrays(GL_TRIANGLE_STRIP,0,elementcount);
//glDrawElements(GL_TRIANGLE_STRIP,elementcount,GL_UNSIGNED_INT,0);
}
我的python解析器只是将信息写入文件:source
对象是来自英雄联盟的Ezreal
我不确定我是否错误地读了这些面孔,或者他们的面孔是不是我认为的那样.我想使用GL_TRIANGLE_STRIP或其他东西.任何提示或请求更多信息.
解决方法:
首先,正如Andreas所说,.obj文件使用基于1的索引,因此您需要将它们转换为基于0的索引.
第二:
glDrawArrays(GL_TRIANGLE_STRIP,0,elementcount);
//glDrawElements(GL_TRIANGLE_STRIP,elementcount,GL_UNSIGNED_INT,0);
除非你做了一些特殊的工作来将你的.obj文件中的面部列表转换成三角形条,否则你没有三角形条.你应该渲染GL_TRIANGLES,而不是条带.
标签:wavefront,c,opengl,render 来源: https://codeday.me/bug/20190901/1786207.html