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

原文链接: http://www.cnblogs.com/rainbow70626/p/5597267.html

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

零散知识点:

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

2、         地形访问器类TerrainAccessor或其子类NltTerrainAccessor的构造函数中也引用了TerrainTileService。其中使用Hashtable对象m_tileCache存储了当前需要加载或下载的地形瓦片缓冲实体类TerrainTileCacheEntry对象,用于建立和维护一个访问下载请求队列。ConfigurationLoader类的私有成员方法private static TerrainAccessor[] getTerrainAccessorsFromXPathNodeIterator(XPathNodeIterator iter, string cacheDirectory)中采用了如下图所示代码先构造TerrainTileService类对象tts,然后再将tts作为参数之一构造TerrainAccessor类对象newTerrainAccessor。

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实时确定、更新、初始化和渲染地形和纹理数据相关推荐

  1. React源码分析与实现(一):组件的初始化与渲染

    原文链接地址:github.com/Nealyang 转载请注明出处 前言 战战兢兢写下开篇...也感谢小蘑菇大神以及网上各路大神的博客资料参考~ 阅读源码的方式有很多种,广度优先法.调用栈调试法等等 ...

  2. XAML实时显示更新插件LiveXAML

    2019独角兽企业重金招聘Python工程师标准>>>  XAML实时显示更新插件LiveXAML LiveXAML是Visual Studio的第三方扩展插件.该插件可以从Visu ...

  3. coreseek实时索引更新之增量索引

    coreseek实时索引更新有两种选择: 1.使用基于磁盘的索引,手动分区,然后定期重建较小的分区(被称为"增量").通过尽可能的减小重建部分的大小,可以将平均索引滞后时间降低到3 ...

  4. 前端架构 IMVC 实时热更新模式

    Backbone 框架的逐渐衰退,前端 MVC 发展缓慢,有被 MVVM/Flux 所取代的趋势 React/Vue 和 Redux/Vuex 分别在 MVC 中的 View 层和 Model 层大施 ...

  5. JavaScript 实现textarea限制输入字数, 输入框字数实时统计更新,输入框实时字数计算移动端bug解决...

    textarea称文本域,又称文本区,即有滚动条的多行文本输入控件,在网页的提交表单中经常用到.与单行文本框text控件不同,它不能通过maxlength属性来限制字数,为此必须寻求其他方法来加以限制 ...

  6. 使用storm 实时计算_使用Storm进行可扩展的实时状态更新

    使用storm 实时计算 在本文中,我将说明如何借助Storm框架以可扩展且无锁定的方式在数据库中维护实时事件驱动流程的当前状态. Storm是基于事件的数据处理引擎. 它的模型依赖于基本原语,例如事 ...

  7. 使用Storm进行可扩展的实时状态更新

    在本文中,我将说明如何借助Storm框架以可扩展且无锁定的方式在数据库中维护实时事件驱动流程的当前状态. Storm是基于事件的数据处理引擎. 它的模型依赖于基本原语,例如事件转换,过滤,聚合--,我 ...

  8. 谷歌金融 Onebox 实现实时信息更新

    2007年10月12日 02:27:00 发表者:Google(谷歌)助理产品经理 许斐 今天,我们 很高兴地告诉大家谷歌金融 Onebox 实现了实时信息更新.大家在搜索栏中输入上市公司的股票名称( ...

  9. MYSQL数据库跨服务器实时同步更新实践----文献阅读(污水管网水质预测)

    文章目录 摘要 一. MYSQL 数据库主从复制,实时同步的再现 1. 1 先下载虚拟机(硬件)与lunxi系统(centos7) 1.2 在lunxi 系统安装rpm 版mysql 5.5.55 1 ...

最新文章

  1. R语言使用aov函数进行双因素方差分析(Two-way factorial ANOVA)、在双因素方差分析中,受试者被分配到由两个因素交叉分类形成的组(Two-way factorial ANOVA)
  2. 第二周项目2-就拿胖子说事
  3. redis多端口启动
  4. 2018-2019-2 网络对抗技术 20165230 Exp9 :Web安全基础
  5. linux查看与修改交换内存配置(解决zabbix-agent启动报错)
  6. 数据中心运营:内包还是外包?
  7. GHOST光盘制作详细教程
  8. laradoc mysql acccess_安装之后,启动mysql容器失败
  9. 毫无疑问的是.NET 在信创常用软件适配清单之中
  10. python实现五大基本算法_算法基础:五大排序算法Python实战教程
  11. 非空验证方法(多值)和BindingResult提示验证信息
  12. STM8S 低功耗(1)
  13. mysql大于等于、小于等于的写法
  14. 使用NS_REFINED_FOR_SWIFT使Objective-C API适应Swift
  15. BarTender打开提示:错误消息#2622
  16. 特种光纤所需学习知识(光纤光学)
  17. Revit插件建模助手尺寸定位标注和标注避让操作
  18. Pipeline流水线项目构建
  19. STM32 GPIO 配置之ODR, BSRR, BRR 详解
  20. 什么是BFC?以及形成BFC的条件

热门文章

  1. 「过拟合」也能废物利用了:有人用它高清重建3D物体表面,参数减少99%
  2. 西南这座城,脸,比北上广还有用
  3. IBM迎来新任CEO,又一美国科技巨头被印度裔掌舵
  4. 又一位先驱陨落:伯特·萨瑟兰去世,他参与创造互联网、Java、图形界面PC、微处理器,也是明智的实验室领袖...
  5. 孙正义下重金的机械臂独角兽梦碎:估值最高40亿美元,做披萨太难吃,只好去做披萨盒...
  6. 首次看清体内所有癌症转移灶,深度学习方法立大功!中国留学生一作论文登《细胞》封面...
  7. 去年领了163亿薪资的马斯克,刚推出智能召唤功能就被吐槽:遇到人开的车就蒙圈...
  8. SAP CRM调查问卷的评分和图表显示功能介绍
  9. 【我的Android进阶之旅】解决Android Studio启动时报错:Java 1.8 or later is required.
  10. 【记录】一些非常方便的命令集合