我最近在让顶点缓冲区对象工作方面取得了很大进展。所以我转向元素数组,我想通过这样的实现,我可以从 obj 加载顶点和面数据。
我不太擅长用 C++ 读取文件,所以我写了一个 python 文档来解析 obj 并编写 2 个单独的 txt 来给我一个顶点数组和面索引,并将它们直接粘贴到我的代码中。这就像 6000 行,但它可以工作(没有编译错误)。这就是它的样子
.
我认为他们错了。我不知道。顶点和面的顺序并没有改变,只是从 obj 中提取出来的,因为我还没有用于缓冲区对象的法线或纹理。如果你看立方体,我会这样做,但不是真的。
这是渲染代码
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
对象是英雄联盟的伊泽瑞尔
我不确定我是否看错了这些面孔,或者它们是否甚至不是我认为的那样。我想使用GL_TRIANGLE_STRIP
还是别的什么。任何提示或请求更多信息。