我想问您,渲染大量四边形的最有效或至少足够的方法是什么。我想渲染很多网格中对齐的四边形(至少150x150)。四边形将没有任何纹理,只有实心背景(绿色、黑色),但颜色可以在运行时更改。谢谢你的回答。
您可以始终将其抽象为某种可编辑网格对象,该对象可以保留要绘制的点的索引列表、按索引顺序绘制的顶点列表,以及每个顶点的颜色。然后,您可以在运行时动态添加到其中,然后在每次更改网格时准备网格,这将把所有内容绑定到VBO,然后您可以简单地绘制它。其他一切都只是实现细节,但如果您对OpenGL VAO和VBO有足够的了解,则应该相当简单。但除此之外,如果你需要,我可以帮你。
更新(由于评论中没有足够的空间):
如果我没有记错的话,drawElements就是最好的选择。不要分别绘制每个对象,如果这样做,还不如使用即时模式。glDrawElements基本上是将所有信息一次批处理到您的图形卡中,并尽可能多地并行处理。如果你一次画一件东西,你就不会充分利用GPU的功能。
在你发表评论后,这是你需要根据你需要做的事情做出一些设计决定的地方。所以你想翻译单个网格,然后最终我们想建立一个巨大的缓冲区,让我们可以一次绘制所有内容。因此,第一步是确定网格将移动多少。
假设我们有两个移动的块,但其余的块是静止的,我们可以从这两个块中创建一个单独的可编辑网格,并从其余的块中创建我们的巨型网格。另一件需要检查的事情是,我们的网格多久移动一次?如果它可能每分钟左右移动一次,我想说,重新创建整个网格并再次绑定数据并不是什么大问题(假设网格不是大得离谱,在这种情况下,你可以创建子网格,只更新那些需要更新的子网格)。
关于我上一段中的要点,你将使用平移的顶点做什么?如果您仅将其用于视觉目的,则可以为每个需要转换的子网格的变换创建一个模型矩阵。但是,如果您要将其用于碰撞检测等方面,则需要存储这些信息,以便在其他地方使用。然而,您仍然可以只使用变换矩阵而不更新VBO。
希望这在某种程度上有所帮助!:)