我对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/

10-12 00:16