【问题标题】:OpenGL: Specify what value gets wrote to the depth buffer?OpenGL:指定将什么值写入深度缓冲区?
【发布时间】:2014-01-14 12:20:48
【问题描述】:

据我了解深度缓冲区,它计算片段与远/近剪裁平面的关系,并在写入之前从中推断出深度值。但是,这不是我想要的,因为我根本不使用剪裁平面或第 3 维。但是,深度测试仍然对我有很大帮助。

我的问题,有没有办法为设置后渲染的所有几何图形(通过 Alpha 测试)手动指定将什么值写入深度缓冲区,而不管它的真实深度如何一个场景? Stencil 缓冲区以这种方式工作,其值指定为 glStencilFunc() 的第二个参数,所以我认为 glDepthFunc() 的行为可能类似,但我错了。

我需要在 2D 游戏中进行深度测试的主要原因是我的光照模型大量使用模板。必须首先渲染比灯光更靠近相机的对象,以便正确布置阴影模板,然后再绘制灯光。这是一个非常棘手的绘制顺序,但基本上它只是意味着必须在场景绘制完成后绘制灯光,仅此而已。

我使用的 OpenGL 版本是 2.0,但我尽量避免使用片段着色器。

【问题讨论】:

  • 您能详细说明为什么要使用它,为什么它可以帮助您,您使用的是哪个 openGL 版本?
  • 你可以使用 gl_FragDepth。
  • concept3d - 我更新了!很抱歉留下了这些信息

标签: c++ opengl depth depth-buffer


【解决方案1】:

您似乎在谈论一种称为Parallax scrolling 的技术。您不需要手动写入深度缓冲区,只需启用它,然后您可以使用层方法并为每个对象手动指定 Z。然后从前到后渲染场景(排序)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    相关资源
    最近更新 更多