我希望用户能够“锁定”摄像机,从而防止摄像机方向发生变化。当解锁它时,我希望视图现在从他们锁定它的位置旋转相机,即我不希望相机“跳转”到另一个方向,即使他们的手机的方向在视图锁定时发生了变化。
以下是DeviceOrientaionControl修改版本的代码。js: https://gist.github.com/BruOp/a3fb2f0854357eb1182671cafd3fae89
关键部分在 update , disconnect reconnect
update
disconnect
reconnect
我基本上是在接受培训(称之为 lockedRot )用户在“锁定”时看到的,然后在“解锁”时获取设备的方向( unlockedRot ). 然后找到四元数 deviceToPercieved
lockedRot
unlockedRot
deviceToPercieved
deviceToPercieved * unlockedRot = lockedRot
但它并没有真正起作用。有时,相机在解锁时只会跳跃一点点,但有时它无法在解锁时完全保持“锁定”方向。
我是采取了错误的方法,还是遗漏了更基本的东西?
我发现了问题!在计算 deviceToPerceived 四元数。它是:
deviceToPerceived
this.deviceToPercieved.multiplyQuaternions( this.unlockedRot.clone().conjugate(), this.lockedRot ).normalize();
但实际上应该是:
this.deviceToPercieved.multiplyQuaternions( this.lockedRot, this.unlockedRot.clone().conjugate() );
注意乘法顺序的变化和 normalized()
normalized()