Javascript 如何相对于透视图以三个方向移动相机?

Javascript 如何相对于透视图以三个方向移动相机?,javascript,camera,three.js,google-cardboard,Javascript,Camera,Three.js,Google Cardboard,问题: 我一直在和3J一起做第一人称迷宫游戏。我最近加入了DeviceOrientationControl,开始将其移动到虚拟现实中,但我以前用于移动相机的系统与相机分离。相机不再使用箭头键移动 使用DeviceOrientationControl更新相机时,如何再次使用箭头键移动相机 如果可能的话,我如何自动相对于相机的透视向前移动 更新: 找到了一个完美的我想要的 但是,我有一些问题 脚本如何使摄影机移动 我如何简化这一点和/或在工作中实现这一点 资源: 比较: 以下是

问题:

我一直在和3J一起做第一人称迷宫游戏。我最近加入了DeviceOrientationControl,开始将其移动到虚拟现实中,但我以前用于移动相机的系统与相机分离。相机不再使用箭头键移动

  • 使用DeviceOrientationControl更新相机时,如何再次使用箭头键移动相机
  • 如果可能的话,我如何自动相对于相机的透视向前移动

更新

找到了一个完美的我想要的

但是,我有一些问题

  • 脚本如何使摄影机移动
  • 我如何简化这一点和/或在工作中实现这一点

资源


比较

以下是它之前的行为(使用工作控件)

下面是它现在的行为(方向)


注意:
我没有包括我的脚本,因为我认为这个问题不需要它。如果您需要,请询问,我将在此处插入。

回答您两个问题:

1) 脚本如何使摄影机移动

让我们将脚本分解为基本内容。当用户与W、A、S、D交互时,此状态会发生变化。现在,渲染的每一帧,我们都可以根据按键的状态在特定方向上添加
velocity
。我们现在有了速度的概念。您应该在
animate()
中记录速度值,并检查它在移动时的变化

那么这个
速度
变量实际上是如何移动相机的呢?嗯,这个剧本。您可以看到
PointerLockControls
的完整脚本。请注意PointerLockControls的唯一参数是摄影机。为了移动相机,我们需要在
PointerLockControls
中使用一些漂亮的函数。这将返回传递给PointerLockControls(也称为摄影机)的THREE.js对象

一旦我们可以获得相机,我们就可以通过将其x、y和z值转换为前面创建的
速度来移动相机。您可以在中阅读有关使用这些方法翻译对象的更多信息

2) 我如何简化这一点和/或在工作中实现这一点

这可能是对摄影机实现第一人称控制的最简单方法。我之前与您分享的脚本示例中的所有其他内容都用于检查。就像用户在threeJS对象中一样,允许他们跳转。或者添加一个按钮,以便在用户跳转后始终将其向下拉。举个例子,将其分解为最简单的组件,然后从中构建


这里是一个codepen示例,它向您展示了如何在不使用指针锁定控件的情况下,从
第53行开始平滑地向前移动摄影机

很抱歉,我将这些视频放在了服务器上的错误文件夹中。
velocity.x-=velocity.x*10.0*delta移动相机?“我试图实现这一点,但我需要先理解它。”科迪本内特。看看我为你做的密码笔。请转到
第53行
,在那里我开始定义变量和移动相机的方法。单击画布,然后按
w
up
向前移动相机。只要按任意一个键,就会发现它向前移动,松开后就会停止。你所说的线是阻止相机向特定方向移动的线。如果没有这条线,释放关键点后速度将不会设置为0,从而导致相机永远朝某个方向移动@CodyBennett在项目失败的情况下,这里有一个代码笔,它提供了一个非常基本的示例。尝试注释出
velocity.z-=…
行,看看按一下
w
会发生什么。非常感谢您的示例和指导,非常感谢。