我的大约一半网格使用三角形,另一半使用三角形扇形。 我想将它们卸载到顶点缓冲区对象中,但我不太清楚如何做到这一点。三角形扇子都有不同数量的顶点...例如,一个可能有5个,另一个可能有7个。
VBO使用普通三角形相当直接,但是我不确定如何将它们用于三角形扇形或不同的三角形类型。我很确定我需要一个索引缓冲区,但我不太清楚我需要做什么。
我知道在运行时有多少顶点组成每个风扇......我想我可以用它来调用像glArrayElement
这样的东西
非常感谢任何帮助!
答案 0 :(得分:2)
VBOs和索引缓冲区是一个正交的东西。 如果你还没有使用索引缓冲区,那么一次移动一步可能更明智。
所以...关于你的问题。如果你把所有的三角形风扇放在一个vbo中,你需要绘制它们的唯一方法是设置你的vbo并将其中的索引传递给你的粉丝开始
glBindBuffer(GL_VERTEX_BUFFER, buffer);
glVertexPointer(3, GL_FLOAT, 0, NULL); // 3 floats per vertex
for each i in fans
glDrawArrays(GL_TRIANGLE_FAN, indef_of_first_vertex_for_fan[i], fan_vertex_count[i])
编辑:我不得不说你最好将粉丝转换为常规三角形集,并对所有三角形使用glDrawArrays(GL_TRIANGLES)
。每个基元的调用很少有效。