2

我正在使用 Unity for Project Tango 开发 AR 应用程序。

我想要完成的一件事是在使用他们随 SDK 提供的 AR 示例时从设备获取帧图像 - https://github.com/googlesamples/tango-examples-unity

问题是他们正在使用不返回帧缓冲区的 IExperimentalTangoVideoOverlay(图像在着色器中从 YUV 转换为 RGB)。

我已经注册了 OnExperimentalTangoImageAvailable 事件并调用了一个 android 本机插件来使用 glReadPixles 来获取帧图像,但它也不起作用(可能是因为它是一个没有上下文的库?)

我对其他解决方案持开放态度......但这是从我正在使用的 android 插件读取图像帧的代码 -

公共无效解码(){

    try {

        bb = ByteBuffer.allocateDirect(screenshotSize);

        bb.order(ByteOrder.nativeOrder());

        GLES30.glReadBuffer(GLES30.GL_BACK);
        GLES30.glReadPixels(0, 0, 1920, 1200, GLES30.GL_LUMINANCE, GLES30.GL_UNSIGNED_BYTE, bb);

        byte[] myTest = bb.array();

        // for test
        for (int i=0; i<screenshotSize; ++i)
        {
            // Check to see if at least one of the bytes is not zero
            if (myTest[i] != 0)
            {
                Log.d("MYAPP", "I AM NOT ZERO!!");
                break;
            }
        }

        Decode(myTest, 1920, 1200);

    }
    catch (Exception e) {
        Log.d("MYAPP", "Error: " + e.getMessage());
    }
}

请大家感谢我能得到的所有帮助。谢谢!

编辑:

问题解决了!感谢杰森郭。

我应该使用 GLES20 而不是 GLES30。Android 也不支持 GL_LUMINANCE。

固定线是 - GLES20.glReadPixels(0, 0, width, height, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, bb);

4

0 回答 0