在 SceneKit 中将全局节点位置转移到本地节点位置

Transfer global to local node position in SceneKit

到目前为止,我想出了如何在 Swift (worldTransform) 中将局部节点位置转换为全局值。

我的问题是:如何将它反过来转换? (由于旋转,子节点的 x/y/z 轴可能会改变)。

我知道它与convertPosition有关,但我找不到任何帮助我理解它的参考资料。

这就是我想要做的: 节点 A 是 rootNode 的子节点,位置为 A。 节点 B 是 rootNode 的子节点,具有位置 B 和旋转 B。 节点 B1 是节点 B 的子节点,其内部有局部坐标。 我想将节点 B1 移动到节点 A 的位置并替换它。

如何将节点 A 的坐标转换为节点 B 的本地系统?

干杯

你必须在 nodeB1 的父坐标系中表达新的变换,并从

  1. nodeA 的父坐标系

    nodeB1.transform = [nodeB1.parentNode convertTransform:nodeA.transform fromNode:nodeA.parentNode];

  2. 或世界坐标系

    nodeB1.transform = [nodeB1.parentNode convertTransform:nodeA.worldTransform fromNode:nil];

当然可以把nodeB1.parentNode换成nodeB,此时nodeA的父节点就是根节点