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

Ios 如何在不更改世界坐标中的相对位置、大小和比例的情况下将SCNNode作为子节点添加到父节点,ios,objective-c,scenekit,arkit,scnnode,Ios,Objective C,Scenekit,Arkit,Scnnode,我有两个SCNNodes,nodeCh和nodepnt。它们的世界坐标可用,它们的相对位置/大小/角度应保持不变 我想使用-(void)addChildNode:(SCNNode)方法将nodeCh作为子节点添加到nodepnt。为了做到这一点,我应该根据nodepnt的相对位置/比例/旋转来转换nodeCh的世界坐标/大小/角度,这样相对位置/比例/大小与将两个节点作为子节点添加到scene.rootNode时的情况相比不会改变 显然,我必须使用一些变换操作符的组合。目前我使用的以下行工作不正

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

我想使用
-(void)addChildNode:(SCNNode)
方法将
nodeCh
作为子节点添加到
nodepnt
。为了做到这一点,我应该根据
nodepnt
的相对位置/比例/旋转来转换
nodeCh
的世界坐标/大小/角度,这样相对位置/比例/大小与将两个节点作为子节点添加到
scene.rootNode
时的情况相比不会改变

显然,我必须使用一些变换操作符的组合。目前我使用的以下行工作不正确:

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

nodeChld.transform = transform;

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

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


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

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


这里有一个受SpriteKit启发的快速助手方法

Swift 5.2

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

这里有一个受SpriteKit启发的快速助手方法

Swift 5.2

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

thx,那有帮助,好像我没能把2和2放在一起thx,那有帮助,好像我没能把2和2放在一起