【问题标题】:How can I track multiple images with RealityKit in Swift?如何在 Swift 中使用 RealityKit 跟踪多个图像?
【发布时间】:2021-05-30 08:19:58
【问题描述】:

我有一个 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
    }

【问题讨论】:

    标签: swift swiftui augmented-reality arkit realitykit


    【解决方案1】:

    试试这个代码:

    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
        }
    }
        
    

    【讨论】:

      猜你喜欢
      • 2021-05-30
      • 1970-01-01
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多