我正在寻找一个立方体和一条线的交点的解决方案。所以我用了
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);顺便说一句,挑选颜色很好。
谢谢!
发布于 2012-08-20 20:37:54
您忘记准备目标帧缓冲区来读取...试着这样做:
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读取颜色信息...
https://stackoverflow.com/questions/12016785
复制相似问题