我有一个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
}
试试下面的代码:
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
}
}