IOS ARKit Swift 当我移动时如何获得我和 SCNNode 之间的距离
IOS ARKit Swift how can I get distance between me and a SCNNode when I move
我有一个 ARkit 问题,我使用 ARWorldTrackingConfiguration,当我有一个 SCNNode 离我一米远时,当我使用 Iphone X 并移动到 SCNNode 时,我的相机 SCNNode 的 Z 位置更新我知道我离节点更近了,但是对于其他 Iphones (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)
}
记得将节点的坐标转换为worldCoordinates -> node.worldPosition
with node an instance of SCNNode
我有一个 ARkit 问题,我使用 ARWorldTrackingConfiguration,当我有一个 SCNNode 离我一米远时,当我使用 Iphone X 并移动到 SCNNode 时,我的相机 SCNNode 的 Z 位置更新我知道我离节点更近了,但是对于其他 Iphones (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)
}
记得将节点的坐标转换为worldCoordinates -> node.worldPosition
with node an instance of SCNNode