Networking 如何将规则的高度栅格转换为不规则的三角形网络?

Networking 如何将规则的高度栅格转换为不规则的三角形网络?,networking,terrain,polygon,level-of-detail,mesh,Networking,Terrain,Polygon,Level Of Detail,Mesh,我正在寻找一种算法,将规则的高度网格(例如1024x1024)转换为三角形的不规则网络。下面是一幅显示三角形不规则网络示例的图像: 我在互联网上寻找了一种算法来转换它,但我就是找不到。基本上,三角形密度取决于粗糙度和/或像素误差(光栅化时),或者类似的东西。我认为网格简化算法可以满足您的要求。我假设大三角形是一个区域内几乎共面三角形的组合 以下是一些讨论: 简化确实是最先出现的想法之一。但这并不像本机解决方案那样干净 这种不规则性是通过voronoi细分获得的,原始问题归结为寻找点采样分布 为

我正在寻找一种算法,将规则的高度网格(例如1024x1024)转换为三角形的不规则网络。下面是一幅显示三角形不规则网络示例的图像:


我在互联网上寻找了一种算法来转换它,但我就是找不到。基本上,三角形密度取决于粗糙度和/或像素误差(光栅化时),或者类似的东西。

我认为网格简化算法可以满足您的要求。我假设大三角形是一个区域内几乎共面三角形的组合

以下是一些讨论:
简化确实是最先出现的想法之一。但这并不像本机解决方案那样干净

这种不规则性是通过voronoi细分获得的,原始问题归结为寻找点采样分布

为了找到点,它可以以泊松分布的形式实现,密度由高度图沿x和y的偏导数之和驱动。可以根据经验微调调整测量值(例如,
max
而不是sum)

如果分布遵循泊松分布,则可以更好地避免混叠,但也可以应用其他模式,如扫描线算法,该算法将逐行进行,并根据导数的绝对值确定下一个距离。然而,线之间的距离将是规则的,这将导致沿x的统计一致性,这不如卡尔发布的原始图片好。这就是为什么我在这种情况下提出泊松

泊松分布可以通过在整个地图上使用规则的均匀泊松来简化,然后根据导数绝对值最低的区域进行点修剪

修剪可以分块决定,将整个区域预细分为数百个子块,对于每个块,取该块中导数图的大量采样之和。如果该值较低,则随机删除大量点。使用此方法,块将有机会包含多个点,从而使修剪在统计上保持干净。但是,较大的区块也会导致导数变化较大的区域分辨率较差(原始高度图的二阶导数很强)。因此,应再次进行经验微调,以确定块的理想尺寸

为了缓解修剪块的问题,可以在启动时生成更多的点,并且块可以更小,这将在两个方面带来好处(良好的抗锯齿和良好的局部性)。然而,这将需要更多的CPU时间


点分布确定后,这是一个经典的voronoi tesselator,google上有数百个。

只是一个想法。使用递归细分创建地图的良好表示

假设要覆盖的区域是一个三角形。首先检查三角形是否是内部高度的良好近似值。如果是,则将其留在网格中。如果不是,则选择三角形内的一个点,将其拆分为三个三角形,然后继续


检查三角形近似值是否容易,计算高度曲线和三角形之间的体积。对于分割点,选择三角形中心更容易,但该方法将生成非常规则的网格。也许可以使用一些统计方法来更快地覆盖数据中的凹凸。我认为使用平均位置是有意义的。

请参阅以下相关问题的答案:

我还在TIN网上找到了这篇文章,其中引用了实际的算法:。请看2.4.2“从网格到锡”