首页 > 解决方案 > 在 ARImageTrackingConfiguration 中同时跟踪两个对象

问题描述

我想将两个 3D 模型链接到两个不同的跟踪器。我将跟踪器捕捉到参考照片,但我不明白如何同时跟踪两个对象ARImageTrackingConfiguration

guard let trackedImages = ARReferenceImage.referenceImages(inGroupNamed: "Photos2", bundle: Bundle.main) else {
    print("No images available")
    return
}

我将跟踪器捕捉到参考照片,但我不明白如何同时跟踪两个对象ARImageTrackingConfiguration

标签: swiftscenekitaugmented-realityarkitswift5

解决方案


你需要把它放到 ViewController 中:

class ViewController: UIViewController {

    func trackingConfig() {

        guard let referenceImages = ARReferenceImage.referenceImages(inGroupNamed: "AR Resources", 
                                                                           bundle: nil)
        else {
            return
        }

        let config = ARWorldTrackingConfiguration()
        config.detectionImages = referenceImages
        let options: ARSession.RunOptions = [.resetTracking,                                        
                                             .removeExistingAnchors] 
        sceneView.session.run(config, options: options)
    }
}

然后创建一个包含渲染器方法的扩展和一个内部函数的开关:

extension ViewController: ARSCNViewDelegate {

    func renderer(_ renderer: SCNSceneRenderer,
                 didAdd node: SCNNode,
                  for anchor: ARAnchor) {

        guard let imageAnchor = anchor as? ARImageAnchor,
              let imageName = imageAnchor.referenceImage.name
        else {
            return
        }

        let geometryNode = nodeGetter(name: imageName)
        node.addChildNode(geometryNode)
    }

    func nodeGetter(name: String) -> SCNNode {

        var node = SCNNode()

        switch name {
            case "geometry_01": node = geoOne
            case "geometry_02": node = geoTwo
            default: break
        }
        return node
    }
}

推荐阅读