我试图弄清楚如何在我的基于OpenGL / DirectX的应用程序中实现批处理。我知道当启用深度测试/深度写入时,我可以在同一坐标空间中放置一组使用公共材质渲染的对象,并使用单个绘制调用进行绘制。但在我的特定应用程序中,我有几个对象测试深度缓冲区,但不写入深度缓冲区,并依赖绘制顺序获得正确的外观。这些通常是3D世界中的2D几何体(例如,具有动态信息的面板)。
我是否可以使用通用解决方案来批量通常需要特定订单的项目?或者我是否需要调整我的场景并在所有内容上启用深度书写以利用批处理?
答案 0 :(得分:3)
GPU将以几何顺序呈现,即使在单个绘图调用中也是如此。换句话说,第一个三角形将在第二个三角形之前绘制,依此类推 - 即使着色计算可能并行发生。
所以你不需要在这里做任何特别的事情。只要您的实例在批处理中按照绘制顺序排列,结果将与您使用多个绘制调用时的结果相同。
答案 1 :(得分:0)
您可以在N(2D对象的数量)中对标准化的Z空间进行分区,然后使用与绘制顺序对应的不同标准化Z值跟踪每个对象,并让深度测试为您进行“排序”。