【问题标题】:Rendering a mesh only if behind another mesh仅在另一个网格后面渲染网格
【发布时间】: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


【解决方案1】:

我使用纹理来存储深度,并用它来丢弃比这个深度更近的片段。 它工作正常。我对此很满意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2016-04-30
    • 1970-01-01
    相关资源
    最近更新 更多