如何使用ARKit启用对象永久性/跟踪?

时间:2019-11-15 20:02:59

标签: swift augmented-reality arkit realitykit

我已经在Swift中构建了一个超简单的AR应用程序(在模板上扩展),可以在图像锚点上显示3D模型。但是,当图像锚点脱离框架时,附加的模型会消失–下次检测到锚点时它们会重新加载。

如果模型随着用户的移动而持续存在,那将是一个更好的体验。如何启用对象永久性?

我的代码:

import UIKit
import RealityKit

class ViewController: UIViewController {

    @IBOutlet var arView: ARView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Load scenes 
        let OneAnchor = try! One.loadFace()
        let TwoAnchor = try! Two.loadFace()
        let ThreeAnchor = try! Three.loadFace()
        let FourAnchor = try! Four.loadFace()

        // Add anchors
        arView.scene.anchors.append(OneAnchor)
        arView.scene.anchors.append(TwoAnchor)
        arView.scene.anchors.append(ThreeAnchor)
        arView.scene.anchors.append(FourAnchor)
    }
}

1 个答案:

答案 0 :(得分:1)

为保持持久性,您需要将ARWorldTrackingConfiguration类和.detectionImages实例属性一起使用,而不是ARImageTrackingConfiguration类。

这是官方文件说的:

  

ARWorldTrackingConfiguration可以创造身临其境的AR体验:相对于现实世界,虚拟对象似乎停留在同一位置,即使用户将设备倾斜到对象上方或下方,或移动设备看看物体的侧面和背面。

您在viewWillAppear(animated)生命周期方法中的代码可能看起来像这样:

label.text = "Track your environment"

guard let refImages = ARReferenceImage.referenceImages(inGroupNamed: "Pictures", 
                                                             bundle: nil)
else { 
    return 
}

let config = ARWorldTrackingConfiguration()
config.detectionImages = refImages
config.maximumNumberOfTrackedImages = 4

let options = [ARSession.RunOptions.removeExistingAnchors,
               ARSession.RunOptions.resetTracking]

arView.session.run(config, options: ARSession.RunOptions(options))