我正在使用设备方向控件,但需要一些我遇到困难的其他功能。
我希望用户能够“锁定”相机,这可以防止相机方向改变。当解锁它时,我希望视图现在将相机从锁定它的位置旋转,即。我不希望相机“跳”到另一个方向,即使在视图锁定时手机的方向已经改变。
以下是DeviceOrientaionControls.js修改版的代码:https://gist.github.com/BruOp/a3fb2f0854357eb1182671cafd3fae89
关键部分位于update
,disconnect
和reconnect
。
我基本上采取了用户在“锁定”时看到的方向(称之为lockedRot
),然后在“解锁”(unlockedRot
)时获取设备的方向。然后我找到四元数deviceToPercieved
,以便:
deviceToPercieved * unlockedRot = lockedRot
但它并没有真正起作用。有时,相机在解锁时只会稍微跳一下,但有时候它无法完全解锁时保持“锁定”方向。
我在这里采取了错误的做法,还是我错过了一些更基本的东西?
答案 0 :(得分:0)
我发现了问题!计算deviceToPerceived
四元数时,这只是乘法的顺序。那是:
this.deviceToPercieved.multiplyQuaternions(
this.unlockedRot.clone().conjugate(),
this.lockedRot
).normalize();
但实际上应该是:
this.deviceToPercieved.multiplyQuaternions(
this.lockedRot,
this.unlockedRot.clone().conjugate()
);
注意乘法顺序的变化和normalized()
调用的删除。
现在正常运作!