2009-10-15 155 views
0

约一半的网格使用三角形,另一半使用三角形网格。 我想卸载这些到一个顶点缓冲区对象,但我不太清楚如何做到这一点。三角形球迷都有不同的顶点数...例如,一个可能有5个和另一个7.使用顶点缓冲对象渲染不同的三角形类型和三角形扇形? (OpenGL)

VBO的使用普通三角形是相当直接,但我不知道如何使用它们与三角形粉丝或用不同的三角形类型。我很确定我需要一个索引缓冲区,但我不太清楚我需要做什么。

我知道在运行时有多少个顶点组成每个风扇......我想我可以用它来调用类似glArrayElement

这里任何帮助,将不胜感激!

回答

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)。每个原语的呼叫很少有效。

+0

Bahbar,谢谢你的提示!我读过关于将粉丝转化为三角形的方法......但是我可能会有20万个三角粉丝的基元。当然,我只需要这样做一次,所以你认为转换它们然后做glDrawArrays或者我应该为每个prim调用它会更便宜吗?谢谢 – Polaris878 2009-10-15 20:41:06

+0

好吧,如果你有200K三角迷,那么你有多少**每帧**。考虑将风扇转换为三角形所需的一些加载时间(或更好的离线处理时间)的成本。太阳提出了一个扩展,因为这是10年前*的开销太多。天花板/杂色的工作比例只是增加。 http://www.opengl.org/registry/specs/SUN/triangle_list.txt – Bahbar 2009-10-16 06:55:48

+0

为了完整,我应该补充说[原始重启](http://www.opengl.org/registry/specs/NV/ primitive_restart.txt)是一个你可以使用的扩展(但需要索引你的基元,你应该看看)。 [glMultiDrawArrays](http://www.opengl.org/sdk/docs/man/xhtml/glMultiDrawArrays.xml)是减少开销的另一种尝试,但很少在驱动程序中实际优化。 – Bahbar 2009-10-16 07:07:36