假设我们有一个高度图,以图像的形式表示地形高程,其中每个像素表示高度。假设同一图像上的另一个图层用于指示道路穿越地形的路径,因此明亮的像素表示道路上的点,黑色像素表示道路,中间像素表示沿边缘的位置这条路。这似乎是在这种情况下代表道路的自然方式,但我们也可以使用行军广场将其转换为道路的多边形轮廓。
问题是:算法如何调整高度图以保持道路从一侧到另一侧保持水平。通过平均道路上每个点的高度来使道路完全水平是很容易的,但这不是真正的道路工作的方式。一条道路应该能够在山上上下奔跑,但不能向左或向右倾斜。
必须有一些几何解决方案来找到道路的角度并线性插值像素之间的高度。或者是否有一些棘手的解决方案在实践中取得了良好的效果而没有如此努力地工作?
答案 0 :(得分:1)
如果使用矢量数据(线)定义道路,则问题的解决方案会更清晰。正如Yves所写,用于填充道路的高度是道路中心线(轴)的高度,并且值垂直于轴传播,两侧的道路宽度的一半。计算也很复杂。主要问题是轴线上的弯曲(角度)。这是因为侧面和轴线在弯道上有不同的长度,因此必须小心行走“平行”。在这三条线上。
通过找到垂直于轴上某点的像素,可以解决栅格化问题。可以使用找到具有类似属性的像素集的方法。就像拿一个路边像素并找到一样 到其他路边的最短像素路径产生(可能)垂直于轴的像素线。最短路径线上的像素可以使用相同的高度,中间像素值甚至平均值。
采用这种方法会出现相同的弯曲问题,因为来自内部道路侧的像素可以在外侧道路侧具有更近的像素。也许更多的平均值可以帮到这里。我会选择从两侧的每个像素找到最短路径。对于每个最短的线,找到要使用的高度值。使用该像素将在更短的线上,并且它可以使用其所在的最短线的平均值。如果某些像素未被最短线覆盖,请使用相邻像素的平均值。
我认为用于查找最短路径(由道路像素构建)的图形节点具有8个邻居,并且边缘必须加权,其中水平/垂直边缘具有权重1并且对角线边缘具有权重sqrt(2)。 / p>
答案 1 :(得分:0)
您可以计算每个点的道路水平法线和沿这些法线的平均高度点。这将有助于您保持法线水平 - 以及实际道路的行为方式。
答案 2 :(得分:0)
沿道路轴使用像素的高度,并沿着轴的法线在高度贴图上设置此高度。这在技术上有点复杂。你可以做的是在微小的四边形中将道路网格化,并用恒定或双线性插值高度“填充”四边形。
为了更好的真实感,你必须在上升的一侧雕刻一点地形并填充向下的一面,以避免垂直的墙壁和尊重路堤的斜坡。这可以通过将道路延伸到道路外面来实现,其中额外的四边形可以给出斜坡。