【问题标题】:Projecting a line segment onto a polygon mesh将线段投影到多边形网格上
【发布时间】:2013-10-10 14:42:24
【问题描述】:

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

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

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

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

[李云金,等。 “使用最小规则和部分显着性进行网格剪裁。” 2005]

非常感谢任何帮助。

【问题讨论】:

  • 能否将屏幕线投影到世界空间的平面中,然后与网格相交?
  • @GarethRees 是的,这应该是可能的,但我想避免与网格“另一侧”的边缘相交。
  • 使用类似 Z 缓冲区的方法仅保留最前面的交叉点。
  • 嗯,你能详细说明一下吗?我是否需要在每个像素处存储两个与网格的交点,然后丢弃最后的交点,然后丢弃不位于边缘上的最前面的交点?
  • 不需要光栅化。最前面的交点集是分段线性的,因此您可以将其表示为点的排序序列(实际上是您尝试计算的点)以及每个点的 Z 值。

标签: graphics 3d geometry computational-geometry projection


【解决方案1】:

这是我的建议:

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

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

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

    李>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 2012-11-15
    相关资源
    最近更新 更多