Comment est-il possible de mettre en œuvre une détection de plan vertical (c'est-à-dire pour les murs) ?
let configuration = ARWorldTrackingSessionConfiguration()
configuration.planeDetection = .horizontal //TODO
Comment est-il possible de mettre en œuvre une détection de plan vertical (c'est-à-dire pour les murs) ?
let configuration = ARWorldTrackingSessionConfiguration()
configuration.planeDetection = .horizontal //TODO
Modifier : Cela est désormais pris en charge à partir de ARKit 1.5 (iOS 11.3). Il suffit d'utiliser .vertical
. J'ai laissé le message précédent ci-dessous à des fins historiques.
La détection de plan vertical n'est pas (encore) une fonctionnalité existante dans ARKit. Le .horizontal
suggère que cette fonctionnalité pourrait être en cours d'élaboration et pourrait être ajoutée à l'avenir. S'il s'agissait simplement d'une valeur booléenne, cela indiquerait que c'est définitif.
Cette suspicion a été confirmée par une conversation que j'ai eue avec un ingénieur d'Apple à la WWDC17.
On pourrait argumenter que la création d'une implementation pour cela serait difficile car il y a infiniment plus d'orientations pour un plan vertical que pour un plan horizontal, mais comme l'a dit rodamn, ce n'est probablement pas le cas.
D'après le commentaire de rodamn : À son niveau le plus simple, un plan est défini par trois points coplanaires. Vous avez un candidat de surface une fois que des caractéristiques coplanaires suffisamment détectées le long d'une surface (verticale, horizontale, ou à n'importe quel angle arbitraire). C'est juste que la normale pour les horizontaux sera le long de l'axe haut/bas, tandis que les normales pour les verticaux seront parallèles au plan au sol. Le défi est que le placoplâtre simple tend à générer peu de caractéristiques visuelles, et que les murs simples peuvent souvent ne pas être détectés. Je soupçonne fortement que c'est pourquoi la fonction .vertical
n'est pas encore sortie.
Cependant, il y a un contre-argument à cela. Voir les commentaires de rickster pour plus d'informations.
Hey @Zack, est-ce que cet ingénieur t'a donné un indice sur quand cette fonctionnalité pourrait être ajoutée ? J'espère que ce n'est pas quelque chose qu'ils retardent jusqu'à iOS 12.
Non @T.Steele, je n'ai pas eu d'indication, mais je ne pense pas qu'ils attendraient aussi longtemps pour le mettre en œuvre. Après tout, cela ne semble pas si difficile à mettre en place.
Je pense que vous vouliez dire "n'aurait pas l'air si difficile", mais ce que vous avez écrit est probablement plus proche de la correction. Un plan horizontal ne peut avoir qu'une seule orientation possible, mais il existe une infinité de façons pour un plan d'être "vertical"...
Le support de ceci arrive avec iOS 11.3:
static var vertical: ARWorldTrackingConfiguration.PlaneDetection
La session détecte les surfaces qui sont parallèles à la gravité (peu importe l'orientation).
https://developer.apple.com/documentation/arkit/arworldtrackingconfiguration.planedetection https://developer.apple.com/documentation/arkit/arworldtrackingconfiguration.planedetection/2867271-vertical
Apple a publié iOS 11.3 qui comprendra diverses mises à jour pour la RA, notamment ARKit 1.5. Dans cette mise à jour, ARKit inclut la capacité pour ARKit de reconnaître et placer des objets virtuels sur des surfaces verticales comme un mur ou une porte.
Le support pour la verticale est désormais pris en charge dans ARWorldTrackingConfiguration
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = [.horizontal, .vertical]
sceneView.session.run(configuration)
J'ai fait cela avec Unity, mais j'ai besoin de faire mes mathématiques.
J'utilise un échantillonnage aléatoire consensuel pour détecter un plan vertical à partir du nuage de points retourné par ARkit. C'est comme avoir une boucle qui choisit aléatoirement 3 points pour créer un plan et compte les points qui correspondent, pour voir quelle tentative est la meilleure.
Cela fonctionne. Mais parce que ARkit ne peut pas retourner beaucoup de points lorsque le mur est d'une couleur unie. Donc, cela ne fonctionne pas dans de nombreuses situations.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.