ARKit: выберите, какой ARImageAnchor отслеживать - PullRequest
1 голос
/ 01 апреля 2019

Я обнаружил эмпирически, что ARKit не отслеживает более 4 якорей изображений одновременно; установка maximumNumberOfTrackedImages на номер больше 4 игнорируется:
Имея дюжину маркеров изображений в области усеченного пространства камеры, ARKit обнаруживает их все и возвращает соответствующие ARImageAnchor с, однако только 4 из них будут иметь isTracked == true.
Я не смог найти никаких ссылок на это ограничение в документации Apple, однако это упоминалось в этом среднем посте :

[...] на данный момент вы можете включить отслеживание до 2 изображений, но в будущих выпусках их число наверняка будет расти.

Я хотел бы выбрать, какие якоря отслеживаются, чтобы я мог точно отслеживать якоря в центре экрана в приоритетном порядке.

Я пытался удалить якоря, которые сейчас не хочу отслеживать, надеясь, что ARKit отследит остальные:

func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {

    guard let anchors = sceneView.session.currentFrame?.anchors.compactMap({ $0 as? ARImageAnchor }), anchors.count > 0 else {
        return
    }

    let sortedAnchors = anchors.sorted { distanceToScreenCenter($0, renderer) < distanceToScreenCenter($1, renderer) }

    sortedAnchors.dropFirst(4).filter({ $0.isTracked }).forEach({
        self.sceneView.session.remove(anchor: $0)
    })

Но не повезло, удаленные якоря добавляются и сразу же отслеживаются.

...