0

我正在尝试使用具有 32 位的深度缓冲区配置帧缓冲区对象,渲染到该对象,然后仅将生成的颜色缓冲区复制到系统颜色缓冲区。

有人可以帮我如何编码吗?

4

1 回答 1

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,您将获得硬件使用的最大深度精度。在片段着色器(对于全屏四边形)中,您可以从此类纹理中读取并将其用作灰度图像。

这是另一个相关的问题:如何在 OpenGL 中可视化深度纹理?

另一方面,如果你想拥有 32 位缓冲区......也许使用 GL_R32F 纹理并在片段着色器中计算深度值更容易。这样您就可以更好地控制该过程。

于 2013-07-15T18:17:54.087 回答