Ios Euler角Y值受X和Z值的影响-如何将它们归零以获得“a”;“真实的”;y值?

Ios Euler角Y值受X和Z值的影响-如何将它们归零以获得“a”;“真实的”;y值?,ios,swift,scenekit,arkit,euler-angles,Ios,Swift,Scenekit,Arkit,Euler Angles,我试图实现的效果是,让一个箭头从摄影机的视点位置指向,与场景(和重力)在x轴和z轴上对齐,但指向与摄影机相同的方向。它可能看起来像这样: 现在,我将其euler角x和z设置为0,并将其y设置为与ARSCNView.pointOfView.eulerAngles.y匹配。问题是,当我旋转设备时,eulerAngles.y可能会在不同的点上具有相同的值。例如,在一个方向上面对设备,myeulerAngles是: x:2.52045,y:-0.300239,z:3.12887 朝另一个方向面对它,e

我试图实现的效果是,让一个箭头从摄影机的
视点位置指向
,与场景(和重力)在x轴和z轴上对齐,但指向与摄影机相同的方向。它可能看起来像这样:

现在,我将其euler角
x
z
设置为
0
,并将其
y
设置为与
ARSCNView.pointOfView.eulerAngles.y
匹配。问题是,当我旋转设备时,
eulerAngles.y
可能会在不同的点上具有相同的值。例如,在一个方向上面对设备,my
eulerAngles
是:

x:2.52045,y:-0.300239,z:3.12887

朝另一个方向面对它,
eulerangle
是:

euler角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

所以,为了计算角的值,我建议计算向量及其到氧平面的投影。这个角度不是“euler”角度。

我想我的问题是“如何设置箭头的euler角度,以便将其摆在我面前?”@Andrew,ARSCNView.pointOfView.rotation四元数是你想要的。但我不确定你想怎么设置它们。手动?在这里写下你的工作流程。请和matricies和quats一起工作。它们比Euler Angles好得多你有两个参照系:世界和相机。API将生成转换矩阵。因此,为了创建箭头,您必须计算相机参考帧在世界参考帧中的单位向量。是否希望某个3D对象的位置/方向基于某个时刻相机的当前位置/方向,并在此后保持不变,或者,是否希望三维对象的位置/方向始终固定在相机上,即使相机在移动?每种情况的解决方案都相当不同。