Мне кажется, что ARKit 2.0 обеспечивает не очень точное отслеживание.SCNPlane всегда перекрывается или недолговечен при покрытии отслеживаемого изображения с помощью SCNPlane.Я проверил отслеживание изображений с различными изображениями и различными примерами исходного кода.Устаревший ARToolKit отслеживает более точно.
Iphone 7, IOS 12.0.

Исходный код является типичным:
import UIKit
import SceneKit
import ARKit
class ViewController: UIViewController, ARSCNViewDelegate {
@IBOutlet var sceneView: ARSCNView!
var session: ARSession {
return sceneView.session
}
override func viewDidLoad() {
super.viewDidLoad()
sceneView.delegate = self
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let configuration = ARImageTrackingConfiguration()
guard let trackingImages = ARReferenceImage.referenceImages(inGroupNamed: "AR Resources", bundle: nil) else {
print("Could not load images")
return
}
configuration.trackingImages = trackingImages
configuration.maximumNumberOfTrackedImages = 1
session.run(configuration, options: [])
}
public func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
let node = SCNNode()
if let imageAnchor = anchor as? ARImageAnchor {
let plane = SCNPlane(width: imageAnchor.referenceImage.physicalSize.width, height: imageAnchor.referenceImage.physicalSize.height)
if imageAnchor.referenceImage.name == "test" {
plane.firstMaterial?.diffuse.contents = UIColor.red
plane.firstMaterial?.transparency = 0.5
}
let planeNode = SCNNode(geometry: plane)
planeNode.eulerAngles.x = -.pi / 2
node.addChildNode(planeNode)
}
return node
}
}
Есть комментарии или предложения?