【问题标题】:Move sub SCNNode to rootNode while retaining position在保留位置的同时将子 SCNNode 移动到 rootNode
【发布时间】:2015-07-12 17:54:55
【问题描述】:

我无法保留已删除并添加到 rootNode 的子节点的位置。父节点和子节点都有一个 pivot 翻译,我认为这是问题的一部分。我尝试将 transform 属性设置为 worldtransform 属性,然后删除该节点并将其重新附加到根。但位置略有移动。我已经尝试删除枢轴变换,将 worldtransform 添加到根节点并恢复 pivot。有时候我想我已经解决了,然后一个特定的节点在重新附加为根节点时会跳转。

似乎子节点和父节点的pivot影响了worldtransform。因此,将父节点排除在等式之外似乎会改变最终位置。

有没有一种方法可以将子节点添加到根节点,同时保持其物理位置/旋转。

任何指针将不胜感激。

【问题讨论】:

    标签: ios8 scenekit scnnode


    【解决方案1】:

    没有 API 可以做到这一点。但 SceneKit 公开了转换实用程序,例如 -[SCNNode convertTransform:toNode:]-[SCNNode convertPosition:toNode:]

    以下可能是您想要的:

    node.transform = [node.parentNode convertTranform:node.transform toNode:nil];
    [node removeFromParentNode];
    [scene.rootNode addChildNode:node];
    

    【讨论】:

    • 感谢您的回答,仅当父节点枢轴为 SCNMatrix4Identity 时才有效。如果父节点有枢轴平移,则重新附加的节点会移动位置。
    • 如果节点在多个对象中根节点->子一->子2->要转换为根的节点?
    【解决方案2】:

    我也不明白为什么 worldTransforms 或 worldPosition 会包含作为节点内部信息的枢轴。

    无论如何,我的解决方案:

    MoveNode.transform = [newParentNode convertTransform:MoveNode.transform fromNode:[MoveNode parentNode]];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 2015-03-28
      • 2011-11-05
      • 1970-01-01
      • 2020-03-27
      相关资源
      最近更新 更多