如何将二维向量转化为三维的向量

冯博1254 2010-08-10 10:38:40
我想做屏幕上拖动鼠标从而控制在三维场景中相机的位置变化
利用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轴上
...全文
1131 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gomoku 2010-08-10
  • 打赏
  • 举报
回复
用近似的方法。

比如想象屏幕下面有个单位球,比如点击屏幕的中心相当于点击单位球同屏幕的切点。
鼠标的拖动起点和终点可以投射到单位球表面上,这两个点将给出一个3D的向量,可用来进行旋转。

可以搜索TrackBall.cpp(类似这个名字)等用于游戏编程的类。
Baesky 2010-08-10
  • 打赏
  • 举报
回复
点击左键控制X轴,右键控制Y轴,滚轮控制Z轴坐标。
冯博1254 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 johndii 的回复:]

无法理解,只用鼠标(上下左右)不可能得到三维坐标,最起码加个拉近放远。
x、y就不能构成一个平面了?要么知道与三坐标轴的夹角、向量的模(好像这么叫)定位。
[/Quote]
我是想控制相机的位置,因为相机是有一个方向垂直屏幕的,所以我的鼠标拖动只是想在屏幕所在的这个平面内移动,可问题是,相机会动啊,相机一动,则屏幕所平行的平面就改变了
johndii 2010-08-10
  • 打赏
  • 举报
回复
无法理解,只用鼠标(上下左右)不可能得到三维坐标,最起码加个拉近放远。
x、y就不能构成一个平面了?要么知道与三坐标轴的夹角、向量的模(好像这么叫)定位。
冯博1254 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gomoku 的回复:]

用近似的方法。

比如想象屏幕下面有个单位球,比如点击屏幕的中心相当于点击单位球同屏幕的切点。
鼠标的拖动起点和终点可以投射到单位球表面上,这两个点将给出一个3D的向量,可用来进行旋转。

可以搜索TrackBall.cpp(类似这个名字)等用于游戏编程的类。
[/Quote]
能不能说的详细一些,我也是这么的想法,但不知道怎么做,还有怎么用C#怎么计算两个向量的夹角,vector3.Dot只是说大于0夹角大于90,小于0夹角小于90

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