首页 文章

iOS ARKit Swift,当我移动时如何获得我和 SCNNode 之间的距离

提问于
浏览
0

我的 ARkit 有问题,我使用的是 ARWorldTrackingConfiguration,当我的 SCNNode 离我一米远时,当我使用 Iphone X 移到 SCNNode 时,相机 SCNNode 的 Z 位置会更新,并且我知道我离节点,但使用其他 Iphone(Iphone 8)时,我没有更新到 Z 位置。

即使使用 kCLLocationAccuracyBestForNavigation,也没有 GPS 的精度。

我怎么知道我离 SCNNode 更近?谢谢

1 回答

  • 3

    在您的 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)
    }
    

    切记将节点的坐标转换为 worldCoordinates-> node.worldPosition,节点为SCNNode的实例

相关问题