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



我想要一个节点,我将其添加到我的场景中以指向北方。我从核心位置获取航向数据,因此表示设备在创建场景时当前朝向的方向(以及我的根节点朝向的方向(,然后将航向添加到我的新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内正确更正它。

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

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

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

最新更新