2017-09-22 12 views
-1

J'ai un UIView au milieu de l'écran, 100x100 dans ce cas, et il devrait fonctionner comme une ligne directrice «cible» pour l'utilisateur. Lorsque l'utilisateur appuie sur le bouton Ajouter, un SCNBox doit être ajouté au monde exactement au même endroit, avec la largeur/hauteur/échelle/distance/rotation correspondant à la taille et à la position de UIView sur l'écran.SceneKit/ARKit: mapper la forme de l'écran en objet 3D

This image peut aider à comprendre ce que je veux dire.

La taille de UIView peut varier, mais elle sera toujours rectangulaire et centrée sur l'écran. Le modèle 3D correspondant peut également varier. Dans ce cas, un carré UIView sera mappé à une boîte, mais plus tard, le même carré UIView peut être mappé dans un cylindre avec le diamètre (largeur) et la hauteur correspondants.

Des idées comment je peux réaliser quelque chose comme ça?

J'ai essayé la démolition UIView et de placer la boîte comme l'espace réservé, comme un enfant de la sceneView.pointOfView, puis en convertissant sa position/mère au rootNode, sans chance.

Merci!

Répondre

0

Obtenez la position centrale de l'UIView dans sa vue parente et utilisez la méthode unprojectPoint de SCNRenderer pour la convertir en coordonnées 3D dans la scène, pour obtenir la position où le pbject 3D doit être placé. Vous devrez implémenter des moyens pour déterminer la valeur z.

Évidemment, la distance de l'objet déterminera sa taille à l'écran mais si vous voulez aussi mettre à l'échelle l'objet, vous pouvez utiliser l'inverse du niveau de zoom de votre caméra comme échelle. Avec le niveau de zoom, je veux dire vos propres moyens de zoom (par exemple, rapprocher l'appareil photo d'une distance par défaut créerait des modèles à plus petite échelle). Si UIView change de taille, vous pouvez en plus ou à la place du point central dissocier individuellement tous ses coins de l'espace 3D, mais il peut être plus facile de convertir l'échelle de l'uiview à l'échelle du nœud 3D. Par exemple, si vous connaissez la taille maximale de UIView, vous pouvez exprimer une vue plus petite en pourcentage de sa taille maximale et utiliser le même pourcentage pour mettre à l'échelle l'objet.

Vous avez également mentionné la rotation de l'objet devrait correspondre à l'UIView. Je suppose que cela signifie que vous voulez que l'objet fasse face à la caméra. Pour cela, vous pouvez appliquer une rotation à l'objet en fonction de la propriété .transform du noeud pointOfView.