我正在使用 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);