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