我目前有一个2D,基于图块的渲染系统,该系统使用纹理图集绘制纹理四边形(简单的精灵)。像这样的系统中常见的那样,四边形是z顺序的,因此,一个高大的实体将在场景中较高位置的实体(例如,走在树后的角色)的顶部渲染。一旦实体排序并计算了顶点,我将使用glDrawArrays在一个绘制调用中绘制所有内容:
glDrawArrays(GL_TRIANGLES, 0, buffer_size);
现在,我正在尝试实现一个粒子系统,该系统将使用另一个绘制调用(这次使用GL_POINTS)来渲染粒子。我想知道如何以一种可以遵循我的精灵Z轴顺序的方式渲染粒子,即使这些精灵和粒子具有单独的绘制调用。例如,如果角色站在树后面并散发血液颗粒,我希望这些血液颗粒也可以在树后面渲染。
我想出的唯一可能的方法是完全分解我的精灵的渲染,并分别渲染每个精灵,以便可以按照正确的z顺序将粒子与它们一起绘制。这将大大增加绘图调用的次数,所以我想知道是否有我不知道的更好的方法。
作为附录:对于非常简单的2D应用程序,我知道画图调用不是一个大问题,但是此特定程序将使用相当多的着色器效果和一些CPU密集型计算,因此我确实需要尽可能地提高性能。
您可以直接使用深度缓冲区,而不必对可绘制对象进行深度排序。仅写入深度缓冲区是不够的,您还需要启用深度测试。您可以参考此https://www.opengl.org/archives/resources/faq/technical/depthbuffer.htm
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句