首页 文章

如何不断获取 ARCamera 的 rotation/eulerAngles 个值

提问于
浏览
1

嘿,我试图不断获取设备 camera/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 合并到该函数中。

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 ... */
    }
    

相关问题