如何在不更改世界坐标中相对位置,大小和比例的情况下将SCNNode作为子项添加到父项

时间:2018-08-21 16:23:37

标签: ios objective-c scenekit arkit scnnode

我有两个SCNNode,nodeChnodePrnt。它们的世界坐标可用,并且它们的相对位置/大小/角度应保持不变。

我想通过使用nodeCh方法将nodePrnt作为孩子添加到- (void)addChildNode:(SCNNode)中。为此,我应该根据nodeCh的相对位置/比例/旋转来翻译nodePrnt的世界坐标/尺寸/角度,以便相对位置/比例/尺寸不会发生变化。将两个节点都作为子节点添加到scene.rootNode的情况。

很显然,我必须使用一些变换运算符的组合。目前,我正在使用以下行,这些行无法正常工作:

SCNMatrix4 transform
    = [self.nodePrnt convertTransform:SCNMatrix4Identity
                              fromNode:nil];

nodeChld.transform = transform;

2 个答案:

答案 0 :(得分:2)

转换实用程序确实是您需要使用的。 就您而言:

nodeCh.transform = [nodePrnt convertTransform:SCNMatrix4Identity fromNode:nodeCh];

nodeCh.transform = [nodeCh convertTransform:SCNMatrix4Identity toNode:nodePrnt];

答案 1 :(得分:0)

这是一个受SpriteKit启发的快速帮助方法。

Swift 5.2

extension SCNNode {
    func move(toParent parent: SCNNode) {
        let convertedTransform = convertTransform(SCNMatrix4Identity, to: parent)
        removeFromParentNode()
        transform = convertedTransform
        parent.addChildNode(self)
    }
}