Узлы SceneKit не меняют положение относительно корневого узла сцены

Я использую SceneKit с ARKit, и прямо сейчас у меня есть простое приложение, в котором я нажимаю на экран, и оно добавляет в мою сцену ARAnchor и SCNNode.

В какой-то момент мне захочется переместить всю сцену, поэтому я попытался изменить sceneView.scene.rootNode.position.x += 10, чтобы проверить это. Если я вызываю это на каком-либо конкретном узле, этот узел действительно перемещается соответствующим образом. Но вызывая это на rootNode, ничего не происходит, и я бы ожидал, что каждый дочерний узел (который является каждым узлом в сцене) будет двигаться вместе с ним.

Почему другие мои узлы не двигаются должным образом и что я могу сделать, чтобы это исправить? Или я неправильно об этом думаю?


person Andrew    schedule 29.06.2017    source источник


Ответы (1)


Согласно документации для SCNScene.rootNode:

Вы не должны изменять свойство transform корневого узла.

Корневой узел определяет начало мировой системы координат - все остальные измерения относятся к нему. Следовательно, не имеет смысла (и часто проблематично) изменять его положение, ориентацию, масштаб или любой другой аспект его преобразования.

Если вы хотите переместить все содержимое сцены SceneKit, создайте новый узел, содержащий все остальные, и измените преобразование этого узла. (Вы не можете сделать это для узлов, добавленных ARSCNView, потому что ARKit делает этих прямых дочерних узлов корневого узла, но весь смысл в их размещении в мировом пространстве.)

person rickster    schedule 30.06.2017