首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glreadpixel gl_depth_component返回0?

glreadpixel gl_depth_component返回0?
EN

Stack Overflow用户
提问于 2012-08-18 15:30:07
回答 1查看 1.6K关注 0票数 0

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

代码语言:javascript
复制
GLES20.glReadPixels(touchX, touchY, 1, 1, GLES20.GL_DEPTH_COMPONENT, GLES20.GL_FLOAT, zz);

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

代码语言:javascript
复制
        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);

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

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2012-08-20 20:37:54

您忘记准备目标帧缓冲区来读取...试着这样做:

代码语言:javascript
复制
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glReadPixels(0, 0, deviceWidth, deviceHeight, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

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

代码语言:javascript
复制
gl_FragColor = vec4(vec3(gl_FragCoord.z), 1.0);

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12016785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档