yu.*_*ets 6 webgl oculus webvr
我有一个使用WebGL生成3D场景的Web应用程序.我想知道是否有可能使用Oculus rift显示这个场景?这有多难?
虽然我意识到这是一个老问题,而且现在有很多关于那里的信息,但我还是要发布一个答案,因为之前发布的答案不是最新的。
我已经创建了一个基本的 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);
Run Code Online (Sandbox Code Playgroud)
并在渲染函数中:
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);
}
Run Code Online (Sandbox Code Playgroud)
您需要做的另一件事是提供以下四个库(除了three.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 应用程序一样。
Rift 渲染有两个主要组成部分:头部跟踪和扭曲。
扭曲通常由 Oculus SDK 使用 OpenGL 或 Direct3D 来完成,但也可以用 Javascript 来实现。您可以在此处查看相关示例。该页面使用从 Oculus SDK 中提取的一组预烘焙扭曲顶点,适合与 DK1 模型一起使用。
头部跟踪要困难得多,因为它需要访问硬件或与硬件通信的运行时。Mozilla 正在开发一组 API,用于访问头部跟踪,并可能获取失真参数,但它似乎远不稳定。
Three.js 似乎有想要支持实验性 VR api 的示例,以及使用名为 ouclus-rest 的示例。
基本上可以归结为:如果你想用 Javascript 来做 VR,你要么必须推出自己的解决方案,尝试击中移动目标,要么要有耐心。