我正在寻找一个立方体和直线交点的解决方案。所以我用了
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读取颜色信息。。。