【问题标题】:How to get the name of the tracked image in Swift with RealityKit?如何使用 RealityKit 在 Swift 中获取跟踪图像的名称?
【发布时间】:2021-05-30 08:45:53
【问题描述】:

我有多张 AR 参考图像,我想知道我目前正在跟踪哪一张。我怎样才能做到这一点?这是我的代码:

let configuration = ARImageTrackingConfiguration()

guard let trackedImages = ARReferenceImage.referenceImages(inGroupNamed: "Photos", bundle: Bundle.main) else {
      print("No images available")
      return
  }
    
  configuration.trackingImages = trackedImages
  configuration.maximumNumberOfTrackedImages = 1
  sceneView.session.run(configuration)

【问题讨论】:

    标签: swift swiftui augmented-reality arkit realitykit


    【解决方案1】:

    您需要使用renderer(_:didAdd:for:) 方法。当您的应用程序检测到它识别出的图像时,它将添加一个锚点。您可以从资产目录中提取该图像的名称。

    将此添加到您的 ARSCNViewDelegate 课程中:

    func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
        guard let imageAnchor = anchor as? ARImageAnchor else { return }
        let image = imageAnchor.referenceImage
        // this is one means of getting the name of the image
        if let trackedImage = image.name {
            print(trackedImage)
        }
    }
    

    【讨论】:

      【解决方案2】:

      如果您需要 RealityKit 的解决方案,而不是 SceneKit 的解决方案,请使用以下代码:

      import ARKit
      import RealityKit
      
      extension ViewController: ARSessionDelegate {
          
          func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {
              
              guard let imageAnchor = anchors.first as? ARImageAnchor,
                    let name = imageAnchor.referenceImage.name
              else { return }
      
              print(name)
              
              let entity = ModelEntity(mesh: .generateSphere(radius: 0.05))
              let anchor = AnchorEntity(anchor: imageAnchor)
              
              anchor.addChild(entity)
              arView.scene.anchors.append(anchor)
          }
      }
      

      别忘了实现会话委托:

      class ViewController: UIViewController {
      
          @IBOutlet var arView: ARView!
          
          override func viewDidLoad() {
              super.viewDidLoad()
      
              arView.session.delegate = self
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2021-05-30
        • 1970-01-01
        • 2015-09-06
        • 2020-11-14
        • 1970-01-01
        • 1970-01-01
        • 2011-12-25
        • 2012-05-03
        • 2014-08-20
        相关资源
        最近更新 更多