Reality实现2D图片识别跟踪
2023-03-22 本文已影响0人
浪淘沙008
import UIKit
import RealityKit
import ARKit
class ViewController: UIViewController, ARSessionDelegate {
var arView: ARView!
override func viewDidLoad() {
super.viewDidLoad()
arView = ARView(frame: .zero)
let config = ARImageTrackingConfiguration()
let trackedImagesLib01 = ARReferenceImage(UIImage(named: "anchor_img_01")!.cgImage!, orientation: .up, physicalWidth: 0.05)
// 通过命名可以在获取锚点时确定是什么内容
trackedImagesLib01.name = "fox"
let trackedImagesLib02 = ARReferenceImage(UIImage(named: "anchor_img_02")!.cgImage!, orientation: .up, physicalWidth: 0.05)
trackedImagesLib02.name = "toy_biplane"
config.trackingImages = [trackedImagesLib01, trackedImagesLib02]
config.maximumNumberOfTrackedImages = 2
self.view.addSubview(arView)
arView.session.delegate = self
arView.session.run(config, options: [])
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
arView.frame = self.view.frame
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
arView.session.pause()
}
func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {
guard let imageAnchor = anchors[0] as? ARImageAnchor else {
return
}
// 图片识别加载模型
DispatchQueue.main.async {
do {
let myModelEntity = try ModelEntity.load(named: imageAnchor.name!)
let objectAnchorEntity = AnchorEntity(anchor:imageAnchor)
objectAnchorEntity.addChild(myModelEntity)
objectAnchorEntity.scale = [0.1, 0.1, 0.1]
self.arView.scene.addAnchor(objectAnchorEntity)
myModelEntity.playAnimation(myModelEntity.availableAnimations[0].repeat())
} catch {
print("无法加载模型")
}
}
}
}
图片跟踪.gif