在一个应用程序中,我必须绘制许多不同长度的不相交多边形。颜色在多边形之间变化,但单个多边形中的所有顶点将具有相同的颜色。我怎样才能有效地绘制它们?
我开始绘制所有颜色相同的多边形。这很容易用glMultiDrawArrays
和颜色制服;例如(使用GL_LINE_LOOP
来保持简单):
glUniform4f(shaderColourLocation, red, blue, green, alpha);
glMultiDrawArrays(GL_LINE_LOOP, pFirstIndices, pPolygonSizes, polygonCount);
这与我的数据配合得很好,但我可以看到添加每个多边形颜色的唯一方法是:
glDrawArrays
调用,每次都设置颜色(许多额外的API调用); 有没有更好的方法来实现每个多边形的颜色,同时仍然使用glMultiDrawArrays
或类似的东西?
答案 0 :(得分:1)
您想要实现的目标(每个多边形一种颜色)称为平面着色。
您可以使用the flat
qualifier来设置着色器的宽度。
您还可以查看glShadeModel参数,使用GL_FLAT
模式并巧妙地定义三角形的第一个顶点,您可以避免在缓冲区中复制数据。
您可以在the OpenGl compatibility specs(p482#507 /953§13.4)中找到文档。
答案 1 :(得分:0)
使用 实例化属性 。
呼叫
glVertexAttribDivisor(color_attrib_location, 1);
初始化顶点数组时。
使用此设置,每个点/线/多边形只需要一份颜色值。
此外,您应该在着色器中对此属性使用flat
插值限定符,但这不是必需的。