在 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 文件上两点之间的距离并显示它们的主要内容,如果未能解决你的问题,请参考以下文章