为什么SCNNode的worldPosition属性不匹配其实际位置?

时间:2019-04-02 22:11:15

标签: swift scenekit

我有一个带有多个子节点的SCNNode,我希望其中一个成为该组的枢纽,不仅涉及位置,还涉及旋转和比例。更改枢轴时,视觉上都不应移动。

我想到了这个

/// Cube is a child of group.
/// First move (+scale and rotate) to the group
/// to accomodate for the shifting in the next step.
group.setWorldTransform(cube.worldTransform)
/// Then adjust the pivot.
group.pivot = cube.transform

虽然结果在视觉上是预期的,但是如果该组是例如,则子节点的worldPosition属性(我需要进行进一步的计算)显示出奇怪的行为。旋转: Weird displacement of worldPosition 如您所见,当球体在视觉上位于(0,0,0)时,其worldPosition属性的作用就像旋转被某种程度撤消一样。


编辑:我找到了一个用例的解决方法,该方法是将组的内容简单地包装到中间节点中,然后对其应用反向透视转换。

group.setWorldTransform(cube.worldTransform)
content.transform = SCNMatrix4Invert(cube.transform)

现在worldPosition符合预期。但是,这并不能回答为什么更改枢轴似乎会破坏worldPosition的问题。

0 个答案:

没有答案