作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我最近在让顶点缓冲区对象工作方面取得了很大进展。所以我转向了元素数组,我想通过这样的实现我可以从一个对象加载顶点和面数据。
我不太擅长用 C++ 读取文件,所以我写了一个 python 文档来解析 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
对象是英雄联盟的伊泽瑞尔
我不确定我是否看错了这些面孔,或者它们是否与我想象的不一样。我应该使用 GL_TRIANGLE_STRIP
还是其他东西。任何提示或请求更多信息。
最佳答案
obj 文件中的索引基于 1,因此您必须从所有索引中减去 1 才能将它们用于 OpenGL。
关于c++ - OBJ、Buffer 对象和面索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12156901/
我是一名优秀的程序员,十分优秀!