ios - ARSCNView 的根节点的 "heading"与设备标题不匹配

标签 ios scenekit arkit scnscene arscnview

我想要一个添加到场景中的节点指向北方。我从 Core Location 获取航向数据,因此它表示设备在我的场景创建时当前所面对的方向(因此我的根节点所面向的方向),然后我将航向添加到我的新 sceneNode' 中。 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 中正确地更正它。 .

最佳答案

更改 session 配置的 worldAlignment.gravityAndHeading

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

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

关于ios - ARSCNView 的根节点的 "heading"与设备标题不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44967872/

相关文章:

ios - 核心数据,在实体上设置关系会导致获取结果 Controller 委托(delegate)回调出错

ios - AVCaptureSession CMSampleBuffer 问题

ios - 如何从 SceneKit 中的 Collada 文件中分离出多个动画

swift - 麻烦子类化 SCNScene

swift - Reality Composer - ar hittest 不起作用?

iphone - 为什么我必须分配一个对象并在 Obj-C 中设置我的实例变量 = 该对象?

ios - 在 IOS 的 UITableView 中选择一个单元格时,表格单元格边框可见

ios - 从 .scn 文件加载后无法在 ARKit 场景中查看几何体

swift - 在 SceneKit 中使用不同的节点运行 SCNActions 序列

ios - ARKit 在最新的 iOS 设备上会更好地工作吗?