我使用此CMDeviceMotion extension中描述的answer将我的SceneKit相机设置为当前CMDeviceMotion
态度:
func deviceDidMove(motion: CMDeviceMotion?, error: NSError?) {
if let motion = motion {
let orientation = motion.gaze(atOrientation: UIApplication.sharedApplication().statusBarOrientation)
cameraNode.orientation = orientation
}
}
这很漂亮,但是,我想阻止旋转(滚动),只允许相机转动(偏航)和俯仰。
我尝试将四元数转换回欧拉角,然后将roll保持为0:
cameraNode.eulerAngles = SCNVector3(
x: orientation.pitch(),
y: orientation.yaw(),
z: 0)
然而,这只适用于偏航运动的一半。另一半,相机倒置。我怀疑这是涉及欧拉角的万向节锁问题。
四元数对我来说有点像黑魔法,但有没有办法直接在四元数上删除滚动分量,这样我可以避免欧拉角?