Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何让UVC功能(江东国的模块)在Android上与谷歌VR协同工作?_Java_Android_Opengl Es_Google Vr_Uvc - Fatal编程技术网

Java 如何让UVC功能(江东国的模块)在Android上与谷歌VR协同工作?

Java 如何让UVC功能(江东国的模块)在Android上与谷歌VR协同工作?,java,android,opengl-es,google-vr,uvc,Java,Android,Opengl Es,Google Vr,Uvc,这个问题可能听起来很模糊,但请稍候,因为我将提供有关我所面临的情况的所有必要细节。请记住,我是一个初学者,Java和Android工作室工作流(我用C++编写桌面程序,我的大部分时间,只是最近需要java java的移动应用程序)。在过去的几个月里,我一直在努力编写一个应用程序,通过智能手机的USB C端口(它使用了一种非常便宜的USB-HDMI捕获芯片,Elgato Cam Link克隆)获取视频输入,并在VR中直接在用户面前投射视频,而不管用户的头部方向如何,不需要头部追踪 我试图通过合并

这个问题可能听起来很模糊,但请稍候,因为我将提供有关我所面临的情况的所有必要细节。请记住,我是一个初学者,Java和Android工作室工作流(我用C++编写桌面程序,我的大部分时间,只是最近需要java java的移动应用程序)。在过去的几个月里,我一直在努力编写一个应用程序,通过智能手机的USB C端口(它使用了一种非常便宜的USB-HDMI捕获芯片,Elgato Cam Link克隆)获取视频输入,并在VR中直接在用户面前投射视频,而不管用户的头部方向如何,不需要头部追踪

我试图通过合并两段已经可用的代码来编写此应用程序:

  • 谷歌虚拟现实演示(hellovr)可以在这里找到 (), 即用户坐在房间中并单击的演示 浮动多面体
  • 江东国的UVC模块可以在这里找到 (). 我选择了 他的作品似乎是最多才多艺、写得最好的作品 可用(如果我错了,请纠正我)
  • 到目前为止,我所做的是:

  • 非常粗略地操纵“hellovr”代码以满足我的需要- 而不是显示带有浮动多面体和 播放音乐时,它现在只渲染 来自USB的视频应该是投影的。现在,只是 证明我对代码的修改确实有效 按照预期,此曲面仅显示闪烁的占位符 让用户知道没有视频源的图形 可用(此图形上的消息以我的母语显示 语言,罗马尼亚语,忽略它)。所以,现在我可以得到任何位图和 通过将其加载到OpenGL中,使其覆盖用户的大部分视野 纹理,然后将其放置到正在渲染的曲面上 就在用户面前。一半的工作已经完成了!这个 另一半是将OpenGL纹理链接到UVC流。至于 正如我所读到的,有两种方法:

    • 更容易实现,但效率较低的获取 使用预览UVC源的位图

      CameravieInterface.captureStillImage(宽度、高度)

      用于每个渲染帧并加载它 在纹理(简单纹理_2D)中,使用普通2D纹理 片段着色器中的采样器。此方法是当前使用的方法 在我迄今为止工作过的代码中使用,我将在 这篇文章的结尾

    • 更难实现,但最有效的方法是使用 GL_纹理_外部_OES。据我所知,这是一种特殊的 仅当摄影机的SurfaceTexture附着到 该纹理的数字GL控制柄,理论上这将由 电话:

      SurfaceTexture.detachFromGLContext();SurfaceTexture.attachToGLContext(texGLHandle)

      此外,为了使其工作,我读到一个特殊的ExternalOES采样器必须与纹理一起使用。 在整个“HelloVrActivity.java”文件中,您可能会找到我尝试使用此方法完成的部分剩余内容。我所有的尝试都以失败告终

  • 将江东国的一些代码插入先前修改过的 谷歌虚拟现实演示。我很确定他们的代码会初始化 正确并能够连接到我的USB设备。他们的代码需要 我的应用程序实现了一个特殊的视图,该视图用作 预览UVC提要时,我向应用程序提供了此视图,但我隐藏了 它位于主VR视图后面,应该是全屏的

  • 在测试各种方法时,我发现了一个有趣的方面:

    即使我在ADB运行时日志中没有显示错误的情况下工作,以下情况也总是会发生:当UVC预览视图开始显示视频提要时,Google VR视图变为黑色(用于将智能手机显示屏置于VR耳机内居中的白色指示灯除外);当我断开USB设备的连接时,UVC预览视图将恢复为非活动状态(如预期),Google VR视图将恢复正常功能这似乎很奇怪,似乎无论发生什么情况,这两个视图都无法同时工作。


    这是我最后一次尝试(),它实现了位图方法,我在我的华为ELE-L29(又名华为P30)上运行了它,但没有成功。我将非常感谢任何帮助,找出一种方法,使这项工作。另外,请原谅我的代码混乱。我提供的链接是一个包含我一直在做的整个项目的存档。

    Android上的Google VR对堆做了一些非传统的事情,我称之为buggy。我不得不做一些糟糕的变通来让事情顺利进行。类似于创建中间数据结构。我能给你的建议就是创建一个单独的项目,让你的所有代码在没有任何GVR代码的情况下工作,并使所有内容都成为一个全局变量,然后将其移动到一个最小的GVR项目中。。。