【问题标题】:Unity C# Quaternion Rotation Correcting orientationunity C# 四元数旋转校正方向
【发布时间】:2013-10-24 18:48:22
【问题描述】:

我一直在研究相机旋转方法。

我正在尝试使用鼠标输入旋转相机。 我需要水平旋转平行于 x,y 平面(我的板),垂直旋转限制在某个角度(比如 40 度到 -40 度)。

我使用四元数来旋转相机。

这是我目前的代码

float angle = (mouseX_Current - mouseX_ActionStart) * 0.25f;
Quaternion horizontalRotationQuat = Quaternion.AngleAxis(angle, Vector3.up);

angle = (mouseY_Current - mouseY_ActionStart) * 0.25f;
Quaternion verticalRotationQuat = Quaternion.AngleAxis(angle, Vector3.right);

Camera.main.transform.rotation *= (horizontalRotationQuat * verticalRotationQuat);

我的问题是,通过将这些与鼠标相关的旋转添加到我当前的相机方向四元数中,相机不再平行于它正在查看的平面 (x,y)。

在添加了与鼠标相关的旋转后,我一直在尝试创建一个校正四元数以添加到相机四元数,但我似乎找不到合适的。

Quaternion currentOrientationQuat = Camera.main.transform.rotation;

Quaternion corretionQuat = new Quaternion(0.0f, 0.0f, - currentOrientationQuat.z, currentOrientationQuat.w);

Camera.main.transform.rotation *= corretionQuat;

如果有人可以帮助我解决这个问题,我将不胜感激。 谢谢。

对不起,英语不是我的主要语言。

【问题讨论】:

    标签: c# rotation unity3d quaternions


    【解决方案1】:

    用另一种方法解决了这个问题

    float angle = (mouseX_Current - mouseX_ActionStart) * 0.25f;
    Camera.main.transform.Rotate(0.0f, 0.0f, angle, Space.World);
    
    angle = (mouseY_Current - mouseY_ActionStart) * 0.25f;
    Camera.main.transform.Rotate(angle, 0.0f, 0.0f, Space.Self);
    

    在看到它是多么容易做到之后感觉很愚蠢。 这个甚至不需要四元数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-30
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 2022-10-25
      • 1970-01-01
      相关资源
      最近更新 更多