ARKit位置节点如何基于地平线而不是相机方向?

时间:2019-06-13 20:33:56

标签: ios swift augmented-reality arkit sknode

当我使用ARKit(ARSKView)添加新节点时,该对象位于设备相机的基础上。因此,如果您的手机朝下或倾斜,则对象也会朝该方向移动。我该如何将对象放置在地平线上?

enter image description here

1 个答案:

答案 0 :(得分:1)

为此,在创建新节点之后,立即使用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,则在ARSKView中生成的2D子图形将始终面向相机。因此,如果摄影机绕着真实场景的确定点移动,则所有子画面都必须绕其轴心点旋转,并且仍然面向摄影机。

没有什么可以阻止您同时使用SceneKit和SpriteKit