OpenGL中如何设置摄像机
- 在OpenGL中设置camera只需要下面的API即可
- 前三个是camera的position,可以理解为眼睛的位置,变量命名很贴切。
- 中间三个是视点的位置,可以理解为你看着那里
- 后面三个是摄像机的Y轴向量
- 实际上center-pos产生的向量是作用于x、z两个轴,因此这9个变量就决定了摄像机的位置和朝向。
1 | void APIENTRY gluLookAt ( |
屏幕鼠标移动对照到摄像机旋转
- 首先需要知道屏幕坐标系的正方向是朝向右和下的。
- angleRotateUp指的是绕Y轴,angleRotateRight指的是绕X轴。
- 程序实现目标是向右移动鼠标,摄像机右转,反正左转;向下移动数据摄像机向下看,反之向上看。
- 对于x轴来说,向右移动鼠标得到的deltaX是正数;右手坐标系中Y轴正方向是逆时针的,向右旋转是Y轴顺时针转动,传递给API的角度是应该是个负数,所以此处有了-angleRotateUp。
- 同理,向下移动得到的deltaY是正数,而X轴正方向是逆时针,而“低头”这个操作在右手坐标系是顺时针旋转,传递给API的角度是复数,所以就有了-angleRotateRight。
- 数学中,角度x无穷小时,x = sin(x),三角函数里面d/r = sin(x),在归一化中半径R=1,因此就有了x=d,也就是说鼠标移动距离无穷小时,可以认为移动的距离就等于旋转的度数。
- 理解了上面几点点,就很好做了。
开始旋转
图中矩阵是一个矢量绕任意轴,旋转任意角度的公式,其中 C = cos(angle),S = sin(angle), AX\AY\AZ是旋转轴的矢量。
公式的代码实现为:
1 | / 向前的矢量 |