【问题标题】:glReadPixels(Depth_Component) not working in Android OpenGL ES20glReadPixels(Depth_Component) 在 Android OpenGL ES20 中不起作用
【发布时间】:2011-06-10 07:32:02
【问题描述】:

我使用以下代码检索深度缓冲区:

FloatBuffer pixels = ByteBuffer
    .allocateDirect(4).order(ByteOrder.nativeOrder()).asFloatBuffer();

GLES20.glReadPixels(pointx, pointy, 1, 1, 
    GLES20.GL_DEPTH_COMPONENT16, GLES20.GL_FLOAT, pixels);

问题是,无论我要求哪一点,像素都给我 0.0;

我在onSurfaceCreated中启用了以下功能:

GLES20.glEnable(GLES20.GL_DEPTH_TEST);
GLES20.glEnable(GLES20.GL_BLEND);
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
GLES20.glDepthFunc(GLES20.GL_LEQUAL);
GLES20.glDepthMask(true);
GLES20.glClearColor(1, 1, 1, 1);

我已经为这个问题苦苦挣扎了好几天!请帮忙。

【问题讨论】:

    标签: android opengl-es opengl-es-2.0 depth-buffer


    【解决方案1】:

    根据OpenGL ES 2.0 文档,glReadPixels() 不支持读取深度缓冲区。 glGetError() 返回什么?

    【讨论】:

    • 谢谢@Martin。我从来没有注意到这个变化。好吧,不,geterror 返回 0;顺便说一句,我怎样才能从 gles2 读取深度缓冲区?
    • 一种解决方案是做一个单独的渲染通道,在这里你使用一个着色器,用深度值填充颜色缓冲区。这是我过去在 DirectX 9 上必须做的事情。
    • 另外,也许这会有所帮助:stackoverflow.com/questions/4041682/…
    • @Martin Stone - 我确实查看了您引用的链接。我正在尝试在 3D 中选择点,但显然不能使用深度缓冲区。您能解释一下如何将深度缓冲区发送到颜色缓冲区以供使用吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多