渲染大量四边形的有效方法(LibGDX / OpenGL ES)

时间:2015-02-16 12:35:51

标签: android graphics opengl-es render

我想问一下,渲染大量四边形的最有效或最有效的方法是什么。我想渲染很多在网格中对齐的四边形(至少150x150)。四边形不会有任何纹理,只有纯色背景(绿色,黑色),但颜色可以在运行时更改。谢谢你的回答。

1 个答案:

答案 0 :(得分:1)

您始终可以将其抽象为某种可编辑的网格对象,该对象可以保留要绘制的点的索引列表,按索引顺序绘制的顶点列表,然后是每个顶点的颜色。然后,您可以在运行时动态添加,然后在每次更改时准备网格,这将把所有内容绑定到VBO,然后您可以简单地绘制它。其他一切都只是实现细节,但如果你对OpenGL VAO有很好的了解,那么VBO应该是相当微不足道的。但是如果你需要,我可以帮忙解决这个问题。

更新(由于评论中没有足够的空间):

如果我没记错的话,drawElements就是你要走的路。不要单独绘制每个对象,如果这样做,您也可以使用立即模式。 glDrawElements基本上将所有信息一次性地批量添加到您的图形卡中,尽可能并行完成。如果你一次绘制一件东西,你将无法充分利用GPU的强大功能。

在您发表评论之后,您需要根据自己的需要做出一些设计决策。所以你想要翻译单个网格,然后最终我们想建立一个巨大的缓冲区,它允许我们一次绘制所有内容。因此,第一步是确定将移动多少网格。

假设我们有两个移动的块,但其余块是静止的,我们可以从这两个块创建一个单独的可编辑网格,并从剩余的块创建我们的巨型网格。要检查的另一件事是,我们的网状物多久会移动一次?如果它每分钟左右移动一次,我会说重建整个网格并再次绑定数据并不是一个大问题(假设网格不是很大,在这种情况下你可以创建子网并只更新那些需要更新)。

关于我前一段中的观点,您将使用翻译的顶点进行什么?如果您仅将其用于视觉目的,则可以为需要翻译的每个子网格的变换创建模型矩阵。但是,如果您要将其用于碰撞检测等操作,则需要存储此信息,以便可以在其他地方使用。但是,您仍然可以使用变换矩阵而不是更新VBO。

希望这在某种程度上有所帮助! :)