深入考虑模板

时间:2014-07-13 10:45:56

标签: webgl depth-buffer stencil-buffer

我使用正交投影绘制我的物体。 每个对象项目都被添加到不同的缓冲区并在几个周期中绘制。 让我们说每个对象都有一个轮廓正方形并填充正方形(用不同的颜色)。 因此,我首先绘制所有填充物,然后绘制轮廓线。

我使用深度缓冲来确保轮廓不会超过所有填充,如图enter image description here所示

现在我遇到一个问题,即每个对象上都包含另一个绘图项(例如文本 - 点),这个项目可能比这个方块更长。所以我使用模板缓冲区在广场上切割这个额外的图纸。虽然,在执行此操作时,深度缓冲区中没有考虑。 这意味着可以在另一个方块上绘制一个文本项。如下所示。enter image description here

无论如何都有诀窍才能实现它?

1 个答案:

答案 0 :(得分:0)

您应该能够为每个方块将模板缓冲区设置为不同的值(前提是<= 255个方格,因为您将无法获得超过8位的模板缓冲区)。对于未通过深度测试的像素,将模板值配置为KEEP,从而导致由前面进一步但之前绘制的四边形写入的模板值保留。

这将允许单独剪切每个文本。

另一种方法是仅使用深度缓冲区并将当前四边形的像素范围传递到文本像素着色器,您可以在其中丢弃任何额外的像素。这需要更少的状态变化。