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. WorldWind源码剖析系列:WorldWind实时确定、更新、初始化和渲染地形和纹理数据

    WorldWind实时确定.更新.初始化和渲染地形和纹理数据 当用户点击WorldWind中的地球时,首先响应的是WorldWindow.OnPaint()函数,后续程序的调用流程如下图所示. 零散知 ...

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

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

  3. 使用清华大学开源软件镜像AOSP的“每月更新初始化包”更新指定版本的Android源码

    参照官方教程:Tsinghua Open Source Mirror 1. 下载了repo工具 mkdir  ~/bin PATH = ~/bin:$PATH curl  https://storag ...

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

     XAML实时显示更新插件LiveXAML LiveXAML是Visual Studio的第三方扩展插件.该插件可以从Visual Studio Marketplace下载,也可以从官网下载http: ...

  5. linux实时查看更新日志命令

    很多时候在调试生成或正式平台服务器的时候想查看实时的日志输出,在Linux中可以使用tail 或 watch来实现. 比如我们项目中有个 app.log 的日志文件,我们普通读取都使用 vi app. ...

  6. [转]linux实时查看更新日志命令

    很多时候在调试生成或正式平台服务器的时候想查看实时的日志输出,在Linux中可以使用tail 或 watch来实现. 比如我们项目中有个 app.log 的日志文件,我们普通读取都使用 vi app. ...

  7. 实时更新Excel文档外部数据源的数据

    实时更新Excel文档外部数据源的数据 单元格区域.Excel 表.数据透视表或数据透视图均可以连接到外部数据源(数据源:用于连接数据库的一组存储的"源"信息.数据源包含数据库服务 ...

  8. WorldWind源码剖析系列:WorldWind如何确定与视点相关的地形数据的LOD层级与范围

    1.WorldWind如何确定与视点相关的地形数据的LOD层级与范围? 问题描述:WW中是如何判断LOD层次的呢,即在什么情况下获得哪一层级的数据?是否只通过相机视点的高度进行判断? 问题切入:要解决 ...

  9. 使用Python的Flask框架,结合Highchart,动态渲染图表(Ajax 请求数据接口)

    参考链接:https://www.highcharts.com.cn/docs/ajax 参考链接中的示例代码是使用php写的,这里改用python写. 需要注意的地方: 1.接口返回的数据格式,这个 ...

随机推荐

  1. unity3d游戏开发学习分享之表面着色器讲解

    一.三种着色器的书写格式: 1.surface shaders, 指的是表面着色器 2.vertex and fragment shaders and 指的是顶点和片段着色器 3.fixed func ...

  2. django-south使用 [转]

    转自: http://alexliyu.blog.163.com/blog/static/16275449620126239949478/ 使用South之前铭记:请你一定要相信他的能力,抛弃对他的不 ...

  3. 双十二“MathType”限时6折特惠

    MathType是由美国Design Science公司开发功能强大的公式编辑器,专门用来对数学公式的编辑,与常见的文字处理软件和演示程序配合使用,能够在各种文档中加入复杂的数学公式和符号.双十二期间 ...

  4. js表单计算金额问题

    <table width="600" border="1" align="center" style="text-align ...

  5. PHP大小写是否敏感问题

    一.大小写敏感 1. 变量名区分大小写 所有变量均区分大小写,包括普通变量以及$_GET,$_POST,$_REQUEST,$_COOKIE,$_SESSION,$GLOBALS,$_SERVER,$ ...

  6. schema in oracle

    the conception of schema is different in different db software. here i just refer to oracle schema. ...

  7. 关于JavaScript中的this

    1.关于this的误会. 误会(1):this指向所在函数本身. 我们常常会对this产生各种误会,比如说我们可能认为this会指向所在函数本身,但实际上并非如此. function foo (){ ...

  8. Android开发之程序猿必需要懂得Android的重要设计理念2(5.20更新版)

    上篇文章介绍了Android开发的设计理念的一部分,并没有得到博友们的多大认可,仅仅看到了一位博友在以下留言期待下一篇文章的发表,为了这小小的唯一支持.我决定继续把后面的8个要点介绍一下,自己也潜心反 ...

  9. mybatis由浅入深day02_7.3二级缓存

    7.3 二级缓存 7.3.1 原理 下图是多个sqlSession请求UserMapper的二级缓存图解. 首先开启mybatis的二级缓存. sqlSession1去查询用户id为1的用户信息,查询 ...

  10. 当inline-block或者float失效的时候怎么弄

    当我们想要元素水平排列的时候,inline-block或者float是最好的选择了,但是当父元素的宽高都设置了的时候,子元素会失效,如下: 代码: <!DOCTYPE html> < ...