【发布时间】:2012-08-20 12:00:13
【问题描述】:
我有一堆 GL_POLYGONS 我需要使用顶点数组(放入顶点缓冲区对象)进行渲染。
我正在使用索引和 glDrawElements()。
我知道您可以使用冗余顶点对 GL_TRIANGLE_STRIPS 进行批处理,以便在渲染过程中将它们链接起来。
GL_POLYGON 是否可以实现类似的功能?
如果可能,我想避免在循环中调用 glDrawElements(),为每个多边形指定索引。
(这不适用于 OpenGL ES - 我在笔记本电脑上使用 OpenGL。)
编辑#1:
我想在这里补充一下蒂姆在下面的答案(原始重启)有效,但您需要记住启用此模式 - 我花了一段时间才弄清楚。即:
// enable primitive restart
glEnable(GL_PRIMITIVE_RESTART);
【问题讨论】:
-
虽然蒂姆的回答是正确的,但作为一般建议,不要乱用多边形,它们只是垃圾(从人们认为三角形以外的东西实际上可以理解的日子开始)。它们无论如何都需要是凸的,因此通常只实现为
GL_TRIANGLE_FAN。而这反过来又可以用GL_TRIANGLES的列表来表示,这消除了退化顶点和重新启动的任何需要。GL_QUADS和GL_POLYGON已被弃用是有原因的,没有人关心非三角形。尽管带有GL_TRIANGLE_FAN的primitive_restart 可能是一种选择。 -
这个建议并不总是实用的。就我而言,我需要支持一种几何格式,该格式可以具有 N 边的多边形 - 凸面、非凸面和带孔。我对非凸多边形进行了镶嵌——也许我也需要对凸多边形进行镶嵌。
标签: opengl