gpt4 book ai didi

c++ - 在 OpenGL 3+ 中高效绘制多边形(每个多边形一种颜色)

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:18:45 26 4
gpt4 key购买 nike

在应用程序中,我必须绘制许多长度可变的不相交的多边形。多边形之间的颜色不同,但单个多边形中的所有顶点都具有相同的颜色。我怎样才能有效地绘制它们?

我首先用相同的颜色绘制所有多边形。使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com