在 SceneKit/modelIO 中测量 3D-Obj 文件上两点之间的距离并显示它们

Posted

技术标签:

【中文标题】在 SceneKit/modelIO 中测量 3D-Obj 文件上两点之间的距离并显示它们【英文标题】:Measuring the distance between two points on a 3D-Obj file in SceneKit/modelIO and displaying them 【发布时间】:2021-08-25 14:53:24 【问题描述】:

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

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

最终结果应该是这样的。

an exported obj file with the distance label

寻找任何指导/建议。

【问题讨论】:

【参考方案1】:

Scenekit 使用仪表,仅供参考。您可能需要对此进行缩放试验,我有点怀疑它是否会开箱即用。这假设您有节点来比较距离,否则就另当别论了。

您可以使用 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))
     
 

【讨论】:

以上是关于在 SceneKit/modelIO 中测量 3D-Obj 文件上两点之间的距离并显示它们的主要内容,如果未能解决你的问题,请参考以下文章

三角测量 3D 算法

3D 三边测量 Java

三角测量在3D空间的任意平面上的点集

海克斯康三坐标测量机可以出3d吗

2020JS-3D是测量啥的?

4个视图中的6个点的三角测量