我如何在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
}

试试下面的代码:

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

最新更新