ARKit,检测跟踪何时可用

时间:2018-05-16 22:45:28

标签: swift arkit

我正在寻找一种方法来检测空间跟踪何时工作/不工作"在ARKit中,即当ARKit有足够的视觉信息来启动3d空间跟踪时。

在我尝试过的其他应用中,如果ARKit没有从相机获取足够的信息,系统会提示用户环顾手机/相机以恢复空间跟踪。我甚至看到过带有进度条的应用程序,显示用户需要多少移动设备才能恢复跟踪。

检测是否有可用于检查ARSessions当前帧有多少 rawFeaturePoints 的好方法?例如,如果当前帧具有超过100个rawFeaturePoints,我们可以假设空间跟踪正在起作用。

这是一个很好的方法,还是在ARKit中有内置功能或更好的方法来检测空间跟踪是否有效我不知道什么?

1 个答案:

答案 0 :(得分:1)

你可以使用特征点,但我认为这可能是矫枉过正的,因为像这样的事情可能是一个好的开始:

使用currentFrame的{​​{1}},您可以像这样获得当前的跟踪状态:

ARSession

您可以在//------------------------------------------------ //MARK: ARSession Extension To Log Tracking States //------------------------------------------------ extension ARSession{ /// Returns The Status Of The Current ARSession /// /// - Returns: String func sessionStatus() -> String? { //1. Get The Current Frame guard let frame = self.currentFrame else { return nil } var status = "Preparing Device.." //1. Return The Current Tracking State & Lighting Conditions switch frame.camera.trackingState { case .normal: status = "" case .notAvailable: status = "Tracking Unavailable" case .limited(.excessiveMotion): status = "Please Slow Your Movement" case .limited(.insufficientFeatures): status = "Try To Point At A Flat Surface" case .limited(.initializing): status = "Initializing" case .limited(.relocalizing): status = "Relocalizing" } guard let lightEstimate = frame.lightEstimate?.ambientIntensity else { return nil } if lightEstimate < 100 { status = "Lighting Is Too Dark" } return status } } 回调中调用类似的内容:

ARSCNViewDelegate

您还可以使用其他委托回调,例如:

 func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {

      DispatchQueue.main.async {

            //1. Update The Tracking Status
            print(self.augmentedRealitySession.sessionStatus())

      }
 }

这些ARKit指南还提供了一些有用的信息,如如何处理这些状态:Apple Guidelines

如果你确实想跟踪func session(_ session: ARSession, didFailWithError error: Error) { print("The ARSession Failed") } func sessionWasInterrupted(_ session: ARSession) { print("ARSession Was Interupted") } 的数量,你可以这样做:

featurePoints

如果你想看一个例子,你可以看一下:Feature Points Example

希望它有所帮助...