zengqh 百度地图是怎么实现的?

来源:互联网 发布:淘宝打电话说欠保证金 编辑:程序博客网 时间:2024/05/18 02:09

http://www.cnblogs.com/zengqh/p/3583144.html


毕业的时候进入过gis相关的领域,尽管之后专攻rendering,但也遇到了地图渲染相关的问题。

用opengl es 2实现过一版矢量地图,所有的东西都是gl画的,包括路,文字,天空,模型等等,采用现实3d建模,

使用 2x 4x msaa 来解决搞锯齿的问题,速度很快,手机上一般70—100 fps, 拖动非常流畅。

 

 

但是发现百度地图描画的数据量是非常大,很远的地方都画了很多的路背景等等,如果用gl单纯画三角形,这开销

是非常大的,但是发现百度地图非常快,资源占用比较低,综合考虑,不太可能采用我上面的这种方案。

那么百度地图是怎么实现的呢?

 

我觉得我的猜想基本是对的:

1. 所以的道路背景,在平面上的东西,肯定不是gl画的,是cpu画的,猜测使用agg画的

2. 百度地图使用tile方式,每张tile都是后台线程使用cpu画好后保存成图片的方式,贴上来的。

3. 整个建模采用3d,即相机在空中有xyz,地面使用tile贴图,也就是说图片是用gl画的,单纯画一些纹理,所以开销非常低。

4. 如果图片没有做好,如果上一个比例尺弄好,则先贴一层的,等这一层的tile全部准备好。所以没准备好的地方有一层放大的图片(肯定是图片是吧)

5. 其他的建筑物采用gl画的,就是那些透明的楼层。

6. 文字使用gl画的,贴在路上的文字也是gl画的,路名要根据路的方向实时调整是左右还是上下分布(这个我已经实现)

7. 你们发现没有,楼对于地面是透明的,但楼与楼之间是不透明的。(这个用gl也可以实现)我不知道百度或者其他的是不是和我一样的实现方法

 

总思路:用agg或者其他后台描画tile, 主线程gl描画生成的tile图片。整体建模采用和游戏一样的方式。2d就是相机90度向下看嘛~~

 

ps: 考虑到百度地图支持wp8,所以渲染可能综合使用d3d11 level_9_3,这个简单封装一下,比较容易。


0 0
原创粉丝点击