ARKit, как расположение узлов базируется на горизонте, а не на ориентации камеры? - PullRequest
1 голос
/ 13 июня 2019

Когда я добавляю новый узел с помощью ARKit (ARSKView), объект располагается на базе камеры устройства.Поэтому, если ваш телефон направлен вниз или наклонен, объект также будет в этом направлении.Как я могу вместо этого разместить базу объекта на горизонте?

enter image description here

1 Ответ

1 голос
/ 14 июня 2019

Для этого сразу после создания нового узла используйте свойство экземпляра worldOrientation, которое управляет ориентацией узла относительно мирового координатного пространства сцены.

var worldOrientation: SCNQuaternion { get set }

Этот кватернион изолирует вращательный аспект матрицы worldTransform узла, который, в свою очередь, является преобразованием преобразования узла из локального пространства в мировое координатное пространство сцены. То есть он выражает разницу в оси и угле поворота между узлом и rootNode.

сцены.
let worldOrientation = sceneView.scene.rootNode.worldOrientation

yourNode.rotation = worldOrientation    /*  X, Y, Z, W components  */

P.S. (как вы обновили свой вопрос) :

Если вы используете SpriteKit , 2D-спрайты, которые вы порождаете в ARSKView, всегда обращены к камере. Таким образом, если камера перемещается вокруг определенной точки реальной сцены, все спрайты должны вращаться вокруг своей точки поворота, все еще лицом к камере.

Ничто не может помешать вам использовать SceneKit и SpriteKit вместе .

...