Я работаю над проектом iOS/Swift, который содержит сцену (SceneKit). Что я хочу сделать, это повернуть SCNCamera
, когда пользователь поворачивает свой телефон.Движение SCNCamera синхронизировано с акселерометром iPhone
Вот что я сделал:
motionManager = CMMotionManager()
motionManager.accelerometerUpdateInterval = 0.1
motionManager.startAccelerometerUpdates(to: OperationQueue.main) { [weak self] (data: CMAccelerometerData?, error: Error?) in self?.update_rotation(p: (data?.acceleration)!) }
и в функции update_rotation
:
camera_node.eulerAngles = SCNVector3Make(angle_x,angle_y,angle_z)
camera_node
мой объект SCNNode
камеры. angle_x
и angle_z
рассчитаны по данным акселерометров. (Я просто умножу значение акселерометра на 90, и я преобразую его в радианы). angle_y
рассчитывается по компасу (северный угол).
Моя проблема исходит от angle_z
. Это очень странно, потому что поведение свойства eulerAngles.z
зависит от значения angle_y
. Другими словами, все отлично работает, если смотреть на север. Когда я смотрю на юг, angle_z
необходимо перевернуть. Я не понимаю, почему.
Там точно такая же проблема. Я удалил два минуса в вашем SCNVector3, потому что я работаю в Landscape - home left. Если я наклоняю свой телефон влево/вправо, это не работает, когда я смотрю позади – Bob5421