我要实现的效果是使箭头从相机的pointOfView
位置指向,与x和z轴上的场景(和重力)对齐,但指向与相机相同的方向。它可能看起来像这样:
现在,我将其欧拉角x
和z
设置为0
,并将其y
设置为与ARSCNView.pointOfView.eulerAngles.y
匹配。问题在于,当我旋转设备时,eulerAngles.y
最终可能在不同点上具有相同的值。例如,以一个方向面对设备,我的eulerAngles
是:x: 2.52045, y: -0.300239, z: 3.12887
面向另一个方向,eulerAngles
是:euler angles x: -0.383826, y: -0.305686, z: -0.0239297
即使这些方向相距很远,eulerAngles
仍然几乎相同。 x
和z
值不同意味着y
值不代表设备面向的方向。结果,我的箭头跟随相机的方向到达某个点,然后开始朝相反的方向旋转。如何以一种获得真实的x
值的方式将z
和y
值归零,然后可以用来定位箭头?
最佳答案
请勿使用欧拉角检测“真实”或“真实”值。
这些值总是正确的。要进行旋转,您必须使用矩阵或四元数。
记得。使用矩阵可以定义很多“欧拉角”。
每个欧拉角均相对于前一个。
SceneKit以与旋转方向相反的顺序应用这些旋转
组件:
1. first roll
2. then yaw
3. then pitch
因此,要计算角度值,我建议计算向量及其在Oxy平面上的投影。该角度不是“欧拉”角度。