Изменить исходную точку SCNNode без изменения точки поворота - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь изменить исходную точку моего узла с того, чтобы он находился в центре узла, чтобы он находился в «верхнем левом углу» моего узла (я использую ортографический проект и пытаюсь повторно реализовать 2D «виды») используя узлы, поэтому я отображаю только одну грань, например плоскости).

В соответствии с SCNNode документами изменение точки pivot узла позволяет изменить его источник для подузлов. Тем не менее, также меняет источник для подузлов вращения и масштабирования, что я не хочу делать. Я хочу, чтобы мое начало координат было вверху слева, но я хочу иметь возможность вращать / масштабировать мой узел относительно его центральной точки.

Если я помещу подузел в (0, 0, 0), я хочу, чтобы он появился в верхнем левом углу моего узла. Есть ли способ сделать это?

1 Ответ

0 голосов
/ 29 апреля 2019

Используйте вспомогательное emptyNode только для установки смещения оси, но вращение и масштаб будут происходить вокруг геометрического центра с использованием другого узла.

let sphereGeo = SCNSphere(radius: 2)
sphereGeo.segmentCount = 4
sphereGeo.materials.first?.diffuse.contents = NSColor.lightGray
let sphereNode = SCNNode(geometry: sphereGeo)

let emptyNode = SCNNode()
scene.rootNode.addChildNode(emptyNode)
emptyNode.addChildNode(sphereNode)

emptyNode.simdPivot.columns.3.x = 5

let action = SCNAction.repeatForever(SCNAction.rotate(by: .pi, 
                                                  around: SCNVector3(0,1,0), 
                                                duration: 1))
sphereNode.runAction(action)
...