Ios ARKit如何基于地平线而不是摄影机方向定位节点?

Ios ARKit如何基于地平线而不是摄影机方向定位节点?,ios,swift,augmented-reality,arkit,sknode,Ios,Swift,Augmented Reality,Arkit,Sknode,当我使用ARKit(ARSKView)添加一个新节点时,对象是基于设备摄影机定位的。因此,如果你的手机朝下或倾斜,物体也会朝这个方向。如何将对象放置在地平线上 为此,在创建新节点后,立即使用worldOrientation实例属性来控制节点相对于场景世界坐标空间的方向 var worldOrientation: SCNQuaternion { get set } 此四元数隔离了节点的世界变换矩阵的旋转方向,而这又是节点变换从局部空间到场景世界坐标空间的转换。也就是说,它表示节点和场景的root

当我使用ARKit(ARSKView)添加一个新节点时,对象是基于设备摄影机定位的。因此,如果你的手机朝下或倾斜,物体也会朝这个方向。如何将对象放置在地平线上


为此,在创建新节点后,立即使用
worldOrientation
实例属性来控制节点相对于场景世界坐标空间的方向

var worldOrientation: SCNQuaternion { get set }
此四元数隔离了节点的
世界变换
矩阵的旋转方向,而这又是节点变换从局部空间到场景世界坐标空间的转换。也就是说,它表示节点和场景的
rootNode
之间的轴和旋转角度的差异

p.S.(当您更新您的问题时)

如果使用,则在ARSKView中生成的2D精灵始终面向摄影机。因此,如果摄影机围绕真实场景的某个确定点移动,则所有精灵必须围绕其轴心点旋转,仍然面向摄影机


没有任何东西可以阻止您同时使用SceneKit和SpriteKit

嗨,ARGeo,谢谢您的回答。我实际上使用的是ARSKView,而不是ARSKView,因此我没有“场景”属性。我目前使用SpriteKit是因为我希望对象始终面向摄影机,并且希望对象是二维的。我尝试使用SceneKit并在移动相机时旋转节点,但效果不佳。在我当前的代码中,我只需要确定节点的初始位置。SpriteKit在3D设置中非常有限。如果使用SceneKit framework,请尝试利用
SCNBillboardConstraint
自动调整节点的方向,使其局部z轴始终指向其应用的节点的
视点。
let worldOrientation = sceneView.scene.rootNode.worldOrientation

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