1

我正在开发一个 3d 应用程序,目前正在寻找一种将由屏幕空间中的两个点定义的线段投影到三维多边形网格(在我的例子中是三角形网格)上的方法。目标是找到线段与网格边缘的世界空间中的交点。

我只能想到两种方法来做到这一点,但都不是理想的。第一个是以小间隔对线段(在屏幕空间中)进行采样,并在这些间隔处进行光线追踪,以找到光线击中网格的世界空间坐标,但这并不容易给我线的交点用网格边缘分割。

我能想到的另一种方法是以某种方式将网格反向投影到屏幕空间中,找到那里的交叉点(在 2d 中),然后将这些交叉点投影回 3d。这样做的问题是屏幕空间坐标系可能会在线段的第一和第二端点的选择之间发生变化(由于移动相机)。

如果其中任何一个令人困惑,那么这里有一张图片,大致显示了我正在尝试做的事情(白点表示我想要找到的点)。但是,在我的情况下,黄色曲线只是一条线段。

在此处输入图像描述 [李云金,等。“使用最小规则和部分显着性进行网格剪裁。” 2005]

很感谢任何形式的帮助。

4

1 回答 1

1

这是我的建议:

  1. 将屏幕线投影到世界空间中(在世界空间中获得一个平面)。

  2. 将平面与网格中的三角形相交,得到一组边。

  3. 将边缘添加到一个数据结构中,该数据结构只保留最靠近相机平面的边缘部分(参见下图,其中红线段及其端点是我们想要保留的部分)。这就像通过 Z 缓冲区构建图像,除了因为我们知道这个集合是分段线性的,我们不必对其进行光栅化,我们只需维护一个排序的端点列表。

在此处输入图像描述

于 2013-10-10T15:27:43.370 回答