将嵌套的 SCNNode 位置转换为屏幕中的 CGPoint space

Converting a nested SCNNode position to a CGPoint in screen space

我正在尝试将嵌套 SCNNode 的 3d 位置转换为 x、y (CGPoint) 坐标(用于在对象上叠加视图)。

我的 SCNNode 结构如下:

      +-----------+
      | Root node |
      +-----+-----+
            |
            |
       +----+---+
    +--+ Node A +--+
    |  +--------+  |
    |              |
    |              |
    |              |
+---+----+    +----+---+
| Node B |    | Node C |
+--------+    +--------+

我想获取屏幕space NodeB 的二维位置。我知道 convertPosition: and projectPoint: 方法,但我认为我没有正确使用它们。

有什么指点吗?

编辑:

目前正在尝试这样的事情:

SCNVector3 rootPosition = [[[[self view3D] scene] rootNode] convertPosition:[nodeB position] fromNode:nodeB];
SCNVector3 projectedPoint = [[self view3D] projectPoint:rootPosition];
NSLog(@"x %f y %f z %f", projectedPoint.x, projectedPoint.y, projectedPoint.z);

生成的 x、y、z 偏离得很远(有时是负数,这在屏幕上没有意义 space,因为对象清晰可见)。

NodeB 的位置是根据NodeA 的坐标系指定的。所以我相信你想要

rootPosition = [rootNode convertPosition:nodeB.position fromNode:nodeA]

swift4:

nodeAchildPosition = scnScene.rootNode.convertPosition(nodeA.position, from: nodeAchild)