我在地图上有建筑物的矢量数据,并希望它们看起来是挤压的,具体取决于已知的高度。
我知道这是一项常见任务,但我找不到任何令人满意的解决方案。
我在mapnik中看到了实现,它们使用多边形中所有顶点的最小Y进行简单排序。结果,大多数都是正确的,但有些仍然重叠(约2-3%)。
在大多数情况下,只需很好地对结构进行排序(以某种方式?)并以适当的顺序绘制它们(对于上述情况,此序列将为3-2-1)。
在更复杂的情况下,当多边形是凹的并且彼此太靠近时,每个墙和帽(屋顶)应该分开绘制(见下文)。
更新:
因此,有两种要绘制的细分:墙和帽。墙段很容易订购(最小Y)。我无法弄清楚如何订购上限。
谢谢。
答案 0 :(得分:2)
在直墙的情况下,很容易按深度排序。只考虑它们的直线段基数。请注意,每条线将平面分为两部分,其中一部分更靠近观察者,另一部分更远。对于任何段A,调用较近的部分A +和更远的部分A-。现在,对于任何两个段A和B,至少有一个命题成立:
在案例1和案例3中,B应在A之前绘制(A可能会封闭B,但B可能不会封闭A);在案例(2)和(4)A之前的B;在案例5中,没关系;普通墙壁不应出现6。
您现在可以对墙进行拓扑排序,并从最远到最近绘制它们。
对于屋顶,这对于凹形建筑物是不可能的,因为屋顶的一部分可能被遮挡了同一屋顶的另一部分的墙壁遮挡。想象一下,从其侧面可以看到一个低U形建筑,在U的中间有一座高塔。塔楼将被U型屋顶遮挡并遮挡,所以无论你绘制它们的顺序如何,图片都将是错。
因此,您必须将凹形屋顶细分为凸多边形。然后应该很容易按照相同的原则将它们与墙壁一起排序。
另一种方法是使用Z缓冲区,这使您无需考虑顺序。我的印象是,如今你可以在最低功耗的手机显卡上获得Z缓冲。