我刚刚开始使用OpenGL,并且尝试使用它来创建2D游戏。在这个游戏中,我有一个六角形网格,由许多不同颜色的六角形组成。作为新手OpenGL程序员,我看到了绘制此网格的两种方法:
- 将顶点缓冲区与单个六边形的数据一起使用,然后使用统一的偏移值并在CPU上迭代多次以绘制同一程序,直到获得网格为止。
- 创建一个单一的非常大的预先计算的顶点缓冲区,该缓冲区在一次调用中绘制所有六边形。
什么是最有效的方法?有更好的方法吗?
您预先计算出的顶点缓冲区只需要延伸一个屏幕六边形即可,然后可以通过平滑滚动直到变成完整的六边形然后“扭曲”回去来伪造它,对于这种情况下的颜色,您可以保留一个GPU上的2D纹理,在顶点着色器中读取,然后将其平面插值到片段着色器中。
—
MickLH 2013年
通过通常是指一种渲染操作依赖于先前操作的结果的情况。您在此问题中要问的实际上与减少一次通过中的绘制调用次数有关。我知道这听起来有些古怪,但是了解差异非常重要,否则多遍算法就没有多大意义;)
—
Andon M. Coleman 2013年
@ AndonM.Coleman Hmm,谢谢,我显然不熟悉图形术语。那么,在这种情况下,我将如何形容呢?多个着色器/程序调用?
—
亚历克西斯·金
您可以立即看出这是单遍算法,因为没有顺序依赖性。您可以按任何顺序绘制这些六边形,但仍可获得相同的结果。您可能需要进行多次绘制调用才能为OpenGL提供渲染它们所需的数据,但是OpenGL实际上可以自由地并行绘制它们,因为没有依赖关系。如果是多次通过,则六边形B可能需要六边形A的结果才能被绘制,或者您可能需要多次绘制相同的六边形并合并结果。
—
安东·科尔曼