二维鼠标控制三维旋转

首先特别鸣谢:付心建 花卫华 路小芳等  文章参考来源: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. 旋转组合

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

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

   

posted on   elvis.zhang  阅读(754)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?

导航

统计

点击右上角即可分享
微信分享提示