【发布时间】:2013-10-10 14:42:24
【问题描述】:
我正在开发一个 3d 应用程序,目前正在寻找一种方法,将由屏幕空间中的两个点定义的线段投影到三维多边形网格(在我的例子中是三角形网格)上。目标是在世界空间中找到线段与网格边缘的交点。
我只能想到两种方法来做到这一点,但都不是理想的。第一个是以小间隔对线段(在屏幕空间中)进行采样,并在这些间隔处进行光线追踪,以找到光线击中网格的世界空间坐标,但这并不容易给我线的交点用网格边缘分割。
我能想到的另一种方法是以某种方式将网格反向投影到屏幕空间中,找到那里的交叉点(在 2d 中),然后将这些交叉点投影回 3d。这样做的问题是屏幕空间坐标系可能会在线段的第一和第二端点的选择之间发生变化(由于移动相机)。
如果其中任何一个令人困惑,那么这里有一张图片,大致显示了我正在尝试做的事情(白点表示我想要找到的点)。然而,在我的例子中,黄色曲线只是一条线段。
[李云金,等。 “使用最小规则和部分显着性进行网格剪裁。” 2005]
非常感谢任何帮助。
【问题讨论】:
-
能否将屏幕线投影到世界空间的平面中,然后与网格相交?
-
@GarethRees 是的,这应该是可能的,但我想避免与网格“另一侧”的边缘相交。
-
使用类似 Z 缓冲区的方法仅保留最前面的交叉点。
-
嗯,你能详细说明一下吗?我是否需要在每个像素处存储两个与网格的交点,然后丢弃最后的交点,然后丢弃不位于边缘上的最前面的交点?
-
不需要光栅化。最前面的交点集是分段线性的,因此您可以将其表示为点的排序序列(实际上是您尝试计算的点)以及每个点的 Z 值。
标签: graphics 3d geometry computational-geometry projection