【发布时间】:2013-11-27 09:20:00
【问题描述】:
我试图弄清楚如何在基于 OpenGL/DirectX 的应用程序中实现批处理。我知道,当启用深度测试/深度写入时,我可以将一堆使用通用材质渲染的对象放在同一坐标空间中,并使用单个绘图调用进行绘制。但在我的特定应用程序中,我有几个对象针对深度缓冲区进行测试,但不写入深度缓冲区,并依靠绘制顺序获得正确的外观。这些通常是 3D 世界中的 2D 几何体(例如具有动态信息的面板)。
我可以使用一个通用的解决方案来批量处理通常需要特定绘制顺序的物品吗?还是我需要调整我的场景并在所有内容上启用深度写入以利用批处理?
【问题讨论】:
-
例如具有动态信息的面板。你的意思是说场景中已经存在的物体如果深度足够的话可以遮挡这些物体(例如更近并且深度函数是
LESS)?我想知道为什么您不希望他们写入深度缓冲区?如果您允许它们写入深度缓冲区并首先绘制它们,您可以在您的 GUI 完全遮挡具有潜在昂贵像素/片段着色器要评估的世界几何图形的区域提高性能。 -
基本上有几个 2d 对象被写入同一个位置来组成一个面板。其中一个对象将进行深度写入,其余对象将仅进行深度测试,因为写入会导致 z-fighting 以及随后绘制到该位置。
标签: performance opengl graphics directx