如何检索渲染像素的z深度和颜色



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

实现opengl的技术有哪些?

  1. glReadPixels和CPU端代码

    使用glReadPixels来获得RGB和深度缓冲区。以下是两者的示例:

    glReadPixels得到的
    • 深度缓冲区始终为1
    • OpenGL比例单像素线

    这将把缓冲区读取到CPU可访问的内存中。这种方式很慢(由于同步(,但应该适用于任何平台。

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

    更快的方法是使用FBO和渲染到纹理,并在下一个渲染过程中使用该输出作为输入纹理,用于计算着色器内部的材质。然而,这将无法在英特尔上正常运行,并且可能需要在nVidiaAMD之间对代码进行额外调整。

    如果你有每像素的输出,使用单个QUAD覆盖你的屏幕作为第二次渲染过程

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

    • 如何在GLSL中实现2D光线投射灯光效果

    不同之处在于,通过usnig着色器和FBO,您不会在GPU/CPU之间传输数据,因此速度更快。

    目标纹理的内容仍然可以由CPU使用纹理相关的GL功能读取

  3. 计算GPU着色器

    还有计算着色器,但我还没有使用它们,所以我只是猜测有了它们,可能可以在一次过程中完成您的工作,而且结果和计算的形式也不应该受到限制。

我敢打赌,你正在做一些类似于"延迟着色"的后期处理,所以在谷歌上搜索这样的主题/教程可能会有所帮助。

最新更新