二维鼠标控制三维旋转

首先特别鸣谢:付心建 花卫华 路小芳等  文章参考来源:http://wenku.baidu.com/view/44984ed2240c844769eaeefa.html

一. 二维鼠标控制三维旋转只要有以下三种办法:

  1. 通过改变三维相机的观察点及视点来达到三维旋转的目前。优点:计算量小,交互简单;缺点:操作正确度不高,只能实现整体交互,不能操作场景中单个实体。

  2. 通过改变场景或三维物体的各种矩阵来实现。一种方式是通过矩阵运算,改变三维实体的顶点数据,也就是改变顶点空间坐标,这种操作准确,但是计算大,交互有明显的滞后。另一种方式是不改变顶点空间坐标,而是通过世界矩阵和投影矩阵改变实现三维空间位置交互,这种方式不仅计算量小,而且操作准确到位。下面就介绍这种方法的实现原理。

二. 实现原理

  1. 二维点到三维矢量的映射

     鼠标在桌面上的二维反映为光标在屏幕上的二维运动。当所处理的对象是个二维物体时,鼠标的二维运动可以容易的映射到二维物体上,从而方便的实现了几乎所有的操作。但当交互关注的对象是一个三维物体时,二维屏幕与三维物体之间的映射就被打破。(先聚聚神,文字确实有点多)

  怎么才能实现二维鼠标到三维交互呢?具体到三维旋转控制中,一般采用如下的算法将屏幕任意的一点映射为一个三维单位矢量:

     二维鼠标控制三维旋转

      假定场景使用的坐标系是y轴向上的右手坐标系,其中sx,sy为二维屏幕坐标,width,height分别为窗口的宽和高。如果Vx与Vy的平方和小于1,则Vz=根号(1.0-绝对值(Vx平方+Vy平方))最后矢量V单位化。 

       2. 旋转组合

   本文采用四元组运算来表现旋转组合,当地一个弧的结尾处和第二个弧的起始处重合时

   假设屏幕上某个物体被选中,为了改变它的方位,用户简单地在屏幕投影空间的球体上画一条弧。这条弧有鼠标按下和弹起或拖动的位置得到。因而物体或实时绘制替换的对象随着鼠标一起转动。见图(还没完待续)

   

你可能感兴趣的:(控制)