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

如何在iOS 11中使用Scenekit-ARKit获取子节点位置?,ios,scenekit,arkit,xcode9-beta,Ios,Scenekit,Arkit,Xcode9 Beta,我正在开发一个基于AR的应用程序。我用它作为例子。我试图在3D对象的每个子节点上实现覆盖,并使用相同的文本描述 为此,我尝试获取每个子节点的位置。例如,如果我们在苹果的示例中使用椅子对象,当我查看Xcode场景编辑器时,所有子节点都放置在相同的位置。在这种情况下,如何获取子节点的中心位置?例如,如果我必须获得椅子腿的大致位置,如何做到这一点?一个节点的位置总是相对于另一个节点,至少是场景的根节点。要获取子节点相对于根节点的位置(即世界空间中的位置),可以使用convertPosition To:

我正在开发一个基于AR的应用程序。我用它作为例子。我试图在3D对象的每个子节点上实现覆盖,并使用相同的文本描述


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

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

获取世界空间坐标后,可以使用projectPoint将三维位置转换为二维屏幕坐标:


如果椅子腿的枢轴不位于腿的中心,则该位置也不会位于其中心。在这种情况下,若要获得中心,请使用节点边界框的最小值和最大值的平均值(请参见SCNBoundingVolume),或者简单地在覆盖的2D位置使用偏移量。

是的,我确实相对于世界空间变换了位置,但所有子节点的位置仍然完全相同。当我查看Xcode场景编辑器时,我可以看到所有子节点的位置都是相同的。这将在何时发生?这是我使用的模型的错误吗?即使对于椅子模型,所有子节点的位置也保持不变。