如何在不改变世界坐标中的相对位置、大小和比例的情况下将 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,nodeChnodePrnt。它们的世界坐标是可用的,它们的相对位置/大小/角度应该保持不变。

我想通过使用- (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 作为子节点添加到父节点的主要内容,如果未能解决你的问题,请参考以下文章

如何在不改变其内容位置的情况下弹出整个 Div

如何在不改变位置的情况下调整同一行中的两个 React 日期选择器

VB中如何设置窗体内控件大小随窗体大小改变而改变?

如何在不改变坐标的情况下转换(旋转)svg文本元素?

opengl算法学习---图形几何变换

CSS DIV绝对定位 后 页面的大小改变 div层位置如何保持不变