【发布时间】:2015-01-19 21:22:43
【问题描述】:
我目前有一个基于图块的 2D 渲染系统,它使用纹理图集来绘制带纹理的四边形(简单精灵)。四边形是 z 顺序的,这在此类系统中很常见,因此高实体将呈现在场景中较高的实体之上(例如,角色在树后行走)。对实体进行排序并计算顶点后,我使用 glDrawArrays 在一次绘制调用中绘制所有内容:
glDrawArrays(GL_TRIANGLES, 0, buffer_size);
现在我正在尝试实现一个粒子系统,该系统将使用另一个绘制调用(这次使用 GL_POINTS)来渲染粒子。我想知道如何以一种服从我的精灵的 z 顺序的方式渲染粒子,即使精灵和粒子有单独的绘制调用。例如,如果一个角色站在一棵树后面并发出血液粒子,我希望血液粒子也渲染到树后面。
我想出的唯一可能的方法是完全分解我的精灵的渲染,并分别渲染每一个,这样粒子就可以按照正确的 z 顺序与它们一起绘制。这将大大增加draw call的数量,所以我想知道是否有更好的方法我不知道。
作为附录:我知道绘图调用对于非常简单的 2D 应用程序来说不是一个大问题,但是这个特定的程序将使用相当多的着色器效果和一些 CPU 密集型计算,所以我确实需要像性能一样尽可能。
【问题讨论】: