1

我在 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)
    }
}
4

1 回答 1

1

对于持久性,您需要使用带有实例属性的 ARWorldTrackingConfiguration 类而不是ARImageTrackingConfiguration.detectionImages

这是官方文档所说的:

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))
于 2019-11-16T06:24:13.773 回答