在SceneKit/modelIO中测量三维对象文件上两点之间的距离并显示它们



我对IOS开发和Swift完全陌生。目前,我正在开发一款IOS应用程序,该应用程序涉及使用IPad的激光雷达传感器扫描房间,稍后当我加载3D Obj文件并触摸两个任意点时,应显示两点之间的长度。类似于3D扫描仪应用程序,Canvas应用程序。

到目前为止,我能够将网格数据导出到Obj文件中,并将其保存到设备中。我已经尝试了一段时间,但我认为在这一点上有点卡住了,因为我不知道如何进一步进行测量部分。

最终结果应该是这样的。

带有距离标签的导出obj文件

寻求任何指导/建议。

Scenekit使用米,只使用fyi。你可能需要在这个问题上进行缩放实验,我有点怀疑它是否会开箱即用。这假设您有节点来比较距离,否则就另当别论了。

您可以使用GLKVector3Distance,也可以自己滚动:

func distance3D(vector1: SCNVector3, vector2: SCNVector3) -> Float
{
let x: Float = (vector1.x - vector2.x) * (vector1.x - vector2.x)
let y: Float = (vector1.y - vector2.y) * (vector1.y - vector2.y)
let z: Float = (vector1.z - vector2.z) * (vector1.z - vector2.z)

let temp = x + y + z
return Float(sqrtf(Float(temp)))
}

或:

extension SCNVector3 {
func distance(to vector: SCNVector3) -> Float {
return simd_distance(simd_float3(self), simd_float3(vector))
}
}

最新更新