Получение поворота устройства вокруг оси Y мирового происхождения в ARKit - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь вычислить вращение моего устройства, когда я вращаю его вокруг оси Y в ARKit.Для пояснения ось Y в ARKit - это ось, направленная вверх перпендикулярно земле.

Я использовал eulerangles, чтобы получить вращение камеры следующим образом:

var alpha = sceneView.pointOfView?.eulerAngles.y

Это приблизительно работает, когда 0=<alpha<pi/2 and when -pi/2<alpha<=0, но для того, что должно быть под другими углами, я получаю неправильные показания,Я подозреваю, что это связано с блокировкой карданного подвеса и что я должен каким-то образом использовать кватернионы, чтобы иметь возможность получить правильный угол независимо от квадранта.Любая помощь очень ценится!

1 Ответ

0 голосов
/ 05 марта 2019

Решено с помощью кватернионов вместо эуранглов.Это код, который я использовал:

  guard let cameraNode = sceneView.pointOfView else { return }

  //Get camera orientation expressed as a quaternion
  let q = cameraNode.orientation

  //Calculate rotation around y-axis (heading) from quaternion and convert angle so that
  //0 is along -z-axis (forward in SceneKit) and positive angle is clockwise rotation.
  let alpha = Float.pi - atan2f( (2*q.y*q.w)-(2*q.x*q.z), 1-(2*pow(q.y,2))-(2*pow(q.z,2)) )

Я использовал конвертацию кватерниона в заголовок / эйлер, указанную на на этом сайте .

...