我对ARkit有问题,我使用arworld跟踪配置,当我有一个SCNNode距离我一米远时,当我使用Iphone X并移动到SCNNode时,我相机SCNNode的Z位置会更新,我知道我离节点更近,但对于其他Iphone(Iphone 8),我没有得到Z位置的更新。
还有GPS,即使有kCLLocationAccuracyBestForNavigation,我也没有准确度。
我怎么知道我离SCNNode更近??谢谢
最佳答案
在ViewController中实现ARSCNViewDelegate
,它将在每帧调用一次renderer:updateAtTime
回调。
在这个函数中,您可以获得相机相对于现实世界的位置,调用sceneView.session.currentFrame.camera.transform
,这是一个simd_float4x4
。您可以使用transform.columns.3
访问相机的当前位置,并从中查看x、y、z字段。利用这些坐标,你可以计算距离,比如用这些函数计算欧几里德距离
func distanceTravelled(xDist:Float, yDist:Float, zDist:Float) -> Float{
return sqrt((xDist*xDist)+(yDist*yDist)+(zDist*zDist))
}
func distanceTravelled(between v1:SCNVector3,and v2:SCNVector3) -> Float{
let xDist = v1.x - v2.x
let yDist = v1.y - v2.y
let zDist = v1.z - v2.z
return distanceTravelled(xDist: xDist, yDist: yDist, zDist: zDist)
}
请记住将节点的坐标转换为世界坐标->
node.worldPosition
,其中node的实例为SCNNode
关于ios - iOS ARKit Swift,当我移动时如何获得我和SCNNode之间的距离,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48682292/