2011-10-13 43 views
2

我在openGL中遇到了FBO和深度问题。我将投影,视图和模型矩阵传递给写入g缓冲区的着色器。当我解开FBO并写入gl_FragColor时,场景显示应该如此。但是,当我写入gl_FragData [0],然后将相应的纹理写入屏幕对齐的四边形中,则会根据处理的反向顺序绘制对象,而不是深度...我可以看到首先处理的对象与之后处理的对象。有没有人有同样的问题,他们知道一个修复?或者有人可以提供从顶点着色器读取深度值的语法,查询当前深度,然​​后根据比较结果写入深度缓冲区,即在片段着色器中手动处理操作。如何在glsl中处理深度

+2

你的理论听起来都是正确的,很可能这只是你代码中的一个bug。没有这些代码,我们无法真正说出来。 –

回答

4

您的主要帧缓冲区最有可能有深度,而您手动创建的FBO可能没有它。因此,在绘制屏幕时,您可以使用深度排序的几何图形,而FBO无法提供该功能,并且内部可以在禁用的深度测试中使用,而不会与其关联存储。

+0

你是对的kvark。我没有意识到将深度缓冲区附加到fbo是对fbo绑定纹理进行深度剔除的要求。还发现gl_FraDepth [i]已被弃用,有利于定义您自己的输出变量。 – ste3e

+0

'gl_FragData'已弃用,而不是'gl_FraDepth []'。在stackoverflow界面中还有一个按钮,用于标记正确的答案:) – kvark