最近想仿一个CS游戏,在实现用鼠标控制摄像机旋转时遇到了难题。在网上搜了些资料,但感觉描述不清楚,答非所问。有的只贴上了代码,没有对相关技术予以说明,实在很难读懂其核心技术。昨天弄了一天,结果旋转的很糟糕,就像无头苍蝇似的,无法控制。今天早晨躺在床上想了一下,突然明白错在什么地方了。坐标旋转的时候要绕Y轴旋转,而不能饶Up方向旋转,因为Up会随着绕right轴旋转而改变,所以整体旋转实难控制。想到这里,就迫不急待的起床了,吃完早点,到实验楼修正了下旋转方式,结果一切正常!
设我们的摄像机有三个方向look、up、right,则我们可以控制摄像机在三维空间中做任意角度的变换。如果要用鼠标来控制摄像机旋转,那么我们需要根据鼠标的移动量来更新这三个方向向量,从而达到摄像机跟随鼠标移动而变换。
鼠标的移动是二维的:水平移动(x方向),垂直移动(y方向)(注:此处xy是窗口设备坐标系。)。那么鼠标的一个微小移动量总可以分解成x和y方向的移动分量,我们根据y方向的移动分量,来设制摄像机绕right方向进行相应角度的旋转,即可实现摄像机视野上下移动;而根据x方向的移动分量,来设置摄像机绕Y轴(世界坐标系)方向进行相应角度的旋转,即可实现摄像机