【问题标题】:How to access the depth texture from other frame buffers?如何从其他帧缓冲区访问深度纹理?
【发布时间】:2013-06-14 08:27:08
【问题描述】:

我在我的游戏中使用了延迟渲染器。因此,第一个渲染通道是使用多个渲染参数创建反照率和正常缓冲区并填充深度缓冲区。所有这些缓冲区实际上都是纹理。

现在我想从其他渲染通道访问深度缓冲区,从而访问其他帧缓冲区,而不改变深度纹理。我只想读取深度值。对于这些通道,我主要绘制全屏四边形,我不希望它们更新深度纹理并将其消隐为 0 的深度值。

如何将给定的深度纹理附加到另一个帧缓冲区并确保它是只写的?

【问题讨论】:

  • 将深度纹理附加到第二个 FBO。注意:我在 Linux 上遇到了一些 ATI 驱动程序的问题。后备是做一个 blit,但希望这不是必需的。
  • 我假设你的意思是只读

标签: opengl framebuffer render-to-texture depth-buffer deferred-rendering


【解决方案1】:

您可以将相同的深度缓冲区附加到其他帧缓冲区(如果您想在绘制光体积时使用深度测试,则只需要这样做)。禁用这些通道的深度写入 (glDepthMask(GL_FALSE))。您还可以将深度缓冲区(假设它是纹理而不是渲染缓冲区)绑定到纹理单元并在着色器中从中读取深度值。您唯一不能做的就是同时从同一个纹理读取和写入,但无论如何您都不想这样做。

【讨论】:

  • 所以我可以将GL_DEPTH_COMPONENT24 类型的纹理绑定到纹理单元?如果是这样,那将是解决方案。
猜你喜欢
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
  • 1970-01-01
  • 2018-01-01
相关资源
最近更新 更多