如何让应用程序为“ovrweb'协议(在Gear VR中查看)?

时间:2017-07-18 11:08:56

标签: three.js webvr gear-vr

我有一个使用ThreeJS的网络应用。我目前正在尝试将WebVR包含在Gear VR中使用。

我知道我需要使用 ovrweb 协议链接到该网络应用,以便在Gear VR中打开它。我的问题是它没有。

每当我使用window.location.href = "ovrweb:http://my-app-url"时,都会要求我将设备连接到Gear VR。但是一旦我这样做,屏幕仍然是黑色的。我注意到,只要我使用一些非VR网页作为URL(如ovrweb:https://www.google.com),就会发生同样的事情。 但是,ovrweb协议可以正常使用某些URL - 例如ovrweb:https://playcanv.as/p/VNTAx5Eu/

我不确定我错过了什么。我的应用程序有一个VR按钮,点击该display.requestPresent API调用被触发&屏幕分为两部分(适用于Chrome Canary)。是否需要通过ovrweb协议识别我的应用程序需要满足的任何要求列表?如果是这样,那是什么?

我浏览了Oculus文档,但没有找到任何可以帮助我的东西。如何通过ovrweb协议运行我的应用程序?

更新:我发现ThreeJS示例链接(例如https://threejs.org/examples/webvr_rollercoaster.html)也没有在ovrweb协议上工作。

1 个答案:

答案 0 :(得分:0)

好的,我自己找到了解决方案。

每当我们尝试使用ovrweb协议时,设备将尝试打开其Carmel Developer Preview浏览器中提供的URL(不同于"互联网浏览器"可以在Oculus Home体验内部使用)。 现在Carmel开发者预览版仅支持" 3D"网站。 Carmel开发人员预览版目前不支持导航到2D网站。 (https://developer.oculus.com/documentation/vrweb/latest/concepts/carmel-launching-content/)。这就是为什么我自己的网络应用以及google.com等链接显示为黑色的原因。

所以我所要做的只是在一开始就触发display.requestPresent - 从而将其与2D网站区分开来。

如果没有某种用户交互(例如点击按钮),display.requestPresent就无法运行。出于安全考虑,其他JS API(例如全屏)的情况也是如此。

然而,似乎导航到ovrweb协议上的链接,从而在Carmel Developer Preview中查看它也满足用户交互条件。因此,现在我的VR场景在Gear VR中完全可见。

此解决方案也适用于ThreeJS webvr示例(包括OP中链接的过山车示例)。

所有需要做的就是在页面加载时触发此代码段。

display.requestPresent( [ { source: canvas } ] )
.then(function() {
    // Presenting to WebVR display
}, function(e) {
    // On error
});