将任意 2D 多边形投影到 3D 三角形网格上的最佳方法?

fig*_*ats 5 3d graphics webgl computational-geometry three.js

将任意 2D 多边形投影到 3D 三角形网格上的最佳方法是什么?

为了让事情更清楚,这是问题的可视化:

图像

三角形网格代表地形,因此可以被视为 2.5D。我希望能够将投影的多边形视为一个单独的对象。这个特定的实现是在 WebGL 和 Three.js 中完成的,但任何适合交互式 3D 应用程序的解决方案都是令人感兴趣的。

小智 3

如果您的问题不是如何对表面进行纹理映射,那么您确实必须生成新的 3D 多边形。

您将使用某种投影机制(例如平行投影机制)将 3D 问题转换为 2D 问题。

首先将表面反投影到多边形平面上。多边形将覆盖在相应的 2D 网格上。现在,对于每个面,找到该面和多边形的交集(布尔意义上的)。

为此,您将需要一个多边形相交机制,例如 Weiler-Atherton 或 Sutherland-Hodgman 裁剪算法(后者要简单得多,但仅适用于凸窗)。(另请检查http://www.angusj.com/delphi/clipper.php

剪切后,投影到原始小平面。