Ios 如何在不更改世界坐标中的相对位置、大小和比例的情况下将SCNNode作为子节点添加到父节点
我有两个SCNNodes,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时的情况相比不会改变 显然,我必须使用一些变换操作符的组合。目前我使用的以下行工作不正
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放在一起