Opengl 仅渲染大于一个深度缓冲但小于另一个深度缓冲的顶点
我希望产生这样一种效果,即某些对象仅在落在某个空间内时才进行渲染。想象一下一个“魔法解码卷”,当秘密物体在里面时,它会显示出来 让我们假设秘密物体和暴露体积都是球体。我首先渲染非机密对象。然后,我将显示卷的背面渲染到深度和模具缓冲区中。如果我只渲染通过深度和模板测试的秘密对象,它们也将在显示卷的前面绘制。我希望能够创建第二个深度缓冲区,容纳显示卷的前端。有没有标准的方法可以做到这一点 我想我可能可以设置近剪裁平面,使其穿过显示球体的中心。然后,我可以将近剪裁平面拉回更靠近眼睛的位置,渲染显示体积的正面,并将远剪裁平面设置为其中心,仅渲染大于深度测试的秘密对象顶点,并通过模具测试Opengl 仅渲染大于一个深度缓冲但小于另一个深度缓冲的顶点,opengl,Opengl,我希望产生这样一种效果,即某些对象仅在落在某个空间内时才进行渲染。想象一下一个“魔法解码卷”,当秘密物体在里面时,它会显示出来 让我们假设秘密物体和暴露体积都是球体。我首先渲染非机密对象。然后,我将显示卷的背面渲染到深度和模具缓冲区中。如果我只渲染通过深度和模板测试的秘密对象,它们也将在显示卷的前面绘制。我希望能够创建第二个深度缓冲区,容纳显示卷的前端。有没有标准的方法可以做到这一点 我想我可能可以设置近剪裁平面,使其穿过显示球体的中心。然后,我可以将近剪裁平面拉回更靠近眼睛的位置,渲染显示体积
这种两次通过的方法感觉有点难看,如果卷中有一个非机密对象应该在机密对象前面,它可能会因为反向深度测试而被压扁。我对着色器没有太多的经验,但我猜这是一个不错的选择?文森特删除的关于着色器的答案并不是一个坏主意-每个片段计算出你的暴露球体中心的距离;如果距离太远,则
放弃
否则,阴影体积会起作用,因为它们不会显示任何其他几何体。虽然我打字时会思考,但我想你能做的是:
- 禁用对颜色缓冲区的写入,以便只影响深度李>
- 使用标准
GL_LESS
深度测试渲染场景,以建立深度值李>
- 使用相同的深度测试渲染剪裁球体的背面部分李>
- 使用启用的
GL_grear
渲染剪裁球体的前向部分,因此仅当前面有物体时才会绘制这些面的部分李>
- 启用颜色缓冲区,切换到深度功能
GL_EQUAL
李>
- 再次渲染场景几何体
最终的效果应该是,在前四步之后,深度缓冲区的值仅在与剪裁几何体相交的位置等于真值。因此,当您切换到GL_EQUAL
时,颜色将仅适用于该几何体
具体地说,第3步清除剪裁几何体后面的任何内容,第4步清除前面的任何内容。隐式假设是剪裁几何体完全符合视锥体。听起来像是您正在考虑的操作类似于渲染。我认为双关法是最好的,也是最通用的。它看起来很笨重,因为光栅化管道中的大多数渲染技巧都是黑客的。