我已经在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)
}
}
答案 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))