Ios8 在保持位置的同时,将子SCNNode移动到rootNode

Ios8 在保持位置的同时,将子SCNNode移动到rootNode,ios8,scenekit,scnnode,Ios8,Scenekit,Scnnode,保留已删除并添加到根节点的子节点的位置时遇到问题。父节点和子节点都有轴心平移,我认为这是问题的一部分。我尝试将transform属性设置为worldtransform属性,然后删除节点并将其重新附着到根节点。但情况略有变化。我已经尝试删除透视变换,将worldtransform添加到根节点并恢复透视。有时我认为我已经解决了这个问题,然后当一个特定的节点作为根节点重新连接时会跳转 子节点和父节点的轴似乎会影响worldtransform。因此,将父节点从方程中去掉似乎会改变最终位置 是否有方法将子

保留已删除并添加到根节点的子节点的位置时遇到问题。父节点和子节点都有轴心平移,我认为这是问题的一部分。我尝试将transform属性设置为worldtransform属性,然后删除节点并将其重新附着到根节点。但情况略有变化。我已经尝试删除透视变换,将worldtransform添加到根节点并恢复透视。有时我认为我已经解决了这个问题,然后当一个特定的节点作为根节点重新连接时会跳转

子节点和父节点的轴似乎会影响worldtransform。因此,将父节点从方程中去掉似乎会改变最终位置

是否有方法将子节点添加到根节点,同时保持其物理位置/旋转


任何指点都将不胜感激

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

以下可能是您想要的:

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

我也不明白为什么worldTransforms或worldPosition合并了pivot,这是节点的内部信息

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

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

感谢您的回答,这仅在父节点透视为SCNMatrix4Identity时有效。如果父节点具有轴平移,则重新附着的节点将移动位置。