Это нормально для оси SCNNode, чтобы изменить положение узлов?

Я пытаюсь повернуть блок, установив его точку поворота на любой из углов, но кажется, что установка точки поворота фактически перемещает узел, сохраняя точку именно там, где она была...

например

SCNBox *box = [SCNBox boxWithWidth:1 height:2 length:1 chamferRadius:0];
SCNNode *node = [SCNNode nodeWithGeometry:box];

node.position = SCNVector3Make(0, 0, 0);
[self.scene.rootNode addChildNode:node];

node.pivot = SCNMatrix4MakeTranslation(0.5, -1, 0.5);

[node runAction:[SCNAction rotateByAngle:GLKMathDegreesToRadians(90) 
                              aroundAxis:SCNVector3Make(0, 0, 1) 
                                duration:2]];

С node.position, равным 0,0,0, и геометрией бокса 1, 2, 1, я бы вообразил, что этот блок находится на 1 единицу над полом... что он делает, если вы не установите опору,

На самом деле вопрос заключается в том, как бы вы установили положение поворота этого узла, не затрагивая его положение, поэтому, если бы я, например, нажал правую клавишу, он бы развернулся по оси z вокруг нижней правой точки, и если бы я Если нажать левую клавишу, она будет вращаться вокруг самой нижней левой точки, и то же самое для вверх и вниз, но на оси X.

1 ответ

Решение

pivot свойство SCNNode похож на anchorPoint из CALayer (см. Опорные точки влияют на геометрические манипуляции). Если вы хотите изменить pivot свойство не иметь никакого визуального эффекта, вам также придется изменить его transform (или же position) имущество.

Другие вопросы по тегам