我有一个带有多个子节点的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
属性(我需要进行进一步的计算)显示出奇怪的行为。旋转:
如您所见,当球体在视觉上位于(0,0,0)时,其worldPosition
属性的作用就像旋转被某种程度撤消一样。
编辑:我找到了一个用例的解决方法,该方法是将组的内容简单地包装到中间节点中,然后对其应用反向透视转换。
group.setWorldTransform(cube.worldTransform)
content.transform = SCNMatrix4Invert(cube.transform)
现在worldPosition
符合预期。但是,这并不能回答为什么更改枢轴似乎会破坏worldPosition
的问题。