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);

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

谢谢!

4

1 回答 1

0

您忘记准备要读取的目标帧缓冲区...尝试这样:

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 中读取颜色信息...

于 2012-08-20T12:37:53.660 回答