swift - 如何在 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
}
}
推荐阅读
- python - Pybuilder单元测试找不到模块
- java - maven找不到包
- firebase - 我需要帮助创建用户提供所需文档的数据模型
- javascript - 如何在具有正则表达式的域列表中将域与子域匹配?
- ios - 你能在 SwiftUI ForEach 语句中指定一个“Where”吗?
- javascript - 我无法使用 d3 生成地图图像,并且无法弄清楚为什么 D3 适用于某些文件而不适用于其他文件
- git - 可靠的命令集在带有和不带有子模块的 git 分支之间切换
- python - 如何将文件拆分为不同的数组?
- r - 当第一个字符为0时,R函数将变量作为字符串传递
- mysql - 如果transfer_to 列等于100,我需要一个查询将存储表中的transfer_to 列更新为'Invalid_destination'