WW的纹理,DEM数据,及LOD模型

以earth为例

1. 地形数据:

默认浏览器纹理数据存放在/Cache/Earth/Images/NASA Landsat Imagery/NLT Landsat7 (Visible Color),和高程数据一样分层存储,从服务器下载的图像为JPG格式,512*512像素,下载完毕后转换为DDS格式,DTX3压缩,所占空间会增大一倍多,但据说运行时可节约50%内存,下载的临时文件后缀为jpg.tmp,下载出错后会多一个0字节的jpg.txt文件。国界数据存放在Cache/Earth/Boundaries/Country Political Boundaries,为PNG的图片格式,更详细的地界现在只有US的:Cache/Earth/Boundaries/US State Political Boundaries,均为512*512像素的PNG图片转为DDS格式

2.  DEM数据存放在Cache/Earth/SRTM

3. 分层原理:

以地球360度经度和180度纬度为标准,第一层以36度划分,如下图:

共分为(360/36)*(180/36) = 50层,第二层以18度,第三层以9度以次类推

这也是1.4及1.4.1版本LOD模型的基础—四叉树

由于按平面展开层层划分,所以在WW里用到一个row,col的概念,类MathEngine封装了从行,列,到经,纬度值的转换,这也是WW进行纹理贴图的依据

划分后的每个方格对应一个1所说的512*512的,对应Level的纹理,有了这些信息,再加上高度值就可以实时渲染三维图像

4.如何取得高度值:

在类TerrainAccessor和NltTerrainAccessor封装了通过行列,或者经纬度值读取Cache/Earth/SRTM对应层次BIL文件的高程信息的函数GetElevationAt等直接返回该点的高度值。

5.  LOD模型:

在1.3.5以前的版本,使用了VORM算法的LOD模型(类BinaryTriangleTree),地形数据存储在二叉树的数据结构中,对整个地形划分成块后,对每个矩形区域,都对角线连接形成两个两角形,再对每个三角形进行递归分裂,这种模型容易引起数据冗余,渲染和下载了视角以外的地形。

1.4和1.4.1 版本采用四叉树的数据结构,参照3的图解,Level 0把地球按36度划分成50个区域,第0层的每一块分裂为四个子树,这一层为Level 1层,

每个块都有四个子树,包括本身信息,数据定义为:

public double West;      // 四个方向的平面笛卡尔坐标值

public double East;

public double North;

public double South;

public Angle CenterLatitude;

public Angle CenterLongitude;

public double LatitudeSpan;

public double LongitudeSpan;

public int Level;   // 层次 Level

public int Row;     // 行,列

public int Col;

// 子树

protected QuadTile northWestChild;

protected QuadTile southWestChild;

protected QuadTile northEastChild;

protected QuadTile southEastChild;

每一块对应当前Level的一个512*512的纹理,每一块的每条边分为40等份(这里是固定不知为何),生成41*41或43*43个顶点,再结合高度信息实时绘制。

由于分层分块的结构,对地形数据的加载和实时渲染时,只需要从服务器下载需要层次,区域的纹理图片、高程信息,还可以对有些图片进行预处理成三维果的图片直接贴图,不需要高程信息。

过渡处理:

如下图Level n+1级未下载完未能处理的图片,仍然显示Level n级的效果

原文链接:World Wind学习总结一

