我正在开发一个只有2D精灵的3D世界游戏(比如Do not Starve游戏)。 (OpenGL ES2 with C ++)
目前,我在没有批量绘制元素之前将元素重新排序到前面(因此1个元素= 1个drawcall)。我想在我的框架中实现批处理以减少绘制调用。
这就是我现在所拥有的:
如果给定元素的材料存在批次,则渲染器会查看其批处理管理器。
使用每个批次的所有精灵计算大网格(1种材料类型= 1批次)。
当所有批次都没问题时,批处理管理器会为渲染器计算绘图命令。
渲染器处理绘制命令(绑定着色器,绑定纹理,绑定缓冲区,绘制元素)
图片显示我的问题:Image
但是我遇到了一些问题,因为对象可能在另一批中的另一个对象后面。
我该怎样做?
答案 0 :(得分:1)
听起来你正试图优化两个互斥目标的渲染。
其中一个必须优先于另一个。由于Z排序对于透明度的正确显现至关重要,因此您可能必须优先考虑。完成后,您仍然可以在Z顺序中批量处理相同材料的项目。