2011-04-26 158 views
9

只有在当前像素的alpha大于0.5的情况下,我才想写入OpenGL深度缓冲区如何做到这一点?如何在GLSL中写入/防止写入OpenGL深度缓冲区

如果像素有alpha < 0.5,我想呈现颜色但不会将其深度写入深度缓冲区。命令discard不是我要找的,因为它丢弃了颜色和深度信息;我只想丢弃深度信息。

gl_FragDepth变量可以设置,但值哪些? 而对于这个案例alpha < 0.5,如何离开gl_FragDepth不变?

我是否必须为此使用FBO,还是应该在没有? 项目我的工作,是一个GLES 2.0 Android项目

+1

我不认为你可以一次性完成这项工作,至少不是直接和不高效。您当然可以将gl_FragDepth设置为一个会导致深度测试失败的值(例如zfar),但是这也会放弃该片段的颜色。通过两次使用不同的阿尔法测试,这应该工作......但在ES上,你可能无法承受像这样的另一次传球。 – Damon 2011-04-26 16:49:37

回答

15

我用

glDepthMask(false) 

解决了这个问题,我该命令禁止写入到深度缓冲,但仍执行深度 - 测试。 我只是在所有其他对象之后渲染了我的透明对象,并得到了我一直在寻找的结果。

+0

正是我在找的东西!谢谢! – Dan 2011-05-10 01:36:24