- 4
- 0
- 约4.52千字
- 约 9页
- 2017-01-28 发布于湖北
- 举报
球面相机旋转算法解析
球面相机旋转 这种旋转方式用户体验方式要优于x轴y轴混合旋转方式,模型旋转的方向和鼠标移动方向保持一致。 下面给出一种“球面相机”实现旋转的方法。 原理: 移动鼠标时,通过gluLookAt来改变视点的位置(采用增量的方式),而模型保持不动。即:只进行视点变换,不进行模型变换。 下图是用户按下左键,在屏幕上移动的一段距离(从A移动到B)。 由于屏幕坐标y轴向下,为了与投影平面坐标系(传统笛卡尔坐标)保持一致。 AM = y1-y2;? /*将消息代码描述*/ BM = x2-x1; 建立屏幕和投影变换近裁截面之间的对应关系(如下图)。 代码实现: 1 void setSphereCameraPos() 2 { 3???? // 左键未按下,直接返回 4????? if (!is_left_button_down) 5???????? return; 6 7???? // 从聚焦点指向视点的向量? OA向量 8????? vector3dd a(eye-target); 9 10???? // 计算球面相机半径 11????? radius = a.getLength(); 12 13???? // 将其单位化 14????? a.normailize(); 15 16???? // 当前相机向上方向与a做叉乘,计算投影面水平向
原创力文档

文档评论(0)