Donc, mon but est :
- Trouver une image connue
- Extrayez-le de la sceneView (par exemple, prenez un instantané).
- Effectuer un traitement supplémentaire
Il a été assez facile de réaliser la première étape en utilisant ARReferenceImage :
guard let referenceImages = ARReferenceImage.referenceImages(inGroupNamed: "AR Resources", bundle: nil) else { return }
let configuration = ARWorldTrackingConfiguration()
configuration.detectionImages = referenceImages
Mais maintenant je n'arrive pas à trouver comment extraire l'image de la SceneView. J'ai le nœud plan ajouté à l'imageAnchor :
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
DispatchQueue.main.async { [unowned self] in
guard let imageAnchor = anchor as? ARImageAnchor
else { return }
let planeNode = self.getPlaneNode(withReferenceImage: imageAnchor.referenceImage)
planeNode.opacity = 0.5
planeNode.eulerAngles.x = -.pi / 2
node.addChildNode(planeNode)
}
}
Pour cela, j'ai besoin que le planeNode's projection sur l'écran pour obtenir les coordonnées d'écran 2D du nœud et ensuite couper l'image. J'ai trouvé cette méthode : renderer.projectPoint(node.position)
mais ça ne m'a pas aidé. Il peut même renvoyer des valeurs négatives lorsque l'image entière est sur l'écran
Est-ce que je le fais de la bonne manière ? Toute aide serait très appréciée .