我正在寻找立方体和线的交叉点的解决方案。所以我用了
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);
顺便说一句,采摘颜色很好。
谢谢!
答案 0 :(得分: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中读取颜色信息...