我想检索场景中渲染对象的每个像素的z高度。我也需要检索渲染的颜色。
实现opengl的技术有哪些?
-
glReadPixels
和CPU端代码使用
glReadPixels得到的glReadPixels
来获得RGB和深度缓冲区。以下是两者的示例:- 深度缓冲区始终为1
- OpenGL比例单像素线
这将把缓冲区读取到CPU可访问的内存中。这种方式很慢(由于同步(,但应该适用于任何平台。
-
FBO渲染到纹理和GPU着色器
更快的方法是使用FBO和渲染到纹理,并在下一个渲染过程中使用该输出作为输入纹理,用于计算着色器内部的材质。然而,这将无法在英特尔上正常运行,并且可能需要在nVidia和AMD之间对代码进行额外调整。
如果你有每像素的输出,使用单个
QUAD
覆盖你的屏幕作为第二次渲染过程如果整个屏幕只有一个输出,请使用单个
POINT
渲染并在片段着色器中计算所有内容(扫描内部的整个纹理(,如下所示:- 如何在GLSL中实现2D光线投射灯光效果
不同之处在于,通过usnig着色器和FBO,您不会在GPU/CPU之间传输数据,因此速度更快。
目标纹理的内容仍然可以由CPU使用纹理相关的GL功能读取
-
计算GPU着色器
还有计算着色器,但我还没有使用它们,所以我只是猜测有了它们,可能可以在一次过程中完成您的工作,而且结果和计算的形式也不应该受到限制。
我敢打赌,你正在做一些类似于"延迟着色"的后期处理,所以在谷歌上搜索这样的主题/教程可能会有所帮助。