如何获取渲染像素的z深度和颜色

时间:2018-12-13 08:01:51

标签: opengl glsl fragment-shader depth-buffer color-depth

我想检索场景中渲染对象的每个像素的z高度。 我也需要检索渲染的颜色。

要实施哪些opengl技术?

1 个答案:

答案 0 :(得分:2)

  1. glReadPixels和CPU辅助代码

    使用glReadPixels获取RGB和深度缓冲区。以下是这两个示例:

    这会将缓冲区读入CPU可访问的内存。这种方式很慢(由于需要同步),但可以在任何平台上使用。

  2. FBO渲染到纹理和GPU着色器

    更快速的方法是使用FBO and render to texture,并在下一个渲染过程中将该输出用作输入纹理,以计算着色器中的内容。但是,这不能在 Intel 上正常运行,并且可能需要在 nVidia AMD 之间进行其他代码调整。

    如果每个像素都有输出,请使用覆盖整个屏幕的QUAD作为第二次渲染。

    如果整个屏幕只有一个输出,请使用单个POINT渲染并在片段着色器中计算所有内容(扫描内部的整个纹理),如下所示:

    区别在于,通过usnig着色器和FBO,您无需在 GPU / CPU 之间传输数据,因此其传输速度更快。

    CPU 仍可以使用与纹理相关的 GL 功能

  3. 读取目标纹理的内容
  4. 计算GPU着色器

    那里也有计算着色器,但是我还没有使用它们,所以我只是在猜测,但是有了它们,就有可能一次完成您的工作,并获得结果的形式并且计算不应受到限制。

我敢打赌,您正在像Deferred Shading那样进行一些后期处理,因此使用谷歌搜索此类主题/教程可能会有所帮助。