IHi我一直在研究相机旋转方法。
我正在尝试使用鼠标输入旋转相机。 我需要水平旋转平行于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;
如果有人可以帮我解决这个问题,我将非常感激。 感谢。
抱歉英语,而不是我的主要语言。
答案 0 :(得分: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);
看到这样做很容易,感到愚蠢。 甚至不需要这个四元数。