我想要一个添加到场景中的节点指向北方。我从 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/