【发布时间】:2012-02-20 07:29:17
【问题描述】:
给定相机朝向的方向的 3D 向量和 3D 空间中 3D 对象的方向/方向向量,我如何计算鼠标指针必须在屏幕上按顺序跟随的 2 维斜率视觉上沿着所述物体的方向移动?
基本上,我希望能够单击箭头并通过拖动它来前后移动,但前提是鼠标指针(大致)沿着箭头的长度拖动,即沿着它的方向指向。
谢谢
【问题讨论】:
标签: algorithm math drag-and-drop 3d dot-product
给定相机朝向的方向的 3D 向量和 3D 空间中 3D 对象的方向/方向向量,我如何计算鼠标指针必须在屏幕上按顺序跟随的 2 维斜率视觉上沿着所述物体的方向移动?
基本上,我希望能够单击箭头并通过拖动它来前后移动,但前提是鼠标指针(大致)沿着箭头的长度拖动,即沿着它的方向指向。
谢谢
【问题讨论】:
标签: algorithm math drag-and-drop 3d dot-product
我不确定我是否 100% 理解您的问题。你介意张贴一张图表吗?
您可能会对这些感兴趣。我回答了calculate a local X Y Z axis given a camera direction(看)vector 之前的问题,也回答了translate an object in a plane parallel to the camera 的问题。
这两个示例都使用Vector dot product、Vector cross product 来计算所需的向量。在您的示例中,vector dot product 也可用于在找到两个向量后输出它们之间的角度。
【讨论】:
这在一定程度上取决于您用于将 3d 真实世界坐标转换为 2d 屏幕坐标的转换,例如透视、等距等...您通常会进行前向 (3d -> 2d) 和后向 (2d -> 3d) 变换,其中后向变换会丢失信息。 (即,前进每个 3d 点将映射到唯一的 2d 点,但从该点返回可能不会产生相同的 3d 点)。您通常可以将鼠标点投影到对象上以获取缺失的尺寸。
对于鼠标拖动,您通常让用户指定一个操作(在投影平面上平移、放大或缩小,或围绕锚点旋转)。您的输入是拖动开始和结束时的鼠标坐标,您将其转换为 3d 坐标系以获得两个 3d 坐标,这将为您提供 dx、dy、dz 用于拖动/平移等...
【讨论】: