我正在尝试使用具有32位的深度缓冲区配置帧缓冲区对象,渲染到该缓冲区对象,然后仅将生成的颜色缓冲区复制到系统颜色缓冲区。
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
您可以附加纹理:
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24,
width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_,
textureId, level);
到FBO然后使用此纹理在屏幕上绘制全屏四边形。
渲染到纹理,然后使用全屏四边形: http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-14-render-to-texture/
通过使用此GL_DEPTH_COMPONENT24
,您将拥有硬件使用的最大深度精度。
在片段着色器中(对于全屏四边形),您可以从这样的纹理中读取并将其用作灰度图像。
这是另一个相关问题:How to visualize a depth texture in OpenGL?
另一方面,如果你想拥有32位缓冲区...也许更容易使用GL_R32F纹理并在片段着色器中计算深度值。这样你就可以更好地控制这个过程。