2014-01-14 99 views
0

正如我所了解的深度缓冲区,它计算了片段与远/近裁剪平面的关系,并在写入之前从中推导出深度值。但是,这不是我想要的,因为我不使用剪切平面或者第三维。不过,深度测试对我来说仍然非常有帮助。OpenGL:指定写入深度缓冲区的值是什么?

我的问题,有没有什么办法来指定哪些价值被手动写入深度缓冲区,用于渲染无论你把它(即通过了alpha测试)后它的真实深度场景中的所有几何? Stencil缓冲区以这种方式工作,其值指定为glStencilFunc()的第二个参数,所以我认为glDepthFunc()可能有相似的表现,但我错了。

我需要在2D游戏中进行深度测试的主要原因是因为我的照明模型使用了很多模具。必须首先渲染比光线更靠近摄像头的物体,才能正确布置阴影模板,然后再绘制光线。这是一个相当棘手的绘制顺序,但基本上,这意味着在场景完成绘制之后必须绘制灯光,完全是。

我使用的OpenGL版本是2.0,但我试图避免使用片段着色器,如果可能的话。

+0

你能否详细说明你为什么想用这个,为什么这可能是您使用帮助您和openGL的版本? – concept3d

+0

你可以使用gl_FragDepth。 – Xonar

+0

concept3d - 我更新了!对不起,请将这些信息发送出去 –

回答

2

看来你是在谈论一种叫做Parallax scrolling的技术。您不需要手动写入深度缓冲区,只需启用它,然后就可以使用图层方法并为每个对象手动指定Z.然后渲染场景前面(排序)。

enter image description here