android - android 中 glReadPixels 的问题

标签 android picking glreadpixels

我正在尝试实现我读到的 opengl 拾取系统,但遇到了 glReadPixels 问题。基本上,场景中的每个节点都有一个独特的颜色,当一个新的触摸发生时,它只渲染场景,只有用它们独特的颜色 id 绘制的节点。我正在尝试使用存储的颜色 ID 列表检查输入坐标。

我无法让 glReadPixels 正常工作。对于像素值,它始终返回 0 0 0。如果能从中获取正确的像素值,我将不胜感激。谢谢

这是相关代码

private void handleEvent(MotionEvent event) {
    int x = (int) event.getX();
    int y = (int) event.getY();
    int action = event.getAction();
    int actionCode = action & MotionEvent.ACTION_MASK;
    if (actionCode == 0) {
        // Paint with colorID color
        mSettings.picking(true);
        dumpEvent(event);
        final GL10 gl = mSettings.getGL();

        ByteBuffer PixelBuffer = ByteBuffer.allocateDirect(4);
        PixelBuffer.order(ByteOrder.nativeOrder());
        gl. glPixelStorei(gl.GL_UNPACK_ALIGNMENT, 1);
        gl.glReadPixels(x, y, 1, 1, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, PixelBuffer);
        byte b[] = new byte[4];
        PixelBuffer.get(b);
        String key = "" + b[0] + b[1] + b[2];       
        // Check for selection
        mRenderer.processSelection(event, new SGColorI(pixel[0], pixel[1], pixel[2], pixel[3]));

        log.pl("GL on touchdown", key);
    } else if (actionCode == 2) {
        mSettings.picking(false);
    }
}

最佳答案

allocateDirect 在这种情况下“只是行不通”。使用分配

这对我来说似乎很奇怪,但 allocate 与 allocateDirect 是我发现的唯一区别。

还有 this post in google groups对我帮助很大。

顺便说一句,这个发现是在模拟器(几个不同的版本)上进行的,而不是真实的设备。

关于android - android 中 glReadPixels 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5760516/

相关文章:

android - OpenGL ES 1.0。世界坐标到屏幕坐标

java - LWJGL 使用 PBO 读取像素失败

c# - 将 OpenGL 场景绘制到 C# 位图;屏幕外被剪辑

android EditText 融入背景

android - 将 html5 canvas 转换为 android

android - Skobbler/Scout是否支持带航点的路线、多条不同颜色的路线和 map 图例

three.js - 从 Three.js RenderToTarget 读取数据会产生意想不到的结果

android - Build.gradle 文件损坏

c++ - 如何在 2D opengl 中进行拾取?

python - 使用 Pyglet 进行 OpenGL 拾取