通过旋转另一个四元数

时间:2019-10-17 13:38:11

标签: c# unity3d rotation quaternions

上下文

我正在使用混合现实和Unity,并尝试用我的手控制GameObject的3d旋转。

这是我到目前为止所拥有的:

    Vector3 _lefthand = new Vector3(Left.x, Left.y, Left.z);
    Vector3 _righthand = new Vector3(Right.x, Right.y, Right.z);
    _myObject.transform.rotation = Quaternion.FromToRotation(Vector3.right, _righthand - _lefthand));

该块包含在IEnumerator协程中,该协程在遇到if中的Update语句时开始。 if检查特定的手势,因此在启用手势时旋转“开始”,而当手势不活动时“停止”。

我所进行的旋转很小就很好,但是如果我想多次旋转对象就会掉下来,因为_myObject的旋转正好匹配当前Vector3位置创建的当前四元数我的手。

问题

我如何才能将_myObject从其当前旋转旋转到新的旋转,并保持双手起始位置和结束位置之间的差值呢?

1 个答案:

答案 0 :(得分:1)

在每帧的开始处,缓存旋转和左手->右手方向,然后使用Quat B * Quat A在世界空间中将A旋转B,或者将transform.Rotate与{{1 }}。

Space.World

除了仅缓存开始旋转和开始指针的位置外,您可以使用此技术,但这通常会导致沿指针之间的局部轴的意外旋转。使用每帧增量会将其最小化。