6

我有一个使用 WebGL 生成 3D 场景的 Web 应用程序。我想知道是否可以使用 Oculus rift 来展示这个场景?有多难?

4

4 回答 4

5

概述

虽然我意识到这是一个老问题,而且现在有更多关于那里的信息,但我还是要发布一个答案,因为之前发布的答案不是最新的。

我创建了一个基本的 plunker,它说明了要让 three.js、webvr 和 oculus 一起工作需要做什么。注意:我不能完全在 plunker 下全屏工作,但如果你在 mozilla nightly build下使用 oculus Rift (OR) 运行 plunker,你应该会看到头部旋转正在工作。如果您在 plunker 之外运行它,您应该能够获得完整的 OR VR 体验。

我认为另一个值得参考的好应用是RiftSketch。这是我第一次用来学习如何让 OR 在浏览器下工作(这实际上是这个问题的原始发布者编写的应用程序)。

以下是与标准 three.js 应用程序不同的相关 webvr 片段:

this.controls = new THREE.VRControls(this.camera);
this.effect = new THREE.VREffect(this.renderer);
this.effect.setSize(this.width, this.height);

this.vrManager = new WebVRManager(this.renderer, this.effect);

在渲染函数中:

this.controls.update();

this.renderer.render(this.scene, this.camera); 

if (this.vrManager.isVRMode()) { 
  this.effect.render(this.scene, this.camera);
}
else {
  this.renderer.render(this.scene, this.camera);
}

需要的模块

您需要做的另一件事是提供以下四个库(除了三个.js):

  • VRControls.js
  • VRFfect.js
  • webvr-manager.js
  • webvr-polyfill.js

VRControls.js 和 VREffect.js 可分别从“examples/js/controls”和“examples/js/effects”下的three.js 库中获得。

更新:我建议您从webvr-boilerplate github 获取所有库。因为three.js 似乎没有最新版本。

另外两个可以在webvr-boilerplate github上获得。

您可以选择直接访问 webvr API,如此处所述,但我认为使用支持库要容易得多。

最后的话

您基本上根本不需要处理 Oculus Rift SDK。唯一需要直接调用 OR SDK API 的人是 Unity 引擎开发人员和 Mozilla API 开发人员。

WebVR 创建了一个通用 API,试图为所有 HMD 设备提供标准化接口,例如 Cardboard、OR 和(可能在未来)三星、HTC Vive、leap motion 等。如果您选择使用 VRControls 和 VREffects,您将拥有一个额外的 API 层,使其更加容易。它基本上只是一堆样板。最后,我并不认为您真的对幕后真正发生的事情有太多了解。您基本上只需设置一次就不会再触摸它。

一旦您获得了 OR 支持,那么为您的应用程序开发几乎就像任何其他 three.js 应用程序一样。

于 2015-07-28T11:01:17.957 回答
3

我建议不要使用第三方软件来访问跟踪数据,而是将您的实现基于FirefoxChrome的自定义构建中可用的实验性 WebVR API 。

如果 WebVR 和 VR 总体上获得足够的牵引力,这可能是最安全的选择。

于 2014-12-04T01:19:26.177 回答
2

渲染到 Rift 有两个主要组件,头部跟踪失真

失真通常由 Oculus SDK 使用 OpenGL 或 Direct3D 完成,但也可以在 Javascript 中实现。你可以在这里看到一个例子。该页面使用从 Oculus SDK 中提取的一组预烘焙的失真顶点,适用于 DK1 模型。

头部跟踪要困难得多,因为它需要访问硬件或与硬件对话的运行时。Mozilla 正在开发一组用于访问头部跟踪的 API,并可能获取失真参数,但它似乎远非稳定。

Three.js 似乎有希望支持实验性 VR api 的示例,以及使用称为 ouclus-rest 的示例。

基本上可以归结为:如果你想用 Javascript 做 VR,你要么必须推出自己的解决方案,要么尝试击中移动的目标,要么要有耐心。

于 2014-12-04T09:59:55.143 回答
1

这将是多么困难取决于您的经验。也就是说,我找到了一个库,可以将 Rift 连接到网络(假设这是你要去的方向),这可能会有所帮助:Oculus Bridge

来自该网站:“该项目的目标是提供一种灵活、简单的方式来访问 Oculus Rift 的跟踪数据和显示配置,以便与 webGL 或任何其他基于浏览器的内容一起使用。”

于 2014-12-03T20:43:06.060 回答