如何在 iOS 11 中使用 Scenekit - ARKit 获取子节点位置?

How to get Child Nodes position using Scenekit - ARKit in iOS 11?

我正在开发基于 AR 的应用程序。我以 https://docs-assets.developer.apple.com/published/c5ad3d23f4/Handling3DInteractionandUIControlsinAugmentedReality.zip 为例。我正在尝试在具有相同文本描述的 3D 对象的每个子节点上实现覆盖。

为此,我试图获取每个子节点的位置。例如,如果我们在苹果样本中使用椅子对象,当我查看 Xcode 场景编辑器时,所有子节点都放置在相同位置。在这种情况下如何获得子节点的中心位置?例如,如果我必须得到大约。椅子腿的位置,怎么做?

一个节点的位置总是相对于另一个节点,至少是场景的根节点。要获取子节点相对于根节点的位置(即世界中的位置 space),您可以使用 convertPosition to: rootNode。要获取子节点相对于父节点的位置,您可以将该位置转换为父节点的 space.

https://developer.apple.com/documentation/scenekit/scnnode/1407990-convertposition

获得世界 space 坐标后,您可以使用 projectPoint 将 3D 位置转换为 2D 屏幕坐标: https://developer.apple.com/documentation/scenekit/scnscenerenderer/1524089-projectpoint

如果椅子腿的支点不在腿的中心,位置也不会在它的中心。在这种情况下,要获得中心,请使用节点边界框​​的最小值和最大值的平均值(请参阅 SCNBoundingVolume),或者简单地使用 2D 位置中的偏移量进行叠加。