我对C++有经验,知道更多与嵌入式设备相关的东西,但对计算机图形学及其算法一无所知。
我想得到一个道路网格(基于样条)无缝混合成一个地形网格,这是基于一个规则的网格,如下图所示。这是如何实现的?
只是看了一下CGAL文档,我甚至不知道我面临的是哪个问题,以及该研究哪个包。也许是Delauney的精致?但是我只看到了一个2D的CGAL包。我想要生成一个三维网格。
道路网应该是不修改的,地形网可以改变成一个无缝网。
你能给我介绍一下这方面所需的算法吗?
向麦克斯问好

发布于 2017-10-17 00:35:59
我认为解决这个问题的最好方法是一次在一个三角形上工作的算法。
你会看到每一个地形三角形单独的道路相交和处理它。
单独观察一个三角形,就必须将该三角形分割成一个或多个网格,以使其与道路成等高线。
以下是一些需要在下图中考虑的案例。我打赌会有一些三角形切片算法适合这一点,我也不确定有什么名字,但我提议的主要贡献是,你要单独处理三角形。

当在x/y平面上切割三角形以为道路制造一个洞时,你也会希望地形得到道路的z值(高度),对于那些接触道路的顶点。这将使地形上升,以满足道路。
在这一点上,你将有一个地形网格,它符合道路,但它将是丑陋的。
而不是有一个漂亮的,甚至看上去在合理的山坡上的道路上,你会有一些三角形非常尖锐的道路上,而其他的有一个非常平的斜坡。
你现在需要做的是做一些“放松”算法来解决这个问题。
基本上,如果有些东西太陡,因为没有足够的三角形来进行高度调整,你需要使整个三角形的高度更接近道路,并将一些高度调整流到邻近的三角形上。
如果有些东西不够陡峭,因为有很多三角形来调整高度,你可能会想把三角形分解成更接近道路的多边形,让更小的区域来处理高程的变化。
在第二步中,当在两个三角形之间的边缘添加一个顶点时,还需要调整共享边的三角形,以防止在地形中出现裂缝。
细节有点模糊,但希望这两步方法能帮助您解决问题。
发布于 2018-06-27 07:43:02
对于三维地形,你可以使用投影到XY平面上的点进行三角测量.这很容易在CGAL中使用投影_特征_xy_3。类实现,就像在这个地形三角剖分示例中一样。
对于道路三角测量的融合,您可以使用约束Delaunay三角剖分。你约束道路网格和插入规则网格点的地形网格,以构建完整的三角剖分。有关如何使用CGAL的约束Delaunay三角剖分的示例,请参阅此代码。
这将使您能够解决问题,而不深入到三角形的细节。如果结果不够好,您总是可以通过在有问题的三角形中插入额外的点来细化网格。
https://computergraphics.stackexchange.com/questions/5731
复制相似问题