Unity C# 四元数旋转:修正方向

4

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

我正在尝试使用鼠标输入来旋转相机。我需要水平旋转与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;

如果有人能帮助我解决这个问题,我将非常感激。谢谢。 抱歉用英语写的不好,请见谅。
1个回答

3
使用另一种方法解决了这个问题。
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);

看到这个任务如此简单,感觉自己有点傻。甚至不需要四元数也可以完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接