在 ARKit 中获取设备围绕世界原点 y 轴的旋转
Getting the rotation of device around the world origin's y axis in ARKit
当我在 ARKit 中围绕 y 轴旋转设备时,我正在尝试计算设备的旋转。为清楚起见,ARKit 中的 y 轴是垂直于地面指向上方的轴。
我使用 eulerangles 来获取相机的旋转,如下所示:
var alpha = sceneView.pointOfView?.eulerAngles.y
这大约在 0=<alpha<pi/2 and when -pi/2<alpha<=0
时有效,但对于应该是其他角度的情况,我得到了错误的读数。我怀疑这与万向节锁有关,我必须以某种方式使用四元数才能获得正确的角度,而不管象限如何。非常感谢任何帮助!
使用四元数代替欧拉角解决了这个问题。这是我使用的代码:
guard let cameraNode = sceneView.pointOfView else { return }
//Get camera orientation expressed as a quaternion
let q = cameraNode.orientation
//Calculate rotation around y-axis (heading) from quaternion and convert angle so that
//0 is along -z-axis (forward in SceneKit) and positive angle is clockwise rotation.
let alpha = Float.pi - atan2f( (2*q.y*q.w)-(2*q.x*q.z), 1-(2*pow(q.y,2))-(2*pow(q.z,2)) )
我使用 this website 上列出的四元数到 heading/euler 的转换。
当我在 ARKit 中围绕 y 轴旋转设备时,我正在尝试计算设备的旋转。为清楚起见,ARKit 中的 y 轴是垂直于地面指向上方的轴。
我使用 eulerangles 来获取相机的旋转,如下所示:
var alpha = sceneView.pointOfView?.eulerAngles.y
这大约在 0=<alpha<pi/2 and when -pi/2<alpha<=0
时有效,但对于应该是其他角度的情况,我得到了错误的读数。我怀疑这与万向节锁有关,我必须以某种方式使用四元数才能获得正确的角度,而不管象限如何。非常感谢任何帮助!
使用四元数代替欧拉角解决了这个问题。这是我使用的代码:
guard let cameraNode = sceneView.pointOfView else { return }
//Get camera orientation expressed as a quaternion
let q = cameraNode.orientation
//Calculate rotation around y-axis (heading) from quaternion and convert angle so that
//0 is along -z-axis (forward in SceneKit) and positive angle is clockwise rotation.
let alpha = Float.pi - atan2f( (2*q.y*q.w)-(2*q.x*q.z), 1-(2*pow(q.y,2))-(2*pow(q.z,2)) )
我使用 this website 上列出的四元数到 heading/euler 的转换。