【问题标题】:ARSCNView's root node's "heading" doesn't match the device headingARSCNView 的根节点的“标题”与设备标题不匹配
【发布时间】:2017-12-11 13:55:55
【问题描述】:

我想要一个添加到场景中的节点指向北方。我从核心位置获取标题数据,这表示设备当前在我的场景创建点处所面对的方向(以及我的根节点所面对的方向),然后我将标题添加到我的新sceneNode's eulerAngles.y,旋转它使其面向北方。

func renderer(_ renderer: SCNSceneRenderer, didRenderScene scene: SCNScene, atTime time: TimeInterval) {
    if sceneNode == nil,
        let heading = self.locationManager.heading {
        sceneNode = SCNNode()
        sceneNode.eulerAngles.y += Float(heading).degreesToRadians
        sceneView.scene.rootNode.addChildNode(sceneNode)
    }
}

标题信息是正确的,因此旋转它这么多确实会旋转所需的量,假设标题与我的根节点所面对的方向相同。但是我发现我的根节点的方向并不等同于设备的方向,有时可能会非常偏离。所以这意味着标题与场景节点的“标题”相同的假设是不正确的,我需要能够知道它离标题有多远,所以我可以在我的 sceneNode 中正确纠正它.

【问题讨论】:

  • 您使用什么world alignment 进行会话配置?
  • @rickster 啊。是的,这就是我一直在寻找的,如果您想将其添加为答案。

标签: ios scenekit arkit scnscene arscnview


【解决方案1】:

将会话配置的 worldAlignment 更改为 .gravityAndHeading

使用默认的.gravity 对齐方式,AR 世界坐标系的 x 轴和 z 轴指向的位置没有绝对参考 - 它们的方向基于会话开始时设备的初始方向。

使用.gravityAndHeading 选项,x 和 z 轴与罗盘方向对齐,因此您可以安全地相对于罗盘方向确定内容的方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    相关资源
    最近更新 更多