2D细节层次(LOD)算法

时间:2010-12-16 12:43:15

标签: algorithm 2d polygon computational-geometry level-of-detail

我一直在网上寻找一种算法,可以让你创建2D多边形的细节层次(LOD)表示,但我找不到任何合适的参考。也许我使用的是错误的搜索词,但所有的搜索结果都是针对3D LOD算法的,我猜,这些算法不能(?)真正应用于2D。

我相信在3D图形的冲击之前,许多人会研究2D LOD算法。有什么线索或指示我可以获得更多信息吗?谢谢!

2 个答案:

答案 0 :(得分:4)

除了从多边形中取出每个第N个顶点的明显最愚蠢的算法(将顶点的数量减少N),这是一个受一些3D算法启发的想法。

通常,在3D中,所需要的是移除对总体积贡献较小的面部。为此,我们尝试简化模型的“最平坦”区域。

现在在2D中,您可以将其翻译为“简化它们之间具有最小角度的片段。第一个天真的实现可能是:

  1. 计算多边形的区段Si和Si + 1之间的所有角度
  2. 将所有角度置于给定阈值以下(或采用M个最小角度)
  3. 简化我们在2中识别的段(用[Pi,Pi + 2]替换[Pi,Pi + 1]和[Pi + 1,Pi + 2])
  4. 从1.重复直到我们已经充分减少了多边形
  5. 当然,这不是最佳选择,但它应该是质量和速度之间的良好交易。您可以取两个线段(Pi + 1)的中间点与可能简化的线段([Pi,Pi + 2])

    之间的最小距离,而不是角度。

    编辑:

    如果我不需要太多性能,我会尝试另一种算法:

    1. 将原始多边形顶点视为Catmull-Rom样条曲线的控制点
    2. 将此样条曲线设置为所需的点数
    3. 最后,我在该链接上找到了一些源代码:http://motiondraw.com/md/as_samples/t/LineGeneralization/demo.html,以及相关的算法:http://www.geom.unimelb.edu.au/gisweb/LGmodule/LGSimplification.htm

答案 1 :(得分:4)

搜索用于简化折线的Douglas-Peucker algorithm,但可以扩展为支持多边形。这是我用过的。如果您需要,还有拓扑稳定的扩展。