在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扩展名NV_read_depth,允许通过glReadPixels
从深度缓冲区读取。该扩展是针对OpenGL ES 2.0规范编写的,但在OpenGL ES 3.2中仍然不是标准。