点、线、面:point of interest,road,area。
poi / label, road 主要元素,都有一个作用范围,都有一个显示级别的生命区间,[begLevel, endLevel] 从这个区间之内它们才显示。
地图显示典型的LOD,level of detail,而且各个level之间的数据往往不同:level越大显示的细节越多,数据量越大 且更加真实;level越小屏幕区域的比例尺越大。数据处理过程是从BigLevel 的数据开始逐层抽稀。最终是一个倒棱锥模型。
栅格地图暂且不说了,已经out了,各家矢量地图的渲染 使用瓦片,图片缓存 加快速度和节省电量。不可交互的内容以瓦片形式渲染,做缓存,可交互的内容在客户端以opengl / system sdk绘制。瓦片理论上是图像,可以图像处理做些艺术效果,当然这是另外一个话题。
如果要实现交互式地图,所有内容必须由客户端实时绘制,或者以逻辑数据结构而不是图片为粒度缓存。实时渲染所有元素,速度已经不是问题:nvidia_path_rendering 基于gpu硬件加速的矢量渲染,速度是传统软件矢量渲染的100+倍。实时绘制带来的耗电是个关键问题,每次手机打开3D 游戏,一会手机就发烫。。。
交互,另一个层面即开放性,开放的东西越多,一则用户可能会更加迷茫(对于专业用户可能是好事情),再则软件也越危险。防止用户的暴力操作的最佳方式,交互行为上增加约束,适度的约束设计至关重要。
forever drive中用户创建驾车路线时,编辑路线操作:均匀显示一些角点,选择角点可以编辑,最关键的一点是用户并不能任意地拖动角点,每个角点作用范围都被限制在一个圆中,这个圆以当前角点为圆心,到旁边角点的一半距离为半径构造,这个限制很适合。
手机屏幕太小。在有限的手机屏幕内实现高效、精准的交互操作着实重要。想到的一种解决方案:
手机局部放大技术:1)以图片层面放大,直接放大鼠标点击区域的帧缓存中内容;2)矢量数据层面放大,放大同时增加更多细节。
个性化定制 也是趋势,用户可以定制样式,添加个性化内容 通过ugc放方式给自己熟悉的3D pillar 贴图,定制路况 都离不开直接且高效地交互方式。
1. NV Path Rendering : https://developer.nvidia.com/nv-path-rendering
2. My NodeComposer :http://blog.csdn.net/dizuo/article/details/7186442