Webgl 深入考虑模板

Webgl 深入考虑模板,webgl,depth-buffer,stencil-buffer,Webgl,Depth Buffer,Stencil Buffer,我正在使用正交投影来绘制我的对象。 每个对象项被添加到不同的缓冲区,并在几个周期内绘制。 假设每个对象都有一个轮廓正方形,并为正方形填充(颜色不同)。 所以我先画所有的填充物,然后画轮廓 我使用深度缓冲区来确保轮廓不会覆盖所有填充,如图所示 现在我面临一个问题,每个对象上都包含另一个绘图项(例如文本点),它可能比这个正方形长。所以我使用模具缓冲区在正方形上剪切这张额外的画。尽管如此,在执行此操作时,深度缓冲区中没有考虑。 这意味着一个文本项可以在另一个正方形上绘制。如下所示 有没有技巧可以让它发

我正在使用正交投影来绘制我的对象。 每个对象项被添加到不同的缓冲区,并在几个周期内绘制。 假设每个对象都有一个轮廓正方形,并为正方形填充(颜色不同)。 所以我先画所有的填充物,然后画轮廓

我使用深度缓冲区来确保轮廓不会覆盖所有填充,如图所示

现在我面临一个问题,每个对象上都包含另一个绘图项(例如文本点),它可能比这个正方形长。所以我使用模具缓冲区在正方形上剪切这张额外的画。尽管如此,在执行此操作时,深度缓冲区中没有考虑。 这意味着一个文本项可以在另一个正方形上绘制。如下所示


有没有技巧可以让它发生?

您应该能够为每个正方形将模具缓冲区设置为不同的值(前提是我有超过255个对象,从技术上讲它们不是正方形-它们是纹理图集中的一些纹理-如字体:),我想简化这个问题。有什么比检查像素着色器中的每个像素是否超出边界更快的方法吗?我不这么认为-模具和剪刀测试都需要昂贵的状态更改。但是像素着色器检查会相对便宜。你说在着色器中计算和“丢弃”像素比使用模具缓冲区更快吗?这不是缓冲区的用途吗?如果您必须更改绘图单个对象之间的模具状态,否则这些对象将被批处理在一起,这将非常昂贵。但是,如果您能够有效地剪裁像素着色器,则可能只需要很少的状态更改。至少这是我的直觉,你必须分析它。我已经通过将深度测试改为相等来解决它。现在,文本仅在背景位于相同Z值的位置绘制。