m_videoOverlayTextureY 像素无效,但纹理渲染正确 GUI.DrawTexture

m_videoOverlayTextureY pixels are not valid, but the texture render correctly with GUI.DrawTexture

我正在尝试从相机获取 YUV 图像,但是当我尝试读取 GetVideoOverlayTextureYUV() 提供的 YUVTexure 中的像素时,所有像素都设置为“205”。奇怪的是我可以用 GUI.DrawTexture(someRect, _texture.m_videoOverlayTextureY); 绘制 'Y' 纹理并且我可以看到图像在那里,我只是无法用 getPixels().

读取它

我还在项目中使用了 Tango AR Camera 预制件,因此 m_useExperimentalVideoOverlay 设置为 true。我们尝试使用非实验性 API 但随后 AR Camera 预制件停止工作。

是否有人能够使用 IExperimentalTangoVideoOverlay 访问 Unity 中的图像数据?

来自 GetVideoOverlayTextureYUV 的纹理不同于常规的 Unity Texture2D。在 Tango Unity SDK 中,它在 Unity 级别创建一个 Texture2D 对象,并将 textureID 传递给原生 C++ API 进行填充。所以纹理像素值不会存储到 Unity,而是直接从本地代码复制到 GPU 内存,而 Unity 纹理只有它的 textureID。这就是为什么它可以渲染出来,但不能读取。

要从彩色相机获取实际字节缓冲区,您应该使用 ITangoVideoOverlay interface. The callback returns a YUV buffer, the conversion function to RGB is same as the one in the YUV2RGB.shader