Измерение расстояния между двумя точками в файле 3D-Obj в SceneKit / modelIO и их отображение

Я совершенно не знаком с разработкой IOS и Swift. В настоящее время я работаю над приложением IOS, которое включает сканирование комнаты с помощью датчика LiDAR на iPad, а позже, когда я загружаю файл 3D Obj и касаюсь двух произвольных точек, должна отображаться длина между двумя точками. Что-то похожее на приложение 3D-сканер, приложение Canvas.

Пока я могу экспортировать данные сетки в файл Obj и сохранить его на устройстве. Я пробовал какое-то время, но думаю, что я застрял на этом этапе, так как не знаю, как продолжить работу с измерительной частью.

Конечный результат должен выглядеть примерно так.

экспортированный файл obj с меткой расстояния

Ищу любые рекомендации / предложения.

1 ответ

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))
     }
 }
Другие вопросы по тегам