【发布时间】:2015-07-30 16:56:14
【问题描述】:
我对如何手动填充深度缓冲区进行了大量研究但没有成功。在此之前,我只知道附加到 FBO 的深度纹理 (GL_DEPTH_COMPONENT) 在渲染过程中由 OpenGL 自动填充。
例如,以下片段着色器代码有效:
/*
** Output pixel color value.
*/
layout (location = 0) out float FragmentDepth;
/*
** Fragment shader entry point.
*/
void main(void)
{
//Depth filled automatically
}
所以如果我将以下代码行写入主代码:
FragmentDepth = 0.0f; //the texture should be black
结果是一样的!
所以我想知道如何“告诉”OpenGL 不要自动写入深度缓冲区并考虑我的深度方程?
我尝试了 glDepthMask(false) 功能,但这个解决方案当然不起作用!
实际上,我想自定义我的深度缓冲区填充,并且不依赖于 OpenGL 在后台的操作。
我该怎么做?
唯一的方法是使用颜色缓冲区(如 GL_RGB 纹理格式)手动存储深度值吗?
非常感谢您的帮助!
【问题讨论】:
-
gl_FragDepth是您要找的吗? opengl.org/sdk/docs/man/html/gl_FragDepth.xhtml -
好的。非常感谢!我被说服我的“FragmentDepth”变量具有相同的行为。但事实并非如此!再次感谢你。再见!
标签: opengl glsl shader fragment-shader depth-buffer