SCNNode枢轴位置

时间:2018-11-30 03:55:03

标签: swift rotation pivot scenekit scnnode

假设我有2个SCNNodes节点1和节点2。

我希望node1的位置为node1.position = SCNVector3(0, 0, 0)

我希望node2的位置为node2.position = SCNVector3(0, 0, 1)

现在,我希望node2围绕node1旋转。因此,我尝试这样做,node2.pivot = self.phone.pivot = SCNMatrix4MakeTranslation(0, 0, -1)

这提供了它围绕node1旋转的位置,因此,如果我将node2旋转Pi / 2,则它位于节点的顶部,即,如果我旋转node1.rotate(Double.pi/2, 0, 0),它实际上位于node1的顶部。

我如何在ndoe2围绕node1旋转的地方得到它?

编辑1:

self.container = SCNNode()
self.container.position = SCNVector3(0, 0, 0)

self.node2 = SCNNode(geometry: geom2)
self.node2.position = SCNVector3(0, 0, 1)
self.container.addChildNode(self.node2)

let constraint = SCNLookAtConstraint(target: self.node2)
constraint.isGimbalLockEnabled = false

self.node1 = SCNNode(geometry: geom)
self.node1.position = SCNVector(0, 0, 0)
self.node1.constraints = [constraint]

Node1永不移动,因为node2永不移动。也就是说,由于容器是唯一旋转的节点,因此node2始终位于位置(0, 0, 1)上。

1 个答案:

答案 0 :(得分:1)

如果您根本不想处理pivot元素,请使用节点层次结构。

类似的事情应该起作用

- node1
|
| - rotation center
  | - node 2

然后旋转旋转中心,而不是直接旋转节点2。由于节点始终围绕其坐标中心旋转,并且节点的坐标空间始终相对于其父节点,因此效果很好。