【问题标题】:ARKit how position nodes base on horizon and not the camera orientation?ARKit如何根据地平线而不是相机方向定位节点?
【发布时间】:2019-06-13 20:33:56
【问题描述】:

当我使用 ARKit (ARSKView) 添加一个新节点时,该对象基于设备摄像头定位。因此,如果您的手机朝下或倾斜,物体也会朝那个方向。我怎样才能将对象基础放置在地平线上?

【问题讨论】:

    标签: ios swift augmented-reality arkit sknode


    【解决方案1】:

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

    var worldOrientation: SCNQuaternion { get set }
    

    这个四元数隔离了节点worldTransform 矩阵的旋转方面,这又是节点从局部空间到场景世界坐标空间的变换的转换。即表示节点与场景的rootNode之间的轴和旋转角度的差异。

    let worldOrientation = sceneView.scene.rootNode.worldOrientation
    
    yourNode.rotation = worldOrientation    /*  X, Y, Z, W components  */
    

    附注(当你更新你的问题时)

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

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

    【讨论】:

    • 您好 ARGeo,感谢您的回答。我实际上使用的是 ARSKView 而不是 ARSCNView 所以我没有场景属性。
    • 我目前使用 SpriteKit,因为我希望对象始终面向相机并且我希望对象是 2D 的。我尝试使用 SceneKit 并在移动相机时旋转节点,但看起来不太好。使用我当前的代码,我只需要修复节点的初始位置。
    • SpriteKit 在 3D 设置方面非常有限。如果您使用 SceneKit 框架,请尝试利用 SCNBillboardConstraint,它会自动调整节点的方向,使其局部 z 轴始终指向它所申请节点的 pointOfViewstackoverflow.com/questions/49194597/…
    猜你喜欢
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 2018-08-23
    • 2014-11-03
    • 2019-06-07
    • 1970-01-01
    相关资源
    最近更新 更多