javascript - 如何使用 WebVR 使 THREE.Mesh 看起来有立体感?

标签 javascript three.js oculus webvr

我正在致力于将现有的 Three.js 项目移植到 WebVR + Oculus Rift。基本上,这个应用程序采用 STL 文件作为输入,根据它创建一个 THREE.Mesh 并将其渲染在空场景上。我设法让它在 Firefox Nightly 中使用 Three.js 和 VRControls 的 VREffect 插件运行。我遇到的一个问题是 VR 中渲染的模型并不是真正的 3D。也就是说,当我来回移动 HMD 时,事件 3D 模型不会变得更近/更远,而且我看不到模型的不同侧面。看起来模型是一个固定在其位置上的平坦背景图像。如果我将 THREE.AxisHelper 添加到场景中,则在移动 HMD 时它会正确转换。

最初,应用程序中使用了THREE.OrbitControls,模型可以正确旋转和移动。

源代码数量相当多,因此我将根据需要发布一些片段。

最佳答案

事实证明,技术上没有问题。问题本质上在于我的模型和 Oculus 运动的不同比例。当 VRControls 使用默认设置时,它会报告从 Oculus 读取的 HMD 位置(以米为单位)。因此,我的头部运动范围只能勉强超过 1 m,而我的模型的平均尺寸约为其自身的几十个单位。当我在同一场景中同时使用它们时,就好像观众是一只 Ant 在看着一个巨大的模型。当然, Ant 必须走一段路才能看到模型的另一面。这就是为什么它看起来不像 3D 实体。

幸运的是,VRControls 有一个 scale 属性,可用于调整 HMD 移动的比例。当我将其设置为 30 左右时,一切都运行良好。

感谢@brianpeiris的评论,我决定再次检查模型和相机的坐标,以确保它们没有相互交织在一起。而且,它引导我找到了解决方案。

关于javascript - 如何使用 WebVR 使 THREE.Mesh 看起来有立体感?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34912722/

相关文章:

ide - 我可以用 VR 耳机替换我的开发 PC 显示器吗(兼职)?

javascript - 由于搜索尚未运行和激活时如何调试应用程序

javascript - ThreeJS 中的交叉淡入淡出场景从 101 > 107 升级

javascript - 如何对具有两个字段的对象进行排序?

javascript - THREE.js 从 3D 矢量转换为 2D 像素位置,解释 z 坐标

javascript - THREE.js 着色器仅在调整窗口大小后显示

c# - 我真的很难通过 Oculus VRC TestSubmitWhenNotVisible 测试

android - 如何将消息从 Android 发送到 Unity(使用 VR)? (UnityPlayer.UnitySendMessage 不起作用)

javascript - 使用 javascript 获取 UTC 时间(以秒为单位)

javascript - 使用字符串填充表格元素