在应用程序中,我必须绘制许多长度可变的不相交的多边形。多边形之间的颜色不同,但单个多边形中的所有顶点都具有相同的颜色。我怎样才能有效地绘制它们?
我首先用相同的颜色绘制所有多边形。使用 glMultiDrawArrays
和颜色统一很容易做到这一点;例如(使用 GL_LINE_LOOP
让事情变得简单):
glUniform4f(shaderColourLocation, red, blue, green, alpha);
glMultiDrawArrays(GL_LINE_LOOP, pFirstIndices, pPolygonSizes, polygonCount);
这与我拥有的数据配合得很好,但我可以看到添加每个多边形颜色的唯一方法是:
- 将其分解为多个
glDrawArrays
调用,每次都设置颜色(大量额外的 API 调用); - 缓冲每个顶点的颜色数据(重复很多颜色数据);
- 缓冲多边形索引并使用统一的颜色数组(更复杂,并且仍然有一些冗余数据)。
有没有更好的方法来实现每个多边形的颜色,同时仍然使用 glMultiDrawArrays
或类似的东西?
最佳答案
您想要实现的目标(每个多边形一种颜色)称为平面着色。
您可能可以通过使用 the flat
qualifier 来调整着色器宽度.
你也可以看看glShadeModel参数,通过使用 GL_FLAT
模式并巧妙地定义三角形的第一个顶点,您可以避免在缓冲区中复制数据。
您可以在 the OpenGl compatibility specs 中找到文档(p482 #507/953 §13.4)。
关于c++ - 在 OpenGL 3+ 中高效绘制多边形(每个多边形一种颜色),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29650466/