zoukankan      html  css  js  c++  java
  • 二维鼠标控制三维旋转

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

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

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

       

  • 相关阅读:
    Vue demo
    netcore使用IOptions
    CS0656 缺少编译器要求的成员“Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create”
    vs删除空白行 注释
    RabbitMQ入门
    EF 大数据量批量处理
    常用链接字符串
    DEA使用git提交代码时,点了commit之后卡死在performing code analysis部分,或者performing code analysis结束后没有进入下一步操作。
    Ubuntu16.04安装MySQL5.7
    ubuntu16.04源码编译安装nginx1.14.2
  • 原文地址:https://www.cnblogs.com/as3developer/p/2220480.html
Copyright © 2011-2022 走看看