【发布时间】:2019-11-12 23:27:24
【问题描述】:
我正在尝试仅在另一个网格(“窗口网格”)后面渲染网格(“内容网格”)(使用深度测试)。
第一个解决方案是使用模板缓冲区仅写入“窗口网格”已写入的位置。
我的问题是“内容网格”可以在“窗口网格”前面,我想在这种情况下丢弃片段(只有在后面才可见)。
我可以简单地将“窗口网格”的深度坐标保存在纹理中,并使用该信息丢弃“内容网格”的片段。
但是,这意味着要进行纹理查找并使用 16 位浮点数进行自定义深度测试。
还有其他方法吗?
PS : How to render a mesh behind another mesh, like a mask? 这个帖子几乎为我找到了解决方案,但在我的情况下,当它位于“窗口网格”前面时,我根本不想渲染“内容网格”。
【问题讨论】:
-
当你的内容网格被深度排序时,你在渲染它时甚至需要一个深度缓冲区吗?您可以将 depthtesting 设置为 GL_GREATER 进行渲染,然后只会渲染窗口后面的部分。
-
感谢您的评论。我实际上的意思是我需要在渲染内容网格时使用标准的 GL_LESS 深度测试。
-
我还是会选择 STENCIL ...到底有什么问题?从你的描述中看不清楚,你能给我们看一张截图,描述有什么问题吗?
-
我没有找到涉及模板缓冲区的解决方案。但我同意这会更容易/更快......在我提到的例子中,在墙后面绘制角色时没有深度测试(它是纯色)。我想绘制一个网格(启用深度测试),但前提是它位于墙后面。其实这个很接近这个问题:stackoverflow.com/questions/33336092/…希望很清楚(呃)
-
@Spektre 我已经用纹理实现了伪解决方案,它工作正常,我还有另一个 z 战斗问题,但仅在来自内容网格的三角形之间,它是另一回事。所以,我可以关闭这个帖子,但我觉得这个问题很有趣。
标签: c++ opengl glsl shader stencil-buffer