[转]World Wind学习总结一的更多相关文章

  1. [World Wind学习]22.相机高度和瓦片等级计算

    在这里我们看到判断Lod的级别主要有三个条件: * 1.相机视角范围,视角范围越大,所包含的tileSize就越大 * 2.相机与瓦片距离,距离越远,所包含的tileSize也就越大 * 3.相机视锥 ...

  2. [World Wind学习]21.影像切割

    本来希望从GlobeMapper中生成切片直接加载到WorldWind中,但是没有成功!所以想比较一下和dstile生成的瓦片到底有什么区别? 所以这才第一次生成并加载了影像瓦片.貌似和GlobeMa ...

  3. wind的R接口、况客RSDK学习,双冒号以及quantmod主题

    本文主要参考:来自segmentfault上的FinanceR的专栏 https://segmentfault.com/a/1190000004580610 并自己对生疏不解之处做了补充和注释. 当然 ...

  4. Node.JS 学习路线图

    转载自:http://www.admin10000.com/document/4624.html 从零开始nodejs系列文章, 将介绍如何利Javascript做为服务端脚本,通过Nodejs框架w ...

  5. 【工作笔记】BAT批处理学习笔记与示例

    BAT批处理学习笔记 一.批注里定义:批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD,这些命令统称批处理命令. 二.常见的批处理指令: 命令清单: 1.RE ...

  6. Nodejs学习路线图

    前言 用Nodejs已经1年有余,陆陆续续写了48篇关于Nodejs的博客文章,用过的包有上百个.和所有人一样,我也从Web开发开始,然后到包管 理,再到应用系统的开发,最后开源自己的Nodejs项目 ...

  7. Python学习01 Hello World

    Python学习之Hello World 准备工作 去官网http://www.python.org/ 下载python的安装包: http://www.python.org/download/ 当前 ...

  8. node.js学习之路

    (非原创) 目录 Nodejs的介绍 15个Nodejs应用场景 Nodejs学习路线图 1. Nodejs的介绍 Node.js的是建立在Chrome的JavaScript的运行时,可方便地构建快速 ...

  9. python网络编程学习《一》

    最近,刚实习完,很喜欢实验楼,但是自己的方向仍然不能确定,自己觉得可选择的空间很大,尽管已经是大四的人了,想到别人都在忙着买职业装,买高跟鞋面试,学习化妆什么的,看看自己,反而开始慢慢关注运动,食疗以 ...

随机推荐

  1. 【转】XCode: duplicate symbol 解决方案

    遇到引用库重复定义的问题,需要解决. 项目需要,同时引用ZBar和QQ授权登录SDK,由于二者均使用了Base64处理数据,XCode编译时报错: duplicate symbol _base64_e ...

  2. iOS之学习资源收集--很好的IOS技术学习网站

    点击图片也能打开相关的网站: https://boxueio.com/skill/swift http://ios.b2mp.cn/ http://gold.xitu.io/welcome/?utm_ ...

  3. C语言--static全局使用示例

    前言:看到很多使用Objective-C开发IOS的大牛,有时候会使用static全局变量,相比之下,我却很少用这个,从而很少对其有着比较有实质意义的理解,甚至更别说运用它了. 今天,经过一番思考和自 ...

  4. 27个提升效率的iOS开源库推荐

    DZNEmptyDataSet(UI,空表格视图解算器) PDTSimpleCalendar(UI,drop-in日历组件) MagicalRecord(实施活跃记录模式的Core Data助手) C ...

  5. 做一些Spring AOP做过的事,封装 jdk动态代理成为一个黑盒子

      怎么使用eclise 抽取方法,请看  利用eclipse 抽取代码片段为方法   抽取完成之后,还需要 ① 将Collection.class换成  target.getClass(),targ ...

  6. linux命令之 用户和群组

    一.保存用户信息的文件 1 /etc/passwd root:x:::root:/root:/bin/bash pwftp:x::::/alidata/www/wwwroot/:/sbin/nolog ...

  7. oracle-删除归档日志

    rman target user/password; DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

  8. 读书笔记——Windows核心编程(15)在应用程序中使用虚拟内存

    微软的Windows提供了三种机制对内存进行操控 1 虚拟内存(最适合管理大型对象数组或大型结构数组) 2 内存映射文件(大型数据流/文件,共享数据) 3  堆(大量的小型对象) 预订地址空间区域Vi ...

  9. 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备

    相信很多人或多或少听说了微信公众平台的火热.但是开发还是有一点门槛,鉴于挺多朋友问我怎么开发,问多了,自己平时也进行以下总结.所以下面给大家分享一下我的经验: 微信公众号是什么? 官网的介绍:再小的个 ...

  10. Linked List Cycle

    Given a linked list, determine if it has a cycle in it. /** * Definition for singly-linked list. * s ...