代码之家  ›  专栏  ›  技术社区  ›  BruOps

三js:使用具有不同基本方向的DeviceOrientationControl

  •  0
  • BruOps  · 技术社区  · 7 年前

    我希望用户能够“锁定”摄像机,从而防止摄像机方向发生变化。当解锁它时,我希望视图现在从他们锁定它的位置旋转相机,即我不希望相机“跳转”到另一个方向,即使他们的手机的方向在视图锁定时发生了变化。

    以下是DeviceOrientaionControl修改版本的代码。js: https://gist.github.com/BruOp/a3fb2f0854357eb1182671cafd3fae89

    关键部分在 update , disconnect reconnect

    我基本上是在接受培训(称之为 lockedRot )用户在“锁定”时看到的,然后在“解锁”时获取设备的方向( unlockedRot ). 然后找到四元数 deviceToPercieved

    deviceToPercieved * unlockedRot = lockedRot

    但它并没有真正起作用。有时,相机在解锁时只会跳跃一点点,但有时它无法在解锁时完全保持“锁定”方向。

    我是采取了错误的方法,还是遗漏了更基本的东西?

    1 回复  |  直到 7 年前
        1
  •  0
  •   BruOps    7 年前

    我发现了问题!在计算 deviceToPerceived 四元数。它是:

    this.deviceToPercieved.multiplyQuaternions(
      this.unlockedRot.clone().conjugate(),
      this.lockedRot
    ).normalize();
    

    但实际上应该是:

    this.deviceToPercieved.multiplyQuaternions(
      this.lockedRot,
      this.unlockedRot.clone().conjugate()
    );
    

    注意乘法顺序的变化和 normalized()