ARKit旋转worldOrigin平行于平面

时间:2019-01-10 15:53:49

标签: swift rotation orientation arkit quaternions

我正在使用ARKit测量房间,但是原点通常以错误的角度放置,并且与地板不完全平行。我想将worldOrigin调整为平行于ARKit的planeDetection功能找到的水平面旋转。更大的平面将提高原点角度的精度,从而提高从会话中得出的特征点云的质量。

我在坐标xz轴(ARKit的地板)上创建了一个SCNPlane,并且还使用了发现的每个大小足够大的planeAnchor来重新定向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)
}

也欢迎其他想法。

0 个答案:

没有答案