使用OpenGLES3读取深度缓冲区

问题描述 投票:1回答:1

OpenGL中,我可以使用glReadPixels读取z缓冲区的值,如下所示:

glReadPixels(scrx, scry, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth);

如果在OpenGL ES 3.2]中执行相同的操作,则会出现GL_INVALID_OPERATION错误。

检查规格,我看到了OpenGLallowsGL_DEPTH_COMPONENT,但是是OpenGLES3 does not

作为一种解决方法,我使用此GLSL将片段深度复制到颜色缓冲区中的alpha值:

#version 320 es
...
outCol = vec4(psCol.rgb, gl_FragCoord.z);

[在对帧缓冲区的GL_RGBA部分进行glReadPixels()之后,我将rgba[3]/255.0用作深度值。

尽管这样做有效,但对于我选择鼠标光标下方的内容而言,alpha值的8位精度不足。

是否有办法从OpenGL ES3的帧缓冲区中获取Z值?

在OpenGL中,我可以使用glReadPixels读取z缓冲区的值,如下所示:glReadPixels(scrx,scry,1,1,GL_DEPTH_COMPONENT,GL_FLOAT,&depth);如果我在OpenGL ES 3.2中执行相同的操作,则会得到...

opengl-es depth-buffer opengl-es-3.0 glreadpixels
1个回答
0
投票

有一个OpenGL ES扩展名NV_read_depth,允许通过glReadPixels从深度缓冲区读取。该扩展是针对OpenGL ES 2.0规范编写的,但在OpenGL ES 3.2中仍然不是标准。

© www.soinside.com 2019 - 2024. All rights reserved.