glreadpixel gl_depth_component returns 0?



我正在寻找一个立方体和直线交点的解决方案。所以我用了

GLES20.glReadPixels(touchX, touchY, 1, 1, GLES20.GL_DEPTH_COMPONENT, GLES20.GL_FLOAT, zz);

我展示了zz,但结果是0。那么当我触摸立方体(实际上是在2d屏幕上)时,我怎么能得到立方体的深度缓冲值呢。我使用GLES20和Android API level15。我的代码如下。

        ByteBuffer PixelBuffer = ByteBuffer.allocateDirect(4);
    ByteBuffer zBuffer = ByteBuffer.allocateDirect(4);
    PixelBuffer.order(ByteOrder.nativeOrder());
    PixelBuffer.position(0);
    zBuffer.order(ByteOrder.nativeOrder());
    zBuffer.position(0);
    FloatBuffer zz;
    zz = zBuffer.asFloatBuffer();
    GLES20.glReadPixels(touchX, touchY, 1, 1, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, PixelBuffer);
    GLES20.glReadPixels(touchX, touchY, 1, 1, GLES20.GL_DEPTH_COMPONENT, GLES20.GL_FLOAT, zz);

顺便说一下,挑选颜色效果很好。

谢谢!

您忘记准备要读取的目标帧缓冲区。。。尝试如下:

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glReadPixels(0, 0, deviceWidth, deviceHeight, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

或者只需编写简单的着色器并将zbuffer数据渲染到FBO中,就像一样

gl_FragColor = vec4(vec3(gl_FragCoord.z), 1.0);

然后从这个FBO读取颜色信息。。。

最新更新