2012-01-27 61 views
4

给定相机朝向的3D矢量和3D空间中3D对象的方向/方向矢量,我怎么能为了在视觉上沿着所述物体的方向移动,计算鼠标指针在屏幕上必须遵循的二维斜率?3D空间:使用鼠标指针跟随物体指向的方向

基本上我希望能够点击一个箭头并通过拖动来回移动,但只有当鼠标指针沿着箭头的长度(大致)拖拽时,它指向。

谢谢

回答

1

我不知道我100%理解你的问题。你介意张贴一张图吗?

您可能会感兴趣。我回答以前的问题calculate a local X Y Z axis given a camera direction(看)矢量,也是一个问题translate an object in a plane parallel to the camera

这两个例子都使用Vector dot product,Vector cross product来计算所需的向量。在你的例子中,一旦找到它们,vector dot product也可以用来输出两个向量之间的角度。

+1

此处是一个简单的例子..我希望它清理了一下。 1)http://screencast.com/t/Vl7R1hnhZTY 2)http://screencast.com/t/wq8x9fwnJ – user1070447 2012-01-27 09:42:11

+0

基本上我猜我在问什么是如何获得对象在屏幕上的二维坐标3D空间 – user1070447 2012-01-27 09:46:16

+0

@ user1070447因此打击3D中物体的基本测试?看看我链接到的上一个问题。有几个答案可能会有所帮助:http://stackoverflow.com/questions/8633034/basic-render-3d-perspective-projection-onto-2d-screen-with-camera-without-openg/8758027#8758027 – 2012-01-27 09:54:04

0

它在一定程度上取决于您用于将3d真实世界坐标转换为2D屏幕坐标的转换。透视图,等轴测图等等......你通常会有一个向前的(3d-> 2d)和向后的(2d - > 3d)转换,反向转换会丢失信息。 (即前进每个3d点将映射到唯一的2d点,但从点返回可能不会产生相同的3d点)。您通常可以将鼠标点投影到对象上以获取缺少的维度。

对于鼠标拖动,您通常会让用户指定一个操作(在投影平面上平移,放大或缩小或围绕锚点旋转)。您的输入是拖动开始和结束时的鼠标坐标,您将其转换为三维坐标系以获得两个三维坐标,这将为您提供拖动/平移等的dx,dy,dz ...