2017-09-25 30 views
1

我试图达到的效果是从相机的pointOfView位置指出一个箭头,与x和z轴上的场景(和重力)对齐,但指向与相机相同的方向。它看起来是这样的:欧拉角度Y值受X和Z值的影响 - 我如何将它们归零以获得“真实”的y值?

enter image description here

现在,我有它的欧拉角度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值不代表设备正面对哪个方向。结果,我的箭头沿着相机的方向前进到某个点,然后开始向相反方向旋转。我怎样才能将xz的值清零,以便我得到一个真实的y值,然后我可以用它来定向我的箭头?

+0

是否需要一个3D对象,其位置/方向基于当前相机的*当前*位置/方向,并且此后保持不变,或者是否需要位置/方向始终固定的3D对象即使照相机移动,也能照相机?对于每种情况,解决方案都是相当不同的 – rickster

回答

1

不要使用欧拉角来检测'真实'或'真实'的值。

这些值总是正确的。要处理旋转,你必须使用matricies或quaternions。

请记住。使用矩阵可以定义大量'欧拉角'。

每个欧拉角是相对于前一个。所以

   1. first roll 

       2. then yaw 

       3. then pitch 

,来计算价值,你的角度,我建议来计算矢量和投射到氧平面:

SceneKit在 部件相反的顺序应用这些旋转。这个角度不是'欧拉'角度。

+0

我想我的问题是“我如何设置箭头的欧拉角以便将它放在我面前?” – Andrew

+0

@Andrew,ARSCNView.pointOfView.rotation quaternion是你在找什么。但我不确定你想如何设置它们。手动?在这里写下你的工作流程。请与matricies和quats合作。它们比欧拉角度好得多 – Vyacheslav

+0

你有两个参考框架:世界和相机。 API会为您提供转换矩阵。因此,为了创建箭头,您必须计算世界参考框架中相机参考系的单位向量。 – Vyacheslav

相关问题