Three.js: 使用具有不同基本方向的 DeviceOrientationControls
Three.js: Using DeviceOrientationControls with a different base direction
我正在使用设备方向控件,但需要一些我在使用时遇到困难的附加功能。
我希望用户能够 "lock" 相机,这样可以防止相机方向发生变化。当解锁它时,我希望视图现在从他们锁定它的地方旋转相机,即。我不希望相机 "jump" 转向另一个方向,即使他们 phone 的方向在视图锁定时发生了变化。
这是 DeviceOrientaionControls.js 的修改版本的代码:https://gist.github.com/BruOp/a3fb2f0854357eb1182671cafd3fae89
关键部分在update
、disconnect
和reconnect
。
我基本上采用用户在 "lock" 时看到的方向(称为 lockedRot
),然后在 "unlocked" 时采用设备的方向(unlockedRot
).然后我找到四元数 deviceToPercieved
这样:
deviceToPercieved * unlockedRot = lockedRot
但这并没有真正起作用。有时,相机在解锁时只会跳动一点,但有时它无法在解锁时完全保持 "locked" 方向。
我是不是采取了错误的方法,还是遗漏了一些更基本的东西?
我找到问题了!只是计算deviceToPerceived
四元数时的乘法顺序。它是:
this.deviceToPercieved.multiplyQuaternions(
this.unlockedRot.clone().conjugate(),
this.lockedRot
).normalize();
但实际上应该是:
this.deviceToPercieved.multiplyQuaternions(
this.lockedRot,
this.unlockedRot.clone().conjugate()
);
注意乘法顺序的变化和 normalized()
调用的删除。
现在可以正常使用了!
我正在使用设备方向控件,但需要一些我在使用时遇到困难的附加功能。
我希望用户能够 "lock" 相机,这样可以防止相机方向发生变化。当解锁它时,我希望视图现在从他们锁定它的地方旋转相机,即。我不希望相机 "jump" 转向另一个方向,即使他们 phone 的方向在视图锁定时发生了变化。
这是 DeviceOrientaionControls.js 的修改版本的代码:https://gist.github.com/BruOp/a3fb2f0854357eb1182671cafd3fae89
关键部分在update
、disconnect
和reconnect
。
我基本上采用用户在 "lock" 时看到的方向(称为 lockedRot
),然后在 "unlocked" 时采用设备的方向(unlockedRot
).然后我找到四元数 deviceToPercieved
这样:
deviceToPercieved * unlockedRot = lockedRot
但这并没有真正起作用。有时,相机在解锁时只会跳动一点,但有时它无法在解锁时完全保持 "locked" 方向。
我是不是采取了错误的方法,还是遗漏了一些更基本的东西?
我找到问题了!只是计算deviceToPerceived
四元数时的乘法顺序。它是:
this.deviceToPercieved.multiplyQuaternions(
this.unlockedRot.clone().conjugate(),
this.lockedRot
).normalize();
但实际上应该是:
this.deviceToPercieved.multiplyQuaternions(
this.lockedRot,
this.unlockedRot.clone().conjugate()
);
注意乘法顺序的变化和 normalized()
调用的删除。
现在可以正常使用了!