我正在尝试将嵌套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是偏离的(有时是负的,这在屏幕空间中没有意义,因为对象明显在视图中)。
答案 0 :(得分:1)
NodeB的位置是根据NodeA的坐标系指定的。所以我相信你想要
rootPosition = [rootNode convertPosition:nodeB.position fromNode:nodeA]
答案 1 :(得分:0)
在 swift4 上:
// ✔️ ✔️
//
[0, 1, 1, 1, 1, 1, 1, 1]
//⬆️