假设我有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)
上。
答案 0 :(得分:1)
如果您根本不想处理pivot
元素,请使用节点层次结构。
类似的事情应该起作用
- node1
|
| - rotation center
| - node 2
然后旋转旋转中心,而不是直接旋转节点2。由于节点始终围绕其坐标中心旋转,并且节点的坐标空间始终相对于其父节点,因此效果很好。