Math 概念问题-二维投影中的三维鼠标交点

Math 概念问题-二维投影中的三维鼠标交点,math,3d,Math,3d,我不知道这是一个概念问题还是一个计算问题。现在,我不会发布任何代码,但如果这不是概念上的问题,我会发布 问题: 我正在使用3D几何图形,并编写了代码来跟踪鼠标在屏幕上的移动。当接近顶点、边或面时,它将高亮显示该几何体并将鼠标捕捉到该几何体。由于我使用的API,3D光线投射非常具有挑战性,无法处理任何非面几何体(边和顶点)。我的解决方案的概念是将所有3D几何体投影到2D空间,并比较鼠标的x、y坐标以找到最接近的几何体部分。这在一般情况下效果很好。在平面正交视图(前视图、顶视图、侧视图等)中,它

我不知道这是一个概念问题还是一个计算问题。现在,我不会发布任何代码,但如果这不是概念上的问题,我会发布

问题:

我正在使用3D几何图形,并编写了代码来跟踪鼠标在屏幕上的移动。当接近顶点、边或面时,它将高亮显示该几何体并将鼠标捕捉到该几何体。由于我使用的API,3D光线投射非常具有挑战性,无法处理任何非面几何体(边和顶点)。我的解决方案的概念是将所有3D几何体投影到2D空间,并比较鼠标的x、y坐标以找到最接近的几何体部分。这在一般情况下效果很好。在平面正交视图(前视图、顶视图、侧视图等)中,它工作得非常好;在透视视图中,它通常工作得非常好。但是,与视口成陡峭角度的边(远离视口)是一个问题,我计算的交点离鼠标的距离比它应该的距离远,边的角度越陡,问题就越严重。请参见图1了解其是否正常工作,以及图2了解交叉点的位置

我的计算方法:

将三维几何体投影到二维空间后,我将使用基本圆边交点计算鼠标与二维几何体边的交点。这将返回相对于二维边起点的交点,基本上是边长度的百分比。然后,我可以使用此百分比来确定在何处高亮显示三维几何体边缘上的捕捉点。如上所述,当边角度较陡(远离视口)时,交点距离鼠标光标的距离应远得多。我需要做一些计算来补偿角度吗?感觉好像我错过了一步


谢谢。

现在写下来,我马上就能看出问题所在。在2D中,投影边在成一定角度时会变短。所以问题是:有没有办法根据视角计算投影边的缩短?