使用OpenGL for Project Tango的Unity插件

时间:2016-02-05 05:40:57

标签: android unity3d opengl-es google-project-tango opengl-es-3.0

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

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

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

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

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

public void Decode(){

    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());
    }
}

请各位大家欣赏我能得到的所有帮助。 谢谢!

编辑:

问题解决了! 感谢Jason Guo。

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

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

0 个答案:

没有答案