我想产生一种效果,即某些对象只有在特定空间内才会被渲染。想象一下“神奇的解码器卷”,当它们进入内部时会发现它们。
让我们假设秘密物体和暴露体积都是球体。我首先渲染非秘密对象。然后,我将显示体积的背面渲染到深度和模板缓冲区中。如果我只渲染通过深度和模板测试的秘密对象,它们也将被绘制在显露的体积前面。我希望能够创建第二个深度缓冲区,它可以保持显示音量的正面。有没有标准的方法来做到这一点?
我想我可能会设置近剪裁平面穿过显露球体的中心。然后我可以将近剪裁平面拉回到眼睛附近,渲染显露体积的前面并将远剪裁平面设置到其中心,并且仅渲染大于深度测试的秘密对象顶点并通过模板测试。
这种两次通过的方法感觉有点难看,如果卷中的非秘密对象应该在秘密对象的前面,由于反向深度测试,它可能会被压扁。我对着色器没有太多经验,但我猜这是要走的路?
答案 0 :(得分:1)
文森特关于着色器的删除答案并不是一个坏主意 - 每个片段都会显示距离显示球体中心的距离;如果距离太远,那么discard
。
否则,阴影卷起作用,因为它们从不显示任何其他几何体。虽然按我打字的方式思考,但我猜你能做的是:
GL_LESS
深度测试渲染场景,以建立深度值; GL_GREATER
,因此只有当事物位于其前面时才会绘制这些面部分; GL_EQUAL
; 净效应应该是在前四个步骤之后,深度缓冲区的值仅等于与剪切几何体相交的真值。因此,当您切换到GL_EQUAL
时,颜色将仅通过该几何体。
具体来说,第3步会消除剪裁几何体后面的任何内容,第4步会消除前面的任何内容。隐含的假设是剪裁几何完全适合视锥体。