SCNNode Pivot Location - PullRequest
       22

SCNNode Pivot Location

0 голосов
/ 30 ноября 2018

Допустим, у меня есть 2 SCNNodes node1 и node2.

Я хочу, чтобы node1 имел позицию node1.position = SCNVector3(0, 0, 0)

Я хочу, чтобы node2 имел позицию node2.position = SCNVector3(0, 0, 1)

Теперь я хочу, чтобы узел2 вращался вокруг узла1.Поэтому, я пытаюсь сделать, node2.pivot = self.phone.pivot = SCNMatrix4MakeTranslation(0, 0, -1).

Это обеспечивает его, где он вращается вокруг узла 1, так что, если я вращаю узел 2 на Pi / 2, то это на вершине узла, то есть, если яповерните node1.rotate(Double.pi/2, 0, 0) это на самом деле на вершине узла 1.

Как я могу получить его, когда ndoe2 поворачивается вокруг узла 1?

Edit1:

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]

Узел 1 никогда не перемещается, так как узел 2 никогда не перемещается.Т.е., node2 ВСЕГДА будет в позиции (0, 0, 1), поскольку контейнер - это единственное вращающееся устройство.

1 Ответ

0 голосов
/ 30 ноября 2018

Если вы вообще не хотите иметь дело с pivot элементами, используйте иерархию узлов.

Как-то так должно работать

- node1
|
| - rotation center
  | - node 2

Затем поверните центр вращения, а не узел 2 напрямую.Поскольку узел всегда вращается вокруг своего координатного центра, а координатное пространство узла всегда относительно его родителя, это прекрасно работает.

...