如何在不改变世界坐标中的相对位置、大小和比例的情况下将 SCNNode 作为子节点添加到父节点
Posted
技术标签:
【中文标题】如何在不改变世界坐标中的相对位置、大小和比例的情况下将 SCNNode 作为子节点添加到父节点【英文标题】:How to add SCNNode as a child to parent without changing relative position, size and scale in world coordinates 【发布时间】:2019-01-27 21:29:10 【问题描述】:我有两个 SCNNode,nodeCh
和 nodePrnt
。它们的世界坐标是可用的,它们的相对位置/大小/角度应该保持不变。
我想通过使用- (void)addChildNode:(SCNNode)
方法将nodeCh
添加到nodePrnt
作为一个孩子。为了做到这一点,我应该根据nodePrnt
的相对位置/比例/旋转来转换nodeCh
的世界坐标/大小/角度,这样相对位置/比例/大小不会与以下情况相比发生变化两个节点都作为子节点添加到scene.rootNode
。
显然,我必须使用一些转换运算符的组合。目前我正在使用以下无法正常工作的行:
SCNMatrix4 transform
= [self.nodePrnt convertTransform:SCNMatrix4Identity
fromNode:nil];
nodeChld.transform = transform;
【问题讨论】:
【参考方案1】:转换工具确实是您需要使用的。 在你的情况下:
nodeCh.transform = [nodePrnt convertTransform:SCNMatrix4Identity fromNode:nodeCh];
或
nodeCh.transform = [nodeCh convertTransform:SCNMatrix4Identity toNode:nodePrnt];
【讨论】:
谢谢,有帮助,好像我没能把两个和两个放在一起【参考方案2】:这是一个受 SpriteKit 启发的快速帮助方法。
Swift 5.2
extension SCNNode
func move(toParent parent: SCNNode)
let convertedTransform = convertTransform(SCNMatrix4Identity, to: parent)
removeFromParentNode()
transform = convertedTransform
parent.addChildNode(self)
【讨论】:
以上是关于如何在不改变世界坐标中的相对位置、大小和比例的情况下将 SCNNode 作为子节点添加到父节点的主要内容,如果未能解决你的问题,请参考以下文章