我要实现的效果是使箭头从相机的pointOfView位置指向,与x和z轴上的场景(和重力)对齐,但指向与相机相同的方向。它可能看起来像这样:

ios - 欧拉角Y值受X和Z值影响-如何将它们归零以获得“真实的” y值?-LMLPHP

现在,我将其欧拉角xz设置为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仍然几乎相同。 xz值不同意味着y值不代表设备面向的方向。结果,我的箭头跟随相机的方向到达某个点,然后开始朝相反的方向旋转。如何以一种获得真实的x值的方式将zy值归零,然后可以用来定位箭头?

最佳答案

请勿使用欧拉角检测“真实”或“真实”值。
这些值总是正确的。要进行旋转,您必须使用矩阵或四元数。
记得。使用矩阵可以定义很多“欧拉角”。
每个欧拉角均相对于前一个。

SceneKit以与旋转方向相反的顺序应用这些旋转
组件:

               1. first roll

               2. then yaw

               3. then pitch

因此,要计算角度值,我建议计算向量及其在Oxy平面上的投影。该角度不是“欧拉”角度。

10-08 05:27