1

我在一个场景中使用了多个唯一的标记锚点,每个锚点都ModelEntity显示在它们上面。我单独检测每个标记没有问题,但是一旦跟踪一个并且模型出现,其他标记就不会跟踪。如果被跟踪的标记移出框架,那么突然另一个标记将开始被跟踪。

我的怀疑是存在最大标记数的设置并将其设置为 1。(就像maximumNumberOfTrackedImages来自 SceneKit 的设置。)我在这里缺少一个设置,这是 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 个被跟踪:

正在跟踪 6 个标记中的 4 个

4

1 回答 1

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)
}

附言

看看这个帖子。现在 ARKit 5.0 能够一次跟踪超过 4 张图像(目前最多同时跟踪 100 张图像)。

于 2019-07-06T20:04:39.670 回答