在哪里可以设置ARView的最大标记数?

时间:2019-07-01 00:58:54

标签: swift augmented-reality arkit xcode11 realitykit

我在场景中使用了多个唯一的标记锚,每个锚都在其上显示了ModelEntity。我没问题分别检测每个标记,但是一旦跟踪了一个标记并显示了模型,其他标记就不会跟踪。如果被跟踪的标记移出帧,那么另一个标记将突然开始被跟踪。

我怀疑存在最大标记数的设置并将其设置为1。(就像SceneKit中的maximumNumberOfTrackedImages一样。)这里是否缺少我的设置? RealityKit,还是在将锚点添加到场景时只是搞砸了?

我正在为数组中的每个项目调用以下函数:

class RealityViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
            let arView = ARView(frame: UIScreen.main.bounds)
            view.addSubview(arView)

            let targets = ["image1", "image2", "image3"]
            for target in targets {
                addTarget(target:target,arView:arView)
            }
    }

    func addTarget(target: String, arView: ARView) {

        let imageAnchor = AnchorEntity(.image(group: "Markers", name: target))
        arView.scene.addAnchor(imageAnchor)
        let plane = MeshResource.generatePlane(width: 0.05, height: 0.05, cornerRadius: 0.0)
        let material = SimpleMaterial(color: .blue, roughness: 1.0, isMetallic: false)
        let model = ModelEntity(mesh: plane, materials: [material])
        imageAnchor.addChild(model)
    }
}

更新: 虽然@ARGeo的答案在进一步测试中确实解决了原始问题,但我发现更新后的代码一次最多只能跟踪4个目标。同样,我不确定这是否是RealityKit的硬限制,但是如果有人有任何见识,请添加到接受的答案中。

在下面,您只能看到正在跟踪的6个唯一标记中的4个:

4 of 6 markers being tracked

1 个答案:

答案 0 :(得分:1)

ARKit和RealityKit中没有number of markers being tracked属性。

  

因此,要纠正这种情况,您需要使用以下代码在ARView中添加锚点:

arView.scene.anchors.append(imageAnchor)

您还可以尝试将此代码用于for-in循环(因为Xcode 11 beta可能会错误地运行循环):

for i in 0..<targets.count {
    addTarget(target: targets[i], arView: arView)
}

P.S。大约仅跟踪4张图片

查看this post。 @ElliottMalone说,该框架的限制涉及到跟踪多于4张图像的能力。