ARKit вращать мирОригина параллельно плоскости - PullRequest
0 голосов
/ 10 января 2019

Я использую ARKit для измерения комнат, но начало координат часто располагается под неправильным углом и не совсем параллельно полу. Я хотел бы настроить worldOrigin так, чтобы он вращался параллельно горизонтальным плоскостям, найденным с помощью функции ARKit planeDetection. Большие плоскости увеличат точность угла начала координат и, следовательно, улучшат качество облака точек, полученного из сеанса.

Я создал SCNPlane, размещенный на координатных осях xz (пол ARKit), и также использую каждый найденный якорь плоскости с достаточно большим размером, чтобы переориентировать worldOrigin, но не могу заставить его работать должным образом и / или возникают проблемы с конвертацией. кватернионы к simd4x4_float.

Мой код:

if plane.type == "floor" && isBigEnough == true {

let planeOrientation = plane.planeNode.simdOrientation
let originOrientationxz = originPlaneNodexz.simdOrientation
let changeOrientationxz = planeOrientation-originOrientationxz

var turn = SCNQuaternion(x: changeOrientationxz.axis.x, y: changeOrientationxz.axis.y, z: changeOrientationxz.axis.z, w: changeOrientationxz.angle)

sceneView.session.setWorldOrigin(relativeTransform: <#T##simd_float4x4#>)
//alternative idea
originPlaneNodexz.rotate(by: turn, aroundTarget: originPlaneNodexz.position)
//if this work, do:

for point in featurePointsArray{
   point.rotate(by: turn, aroundTarget: SCN3Vector3(0,0,0)
}

Альтернативные идеи также приветствуются.

...