在一个任意的2D多边形和一个3D三角网格之间投影的最佳方法是什么?

5
什么是将任意2D多边形投影到3D三角网格的最佳方法?
为了让事情更清晰,这里有一个问题的可视化:
三角网格代表地形,因此可以被视为2.5D。我想能够将投影的多边形视为单独的对象。 这个特定的实现是在WebGL和three.js中完成的,但任何适用于交互式3D应用程序的解决方案都很有趣。

1
你可以尝试使用贴花吗?https://threejs.org/examples/#webgl_decals - Martin Schuhfuß
我会创建三角形网格的UV映射(因为你有均匀的网格,所以它是顶点索引的简单线性插值),并通过预先渲染到纹理的多边形来进行纹理贴图... - Spektre
我同意Martin Schuhfuß的观点。但同时,在这张图片中,结果看起来像是两个几何体“合并”了,因为有额外的点和面。 - prisoner849
也许这个SO答案会对你有所帮助。 - prisoner849
很抱歉关于统一网格的问题。这只是为了更容易地提供一个例子,但实际上网格并不是统一的。是的,在图片中两个几何体被合并了。这并非完全必要,因此贴花可以是一个解决方案!尽管有可能我们想要在多边形投影的确切位置更改网格。例如,当给定的多边形代表一个湖时,将多边形的投影部分变平似乎是合理的。 - figursagsmats
1个回答

3
如果您的问题不是如何给表面贴图,那么您就需要生成新的3D多边形。
您将使用一些投影机制(例如平行投影),将您的3D问题转换为2D问题。
首先将表面反投影到多边形平面上。多边形将与相应的2D网格重叠。现在对于每个面,找到面和多边形的交集(布尔运算)。
您需要一个多边形交集机制,例如Weiler-Atherton或Sutherland-Hodgman剪辑算法(后者只适用于凸窗口)。 (还要检查http://www.angusj.com/delphi/clipper.php
剪辑后,您将投影到原始面平面上。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接