Измерение расстояния между двумя точками в файле 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))
}
}