球面相机旋转算法解析.docxVIP

  • 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)

1亿VIP精品文档

相关文档