捕捉/夹紧旋转-以“连续步骤”旋转

时间:2020-04-01 10:05:06

标签: c# rotation quaternions polar-coordinates euler-angles

想象一下VR控制器和对象x的旋转。按下触发器时,旋转将另存为Quaternion rStart。在旋转控制器时,rStart和当前旋转rCurrent之间的旋转变化被添加到对象x。简单地说,对象x就会像控制器一样旋转。

我要求对象的旋转必须“连续”。例如,我预设了10度的逐步大小。然后旋转控制器将旋转对象,但仅允许其处于这些“捕捉”“旋转网格”旋转中。对象的旋转应在角度方向上捕捉到最接近的“旋转步骤”。

我想出了两个方法:

1)使用EulerAngles

四元数> EulerAngles>带有模数的x,y,z角> EulerAngles>四元数

我似乎遇到了一个奇怪的万向节锁定问题,因为转移到eulerAngles并返回到四元数是有损失的。

2)使用极坐标

四元数>向前矢量,向上>极坐标。取模>向量f,u>四元数

我觉得只用两个角度(天顶和方位角)工作就可以使过程更容易理解,这很重要,因为在该主题上我不是专业人士。

我的问题:

  1. 还有另一个更好的方法吗?
  2. 如何解决从eulerAngles到四元数的有损转换? (全局up向量有一些额外条件吗?)
  3. 在这里使用极坐标真的是个好主意吗?

0 个答案:

没有答案
相关问题