4

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

我的 SCNNode 结构如下所示:

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

我想获得 NodeB 的屏幕空间 2d 位置。我知道convertPosition: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 相差很远(有时是负数,这在屏幕空间中没有意义,因为对象清晰可见)。

4

2 回答 2

2

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

rootPosition = [rootNode convertPosition:nodeB.position fromNode:nodeA]
于 2015-12-04T21:54:26.733 回答
2

swift4 上

nodeAchildPosition = scnScene.rootNode.convertPosition(nodeA.position, from: nodeAchild)
于 2019-02-03T17:55:20.747 回答