Как получить положение дочерних узлов, используя Scenekit - ARKit в iOS 11?
Я работаю над приложением на основе AR. В качестве примера я использую https://docs-assets.developer.apple.com/published/c5ad3d23f4/Handling3DInteractionandUIControlsinAugmentedReality.zip. Я пытаюсь реализовать наложение на каждый дочерний узел трехмерного объекта с текстовым описанием того же самого.
Для этого я попытался получить положение каждого дочернего узла. Например, если мы возьмем объект стула в образце яблока, когда я смотрю в редактор сцены Xcode, все дочерние узлы располагаются в одинаковом положении. Как получить центральную позицию дочернего узла в этом случае? Например, если мне нужно получить ок. положение ног стула, как это сделать?
1 ответ
Положение узла всегда относительно другого узла, по крайней мере, rootNode сцены. Чтобы получить позицию дочернего узла относительно корневого узла (то есть положение в мировом пространстве), вы можете использовать convertPosition to: rootNode. Чтобы получить позицию дочернего узла относительно родителя, вы можете преобразовать позицию в пространство родительского узла.
https://developer.apple.com/documentation/scenekit/scnnode/1407990-convertposition
После того, как вы получите координаты мирового пространства, вы можете использовать projectPoint для преобразования 3D-положения в 2D-координаты экрана: https://developer.apple.com/documentation/scenekit/scnscenerenderer/1524089-projectpoint
Если шарнир ножки стула не расположен в центре ножек, положение также не будет в его центре. В этом случае, чтобы получить центр, используйте среднее значение минимального и максимального значений ограничивающего прямоугольника узлов (см. SCNBoundingVolume) или просто используйте смещение в 2D-позиции для наложения.