worldwind技术学习总结内容摘要:

key = ({0,4}, ) + _ + ({0,4}, ) + ({0,4}, ) + +。 可保证 key 的唯一性,每次计算完一区域的 mesh grid 数据及 u,v 座标后,都保存在一静态变量中: internal static Dictionary VerticeCache= new Dictionary()。 ,缓存大小为 internal static int CacheSize = 256。 ,类CashEntry 的定义为: internal class CacheEntry { public [] northWestVertices。 public [] southWestVertices。 public [] northEastVertices。 public [] southEastVertices。 public short[] vertexIndexes。 public DateTime EntryTime。 } 保存 mesh grid 及 u,v 值,对应的顶点索引缓冲 vertexIndexes,网格信息的添加时间 EntryTime,每增加一个网格信息都调用(key, c)。 进行缓存,若超过 CacheSize 上限,则寻找过期的key 进行剔除,可能这个剔除算法并不保证一定删除成员,因为在实际跟踪过程中发现 VerticeCache 的 count 值达到 400 以上,并且剔除算法没有删除任务成员。 可以看到 WW 的LOD数据每个 level 是平均划分的,并没有做地形起伏 LOD,只是根据 视点的远近划分了不同的 level 二、 WW 的渲染结构 WW 中除了标题和菜单的工作区中的 button,layer,line,point,line,model,当然还有 pla 默认为 earth 的地形纹理,及其上所有信息,都做为 WW 的渲染对象,保存在 中的 RenderableObjectList _renderableObjects。 RenderableObjectList 的继承关系如下: IRenderable IComparable RenderableObjectList GPSTrackerOverlay Icons PathList RenderableObject 实际的点线,平面纹理等渲染对象都是从 RenderableObject 继承,最终的渲染实现也是在从它继续下来的类中, RenderableObjectList 的成员 m_children( protected ArrayList m_children = new ArrayList()。 )包含 WW 中所有的渲染对象,绘制过程中按如下的优先级进行: public enum RenderPriority { SurfaceImages = 0, TerrainMappedImages = 100, AtmosphericImages = 200, LinePaths = 300, Icons = 400, Placenames = 500, Custom = 600 } 这里对 WW调试过程中的 m_children 的成员做个截图,需要注意的是 m_children的成员大部分还是 RenderableObjectList 对象,向下包含的层次很多,但只有最底层的从 RenderableObject 继续的对象才是渲染的最终实现: 从下图可以看到里面的成员和 Layer 界面下的组织结构很相似,其实最终的结时会是一样的。 从 RenderableObject 继承的对象列表如下: RenderableObject StereoLayer AtmosphereLayer CompassLayer FloodLevel GPSTrackerOverlay GPSTrackerFixInfo GPSTrackLine GPSIcon GPSGeoFence WaitMessage Stars3DLayer BoundaryLayer DownloadableImageFromIconSet DownloadableIcon Icon ImageLayer LatLongGrid MeshLayer PathLine PolygonLayer QuadTileSet Bar3D WavingFlagLayer ShapeLayer TerrainPath TiledPlacenameSet TiledWFSPlacenameSet World WaitMessage ClassificationBanner RenderableObject QuadTile n… 1 BoundingBox 1 1 RenderableObjectList 1 1 MeshLayer 三、WW启动过程 程 序的入口点当然是在 里的 main 函数,在这里将创建一个WW程序的实例 MainApplication, 调用 LoadSettings进行一些必要的初始化,加载除了 WW 工作区以外的所有菜单,及点击菜单项弹出来的对话框项,声明一个 WorldWindow 实例来处理 WW 工作区内所有图层,按扭的渲染, WorldWindow里的 World 对象专门用来处理 pla 的所有渲染信息,当然现在默认的是处理 earth 的所有渲染信息。 WW 的启动过程需要访问系统的默认设置,启动默认行星的设 置(一般默认为 earth) ,WW 并不直接调用本地 config 文件夹里 earth 的设置,而是先生成一个 URL 值访问服务器的 xml 文件并下载到本地,分别保存为 tmp,uri,xml 为扩展名的三个同名文件,根据配置信息再加载插件,和需要做为渲染对象的图层信息,并保存在 World 对象的 _renderableObjects 成员中,比如启动 WW呈现在我们面前的地球图形就是根据这些信息进行渲染的,每一种卫星( Landsat, USGS, etc… )的最大 level 值,最大经纬度值 … .. 因为启动时需要访问 WW 服务 器的 xml 信息,所以网速慢的朋友启动也会慢不少,我测试了下自己的电脑访问 WW的服务器网速只有 6k/s 左右,启动时间有三分之一都耗费在这上面,其余大部分时间都花在加载配置文件上 xml 上,因为需要将配置文件里的所有图层都加载到 WW 中 配置文件。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。