欧拉角度Y值受X和Z值的影响 - 我如何将它们归零以获得“真实”的y值?
我试图达到的效果是从相机的pointOfView
位置指出一个箭头,与x和z轴上的场景(和重力)对齐,但指向与相机相同的方向。它看起来是这样的:欧拉角度Y值受X和Z值的影响 - 我如何将它们归零以获得“真实”的y值?
现在,我有它的欧拉角度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
值,然后我可以用它来定向我的箭头?
不要使用欧拉角来检测'真实'或'真实'的值。
这些值总是正确的。要处理旋转,你必须使用matricies或quaternions。
请记住。使用矩阵可以定义大量'欧拉角'。
每个欧拉角是相对于前一个。所以
1. first roll
2. then yaw
3. then pitch
,来计算价值,你的角度,我建议来计算矢量和投射到氧平面:
SceneKit在 部件相反的顺序应用这些旋转。这个角度不是'欧拉'角度。
我想我的问题是“我如何设置箭头的欧拉角以便将它放在我面前?” – Andrew
@Andrew,ARSCNView.pointOfView.rotation quaternion是你在找什么。但我不确定你想如何设置它们。手动?在这里写下你的工作流程。请与matricies和quats合作。它们比欧拉角度好得多 – Vyacheslav
你有两个参考框架:世界和相机。 API会为您提供转换矩阵。因此,为了创建箭头,您必须计算世界参考框架中相机参考系的单位向量。 – Vyacheslav
是否需要一个3D对象,其位置/方向基于当前相机的*当前*位置/方向,并且此后保持不变,或者是否需要位置/方向始终固定的3D对象即使照相机移动,也能照相机?对于每种情况,解决方案都是相当不同的 – rickster