将嵌套的 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)
我正在尝试将嵌套 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)