2014-11-06 62 views
5

我正在用SceneKit开发一个场景。我有一个子节点的主节点:如何在旋转后获取SceneKit中子节点的实际位置?

// Main node 
SCNNode* planet = [SCNNode node]; 
planet.geometry = [SCNSphere sphereWithRadius:2]; 
planet.position = SCNVector3Make(0, -3, 5); 
// sub-node 
SCNNode* satellite = [SCNNode node]; 
satellite.geometry = [SCNSphere sphereWithRadius:0.4]; 
satellite.position = SCNVector3Make(4, 0, 0); 
[planet addChildNode:satellite]; 
[scene.rootNode addChildNode:planet]; 

我使用NSTimer来制作一些动作和一些动画。在计时器事件中,我这样做:

planetRotation + = 0.1; planet.rotation = SCNVector4Make(0,1,0,planetRotation);

但是,如果我试图获得卫星节点的位置,我总是会得到相同的值。 我试图让positionnode知道卫星节点的真实位置,但没有任何变化。

当我更改父节点的旋转时,如何获得子节点的实际位置?

在此先感谢

回答

6

节点的位置在其父坐标系中表示。就像UIKIt/AppKit中的视图一样。如果您更改视图的框架,其子视图的框架不会更改。

你想要什么就是我们所说的子节点的世界变换(即它的变换在场景的根节点的坐标系中表示)。

你可以看看worldTransform-convertPosition:toNode:

3

节点的位置不会因物理而改变,这就是为什么你没有看到它的变化。您需要调用节点的presentationNode来获取节点在屏幕上的位置:

node.presentationNode.position