我正在使用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)
}
也欢迎其他想法。