我正在为OpenGL ES 2.0,iOS开发一个简单的3D应用程序。在Open GL ES 2.0中从深度缓冲区获取黑色
我想要做的是我想在片段着色器的深度缓冲区中获取场景的深度值。
所以,我创建深度缓冲器作为2D纹理
GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, size.x, size.y, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL);
self.Dimension = IVVec3I_Make(size.x, size.y, 0);
self.BufferObjID = texture;
,并将其附连到帧缓冲器为深度附件。
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, pRD.BufferObjID,0);
当我使我的场景,深度缓存工作正常(深度测试和深度写入所有工作完美)。
但是,当我将深度缓冲区分配给着色器中的采样器并使用全屏四面体将深度缓冲区渲染到屏幕时,它全是黑色的。而且,着色器本身没有任何问题,因为当我将另一个正常纹理指定给采样器时,它会正确渲染纹理。
这是片段着色器。
uniform sampler2D DepthBuffer;
void main()
{
highp vec2 tex_coord = vec2(gl_FragCoord.x/1024.0,gl_FragCoord.y/768.0);
tex_coord.y = 1.0-tex_coord.y;
gl_FragColor = texture2D(DepthBuffer, tex_coord);
}
当我通过捕获的OpenGL ES帧检查的深度缓冲器,调试器显示所有白色深度缓冲器(因为几乎所有的深度值是相当接近1.0这是正确的)。
那么,这里有什么问题?
感谢您的建议。但是,他们没有帮助:(而且,据我所知,glReadPixels不适用于ES 2中的深度附件。0 –
glReadPixels上的好点。 我仍然对检查纹理数据感到好奇。您可以绑定呈现到深度纹理的FB,然后使用glCopyTexImage2D将其复制到虚拟颜色纹理中。然后你可以阅读! –