首页 > 解决方案 > 如何在 Swift 中使用 RealityKit 跟踪多个图像?

问题描述

我有一个 AR 应用程序可以跟踪 AR 参考图像并将它们与其他图像叠加。问题是对于每个参考图像,我需要覆盖不同的特定图像。这是我的代码:

这是我跟踪 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 = 4
        
        sceneView.session.run(configuration)

在这里,我正在渲染叠加的图像:

func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
        
        let node = SCNNode()
        
        if let imageAnchor = anchor as? ARImageAnchor {
            let plane = SCNPlane(width: 2/2, height: 0.9/2)
            
            plane.firstMaterial?.diffuse.contents = UIImage(named: "Frame 1.png")
            
            let planeNode = SCNNode(geometry: plane)
            planeNode.eulerAngles.x = -.pi / 2
            planeNode.position.y = 0.3
                            
            node.addChildNode(planeNode)
        }
        return node
    }

标签: swiftswiftuiaugmented-realityarkitrealitykit

解决方案


试试这个代码:

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 }
        
        let entity: ModelEntity = retriever(name: imageName)
        let anchor = AnchorEntity(anchor: imageAnchor)
        
        anchor.addChild(entity)
        arView.scene.anchors.append(anchor)
    }
    
    func retriever(name: String) -> ModelEntity {
        
        let entity = ModelEntity()
        
        switch name {
            case "orange": entity = orangeEntity
            case "banana": entity = bananaEntity
            default: break
        }
        return entity
    }
}
    

推荐阅读