【问题标题】:How to convert a regular height grid to a triangular irregular network?如何将规则高度网格转换为三角形不规则网络?
【发布时间】:2013-12-12 22:52:55
【问题描述】:

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

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

【问题讨论】:

  • 您希望它依赖于视图(有一些像素错误)还是静态网格?
  • @kolenda:我认为 OP 想要一个反映高度图的网格,即参差不齐的区域应该具有高像素密度,平坦或均匀倾斜的区域应该具有低密度。

标签: algorithm networking 3d geometry terrain


【解决方案1】:

这里有一个两步算法的想法:首先基于粗糙网格进行 Delaunay 三角剖分,然后递归地平滑三角形,直到满足某个错误标准。

第一步,为 Delaunay 三角剖分确定一组顶点。这些顶点与像素坐标一致。高于或低于所有四个相邻像素的极值点应该在集合中,边界上的脊点也应该在集合中,其中沿边界的相邻像素低于或高于。这应该给出一个粗糙的三角形网格。您还可以通过包含具有高曲率的像素来获得更精细的网格。

第二步,遍历所有三角形。沿着像素网格扫描三角形,为三角形内的每个像素累积一个误差平方,并识别最大和最小有符号误差的点。如果每个像素的平均误差不符合您的标准,请将最低和最高误差点添加到三角剖分中。验证新三角形并根据需要重新进行三角测量。

注意事项:

第一步中的粗三角剖分应该相当快。如果高度图参差不齐,那么参差不齐的区域可能会出现太多顶点。在这种情况下,可以在应用算法之前使用高斯滤波器对高度图进行平滑处理。

递归重新三角剖分可能不会那么快,因为确定错误需要一遍又一遍地扫描三角形。 (随着三角形尺寸的减小,该过程应该会变得更快,但仍然如此。)在第 1 步中找到顶点的良好标准可能会加快第 2 步。

您可以通过查找像素边界框来扫描三角形。求边界框左下点的重心坐标 s, t 以及对应于像素在 x 和 y 方向移动的重心增量 (dsx, dtx) 和 (dsy, dty)。然后,您可以在包含的像素 (x, y) 上以两个循环扫描边界框,从您的增量向量计算重心坐标 (s, t),如果您在三角形内部,即当 s > 0 时,则累积误差, t > 0 和 s + t

我还没有实现这个算法(还 - 这是一个有趣的任务),但我认为在速度和网格质量之间找到一个很好的平衡是一个剪裁错误标准和顶点选择到当前高度图的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 2021-11-17
    • 2013-08-26
    • 2017-01-21
    • 2013-03-13
    相关资源
    最近更新 更多