2017-07-07 68 views
0

我想这是我添加到我的现场指向北方的一个节点相匹配。我从核心位置的航向数据,使代表的方向目前设备正面临着我的场景创建点(因此方向我根节点面),然后我的标题添加到我的新sceneNode'小号eulerAngles.y,旋转它,使其朝北。ARSCNView的根节点的“标题”不设备标题

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内适当纠正。

+1

什么[全球定位(https://developer.apple.com/documentation/arkit/arsessionconfiguration.worldalignment)您使用的会话配置? – rickster

+0

@rickster啊。是的,如果你想补充一点,那就是我正在寻找的东西。 – Andrew

回答

1

更改会话配置的worldAlignment.gravityAndHeading

对于默认的.gravity对齐,AR世界坐标系统点的x轴和z轴的位置没有绝对参考 - 它们的方向取决于会话启动时设备的初始方向。

随着.gravityAndHeading选项,X轴和Z轴对准罗盘方向,这样你就可以放心地相对定向内容罗盘方向。