我想要达到的效果是从相机的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
值,然后我可以使用它来定位我的箭头?
答案 0 :(得分:1)
不要使用欧拉角来检测“真实”或“真实”的值。
这些值总是正确的。要使用旋转,您必须使用matricies或四元数。
记住。可以使用矩阵定义大量的“欧拉角”。
每个欧拉角相对于前一个角度。
SceneKit以相反的顺序应用这些旋转 组件:
1. first roll 2. then yaw 3. then pitch
因此,要计算角度值,我建议计算向量及其对Oxy平面的投影。这个角度不是'欧拉'角。