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