Код: Выделить всё
RoomCaptureSessionАрхитектура:
- работает в фоновом режиме для создания трехмерной сетки комнаты.
Код: Выделить всё
RoomPlan - Я перехватываю кадры камеры () и передать их в VNCoreMLRequest.
Код: Выделить всё
CVPixelBuffer - Модель успешно возвращает 2D-ограничивающую рамку VNRecouncedObjectObservation (ограничивающую рамку) с нормализованными координатами.
Мне нужно привязать эту 2D-ограничивающую рамку к точной 3D-абсолютной координате (
Код: Выделить всё
simd_float3В настоящее время я конвертирую нормализованные координаты Vision в координаты экрана и выполняю raycast ARKit с использованием .estimatedPlane:
Код: Выделить всё
// Pseudo-code of current approach
let screenPoint = CGPoint(x: boundingBox.midX * screenSize.width,
y: (1 - boundingBox.midY) * screenSize.height)
let query = arSession.raycastQuery(from: screenPoint,
allowing: .estimatedPlane,
alignment: .vertical)
if let result = arSession.raycast(query).first {
let worldTransform = result.worldTransform
// Save coordinate...
}
Поскольку RoomPlan создает свои собственные оптимизированные стены (CapturedRoom.Surface), лучше ли использовать лучевую рассылку по .estimatedPlane ARKit или есть способ математически пересечь луч напрямую с геометрическими выходными данными RoomPlan для большей точности?
Существуют ли какие-либо известные несоответствия координатного пространства между миром ARSession origin и окончательный источник экспорта CapturedRoom, который мне следует учитывать, чтобы предотвратить смещение 3D-маркеров в окончательной USDZ?
Будем очень признательны за любые идеи по обработке этого межпространственного сопоставления координат.
Подробнее здесь: https://stackoverflow.com/questions/799 ... oordinates
Мобильная версия