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

时间:2015-12-04 14:11:19

标签: ios 3d scenekit scnnode

我正在尝试将嵌套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是偏离的(有时是负的,这在屏幕空间中没有意义,因为对象明显在视图中)。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

swift4 上:

 //   ✔️                 ✔️
 //                    
   [0, 1, 1, 1, 1, 1, 1, 1]
 //⬆️