Unity3D相对于原始方向操纵对象方向

时间:2018-05-28 17:07:54

标签: unity3d orientation quaternions

我遇到了使用Leap Motion设备进行手对象交互的另一个问题。特别是,我使用LM对虚拟对象执行方向操作。

我想使用手的当前和最后方向之间的差异来操纵对象:

Quaternion relativeOrientationHands = Quaternion.Inverse(currentHandOrientation) * updatedHand;
transform.rotation = transform.rotation * relativeOrientationHands;

它工作正常,但问题是,假设我将对象围绕x轴旋转180度(之后,y指向下方)。如果我之后释放对象并再次抓住它,那么方向改变从那时开始应用到对象的新方向,这对于使用起来非常困惑。 (原文:左手转动 - 物体逆时针转动;后:左手转动 - 物体顺时针转动)

enter image description here enter image description here enter image description here

不幸的是,我不知道修复它的数学,但也许有人可以帮助我。对于使用“四元数”的默认对象方向,如何将手的方向更改应用于我的虚拟对象。也许,有正常载体的东西?

修改

这3个数字说明了我的问题。第一个图显示了原始方向的对象(x-right,y-upwards)。我将手绕着z(蓝色轴)顺时针旋转180度,将立方体旋转180度,释放后,x指向左侧,y指向下方(图2)。如果我抓住当前方向的物体(图3),让我说我想围绕y轴顺时针旋转90度。在图一中,我可以通过顺时针移动手90度来做到这一点。但是,我用之前的操作改变了立方体的方向。因此,我必须用我的手进行90度逆时针旋转,以顺时针方向移动物体,因为y轴被翻转(图2-3)。我总是希望顺时针旋转你的手90度导致物体顺时针旋转90度,无论其当前方向如何。

非常感谢

最佳

R.Devel

0 个答案:

没有答案