Где я могу установить максимальное количество маркеров для ARView?

Я использую несколько уникальных якорей маркеров в сцене, на каждой из которых отображается 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 или что-то в этом роде, но если у кого-то есть какое-либо понимание, добавьте к принятому ответу.

Ниже вы можете увидеть только 4 из 6 отслеживаемых уникальных маркеров:

Отслеживаются 4 из 6 маркеров


person iicaptain    schedule 01.07.2019    source источник


Ответы (1)


В ARKit и RealityKit нет свойства number of markers being tracked.

Итак, чтобы исправить ситуацию, вам нужно использовать этот код для добавления якорей в ARView:

arView.scene.anchors.append(imageAnchor)

И вы также можете попробовать этот код для цикла for-in (поскольку бета-версия Xcode 11 может неправильно запускать цикл):

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

P.S.

Посмотрите на этот пост. Теперь ARKit 5.0 имеет возможность отслеживать более 4 изображений одновременно (на данный момент до 100 изображений одновременно).

person Andy Fedoroff    schedule 06.07.2019
comment
Замена .addAnchor на .anchors.append сделала свое дело! Снова посмотрев на документы, разница между ними не очень ясна. - person iicaptain; 09.07.2019