我想做屏幕上拖动鼠标从而控制在三维场景中相机的位置变化
利用mousemove事件得到鼠标在屏幕上所画的向量,如何转化为场景中的三维向量呢
Vector2 oldV = new Vector2 (oldPosition.X, oldPosition.Y);
Vector2 newV = new Vector2 (newPosition.X, newPosition.Y);
Vector2 V = newV - oldV;
float twoVector2 = Vector2.Distance(oldV, newV);//移动的距离
向下再怎么做?
三维场景中X、Z构成一个平面,向上是Y轴,即法向量(这是XNA的坐标系,这个不重要)
关键是怎么把鼠标移动的距离分配到三维向量的X、Y、Z轴上

解决方案 »

  1.   

    点击左键控制X轴,右键控制Y轴,滚轮控制Z轴坐标。
      

  2.   

    用近似的方法。比如想象屏幕下面有个单位球,比如点击屏幕的中心相当于点击单位球同屏幕的切点。
    鼠标的拖动起点和终点可以投射到单位球表面上,这两个点将给出一个3D的向量,可用来进行旋转。可以搜索TrackBall.cpp(类似这个名字)等用于游戏编程的类。
      

  3.   

    能不能说的详细一些,我也是这么的想法,但不知道怎么做,还有怎么用C#怎么计算两个向量的夹角,vector3.Dot只是说大于0夹角大于90,小于0夹角小于90