码迷,mamicode.com
首页 > Windows程序 > 详细

WorldWind源码剖析系列:WorldWind实时确定、更新、初始化和渲染地形和纹理数据

时间:2016-06-19 01:15:02      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:

WorldWind实时确定、更新、初始化和渲染地形和纹理数据

 当用户点击WorldWind中的地球时,首先响应的是WorldWindow.OnPaint()函数,后续程序的调用流程如下图所示。技术分享

 

零散知识点:

1、         地形瓦片类TerrainTile引用了地形瓦片服务类TerrainTileService,在TerrainTile的Initialize()函数中实例化并发起了地形下载请求类TerrainDownloadRequest对象。而在TerrainTileService类中也引用了TerrainTile类,通过GetTerrainTile()函数返回一个TerrainTile类对象。

2、         地形访问器类TerrainAccessor或其子类NltTerrainAccessor的构造函数中也引用了TerrainTileService。其中使用Hashtable对象m_tileCache存储了当前需要加载或下载的地形瓦片缓冲实体类TerrainTileCacheEntry对象,用于建立和维护一个访问下载请求队列。

3、         TileSizeDegree:每个瓦片覆盖的度数大小;

       SamplesPerTile: 每个瓦片的高程采样点数;

4、         星球表面渲染类WorldSurfaceRenderer和表面瓦片类SurfaceTile之间相互引用,且SurfaceTile类中定义了存储高程数据的二维数组float[,] m_HeightData = null,如果该数组为空则当层级大于2,则将TerrainTileService类二维数组public float[,] ElevationData赋值给m_HeightData,如果当前层级小于或等于2或ElevationData为空,则为m_HeightData重新分配空间。SurfaceTile.Initialize(DrawArgs drawArgs)函数调用了TerrainAccessor类的public virtual TerrainTile GetElevationArray(double north, double south, double west, double east, int samples)和SurfaceTile.buildTerrainMesh()。

5、         四叉树瓦片类QuadTile中引用了地形瓦片类TerrainTile,返回tile,而tile包含高程数组ElevationData。

6、         配置加载器类ConfigurationLoader的Load()函数从XML文件Earth.xml中解析出地形访问器类对象,并且该对象作为参数构造World对象newWorld。

7、         m_World. Update(DrawArgs drawArgs)函数内部当相机高度小于30000米时,才调用this. TerrainAccessor. GetElevationArray(B,L,S)计算出用户鼠标点击处的地形高程,具体内容为:(1)判断地形瓦片服务是否为空;(2) 判断更高分辨率数据集是否为空;(3)通过调用TerrainTileService. GetTerrainFile () 函数获取鼠标点击区域的TerrainTile 对象,然后将其加入到访问下载请求Hashtable对象m_tileCache 中;(4)判断所请求的瓦片缓存实体对象(是对TerrainTile类的进一步封装)是否已经初始化,如否则完成地形瓦片的初始化工作。所谓初始化实质上是解析扩展名为.bil的二进制文件中的数据,放入二维数组ElevationData[x,y]。其中,x=y= 150,代表150X150个格网点的高程数据;(5)调用ttce.TerrainTile. GetElevationAt(B,L)获取用户点击处经纬度的高程值,采用双线性内插方法插值得到并返回。在WorldWind V1.4.0.1版本中,上述功能代码被移入WorldWindow.cs文件的WorldWindow.Render()函数中。

WorldWind源码剖析系列:WorldWind实时确定、更新、初始化和渲染地形和纹理数据

标签:

原文地址:http://www.cnblogs.com/rainbow70626/p/5597267.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!