我正在爲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將其複製到虛擬顏色紋理中。然後你可以閱讀! –