矢量线、面数据通常包括两种高度模式,即绝对高度和贴地模式。设置为贴地模式时,线、面需要紧贴地形,随地形的起伏而起伏。通常的处理办法是将线或面的顶点加密,然后在每个顶点处取当前的地形高度,然后渲染。这种方法有两个问题,一是顶点需要非常密集是才能更好的吻合地形,在线比较长或者面积比较大时会使图形顶点数量激增;二是图形创建的时候获取到的地形高度并不是完全准确的,在相机变化的过程中,由于地球的LOD策略,地形的高度在实时变化,造成贴地效果在一个角度正确在另一个角度就错误的问题。针对这些情况我们采用了两种解决办法:
1) 纹理贴地
将矢量线、面转化成一张图片,然后将这张图片作为地形瓦片的纹理,随地形一起渲染。这种方式的优点是能够与地形完全贴合,缺点是离相机非常近时,由于图片分辨率的原因,矢量边缘会出现锯齿。
2) GPU贴地
GPU贴地的实现方式跟传统方式一样,也是通过顶点加密,再给顶点取地形高程的方式实现区别在于本方法会通过shader在GPU中实时更新这些顶点的高度,当地形因为LOD策略切换不同级别时,矢量顶点也会随之更新,所以在各种角度都会有比较好的贴地效果。这种方式的优点是在全球视角或者较远距离下,矢量数据比较明亮,清晰;缺点是在距离非常近时,两点之间的直线可能会穿到地形以下。实际应用中可以根据需要,灵活地选取不同的贴地策略以达到最优的实现效果。
浏览次数:8797 次