修改绘制调用之间的深度值

时间:2016-12-14 16:33:32

标签: 3d webgl depth-buffer

我将首先介绍我打算做什么,我的问题是如何在深度缓冲区上实现实际操作:

一般情况有一个平面P,它将两个半空间A和B分开。摄像机在A中。我有一些几何形状,所有这些都需要通过深度测试来渲染。有些仅包含在A中,有些仅包含在B中,有些可能位于边界平面P上。

目标现在我希望在区域A和B中使用不同的顶点着色器进行渲染,尽管这些顶点着色器在边界平面P上的行为相同。这一点的细节并不重要。我希望如何绘制这些内容的以下细节非常重要。

  1. 将对应于平面P的深度绘制到深度缓冲区中。
  2. 启用深度测试并使用第一个顶点着色器绘制与区域A相交的所有三角形。
  3. 对于步骤2中未更改的任何深度值,将它们设置为无穷大,保持缓冲区的其余部分不变。
  4. 再次启用深度测试,但这次使用第二个顶点着色器,绘制与区域B相交的所有三角形。
  5. 关于此工作流程的评论这将提供我想要的效果并且应该是高效的,因为当我们绘制几何图形时,我们不会丢弃片段或设置片段着色器中的深度。包含在两个区域中的三角形被绘制两次,每次调用一次,但这是不可避免的。我们“破坏规则”的唯一一次是在第3步,但这根本不涉及太多的计算。

    问题如何在步骤3中编辑深度缓冲区?我想使用OpenGL ES 2.0(WebGL)。

    我可以使用模板缓冲区来达到同样的效果吗?如果是这样,怎么样?

0 个答案:

没有答案