Как постоянно получать значения вращения /eulerAngles ARCamera - ios


1

Эй, я пытаюсь постоянно получать ценность устройств камеры /ARCamera. Насколько я знаю, есть только одна функция, позволяющая мне получить доступ к этим чертам ARCamera. Вот эта функция здесь:

Код:

 // Only gets called couple times when camera state changes 

 func session(_ session: ARSession, cameraDidChangeTrackingState camera: ARCamera) 

  print("(camera.eulerAngles)")

 }

Я думал о том, что, возможно, использовал некоторые обманки, например, поместив повторяющийся таймер в функцию, которая будет вызывать это значение. Но я не могу назвать локальные селектора, которые загружаются. То, что я больше ищу, - это что-то вроде того, как эта функция:

func renderer(_ aRenderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
 // This constantly gets called. 
}

Интересно, есть ли способ включить ARCamera в функцию.

Источник
  •  26
  •  1
  • 9 мар 2020 2020-03-09 05:54:14

1 ответ

1

Если вы хотите постоянно получать обновления состояния камеры, реализуйте ARSessionDelegate.session(_:didUpdate:):

class MyDelegate: ARSessionDelegate {

  func session(_ session: ARSession, didUpdate frame: ARFrame) {
    print("(frame.camera)")
  }

  /* ... */
}

Объект ARFrame должен содержать поле camera со всей необходимой информацией.


Если вы просто хотите знать, когда отслеживание изменений состояния, вы можете захотеть сохранить состояние из session(_:cameraDidChangeTrackingState:) в поле и обратиться к нему в цикле рендеринга:

class MyDelegate: SCNSceneRendererDelegate, ARSessionObserver {

  var camera: ARCamera! = nil

  func session(_ session: ARSession, cameraDidChangeTrackingState camera: ARCamera) {
    self.camera = camera
  }

  func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
    print("(self.camera.trackingState)")
  }

  /* ... more methods ... */
}