WorldWind源码剖析系列:四叉树瓦片集合类QuadTileSet
四叉树瓦片集合类QuadTileSet是影像瓦片渲染的主要类。使用地形管理器来为3D地形渲染查询高程值。依赖于用来刷新基于经度、纬度、视角范围瓦片的更新线程。该类继承自可渲染对象类RenderableObject。该类的类图如下。
四叉树瓦片集合类QuadTileSet提供的主要字段、属性和方法简要描述如下:
bool m_RenderStruts = true;//渲染标记层
protected string m_ServerLogoFilePath; //服务器Logo文件路径
protected Image m_ServerLogoImage; //服务器Logo影像
protected Hashtable m_topmostTiles = new Hashtable();//最上层瓦片哈希表,其中,key= ((long)curRow << 32) + curCol,value= QuadTile对象。
protected double m_north; //瓦片集合北边界,单位:角度
protected double m_south; //瓦片集合南边界
protected double m_west; //瓦片集合西边界
protected double m_east; //瓦片集合东边界
bool renderFileNames = false; //渲染的文件名称
protected Texture m_iconTexture; //icon格式的纹理
protected Sprite sprite; //渲染精灵,详情请参阅Direct3D相关内容
protected Rectangle m_spriteSize; //渲染精灵的尺寸
protected ProgressBar progressBar; //进度条
protected Blend m_sourceBlend = Blend.BlendFactor; //源影像混合方式
protected Blend m_destinationBlend=Blend.InvBlendFactor;//目的影像混合方式。多层文理混合时需要指定这两个参数,详情请参阅Direct3D相关内容。
protected static long lastRenderTime;//最后的渲染时间。如果该值等于CurrentFrameStartTicks,则需要清除Z-buffer缓冲区。
//public static int MaxConcurrentDownloads = 3;
protected double m_layerRadius;//图层半径,等于星球半径+瓦片高于地表的距离
protected bool m_alwaysRenderBaseTiles;//一直需要渲染的基本瓦片
protected float m_tileDrawSpread; //瓦片绘制范围
protected float m_tileDrawDistance; //瓦片绘制距离
protected bool m_isDownloadingElevation; //是否是正在下载的高程数据
protected int m_numberRetries; //重试次数
protected Hashtable m_downloadRequests = new Hashtable();//下载请求,其中,key= QuadTile对象,value= GeoSpatialDownloadRequest对象。
protected int m_maxQueueSize = 400; //下载队列最大数目
protected bool m_terrainMapped; //是否启用地形映射
protected ImageStore[] m_imageStores; / /存储影像数组
protected Camera.CameraBase m_camera;//与四叉树瓦片集合关联的相机
protected GeoSpatialDownloadRequest[] m_activeDownloads = new GeoSpatialDownloadRequest[20]; //活动的下载请求数组
protected DateTime[] m_downloadStarted = new DateTime[20];//下载开始时间
protected TimeSpan m_connectionWaitTime = TimeSpan.FromMinutes(2);//连接等待时间间隔
protected DateTime m_connectionWaitStart; //连接等待的开始时刻
protected bool m_isConnectionWaiting; //是否正处于连接等待中
protected bool m_enableColorKeying; //是否启用颜色??不太懂
protected Effect m_effect = null; //Direct3D的效果
protected string m_effectPath = null;//效果路径
protected string m_effectTechnique = null;//效果技术参数
static protected EffectPool m_effectPool = new EffectPool();//D3D的效果缓存池
protected TimeSpan m_cacheExpirationTime = TimeSpan.MaxValue;//瓦片集合下载缓冲区过期时间间隔
public static Texture DownloadInProgressTexture;//正在下载中的影像纹理
public static Texture DownloadQueuedTexture; //排在下载队列中的纹理
public static Texture DownloadTerrainTexture; //正在下载的地形纹理
public int ColorKey; // default: 100% transparent black = transparent
public int ColorKeyMax;//使用ColorKey设置的最暗的透明颜色值
bool m_renderGrayscale = false;//渲染时的灰度尺度
float m_grayscaleBrightness = 0.0f;// 灰度尺度的亮度
构造函数public QuadTileSet(string name,World parentWorld,double distanceAboveSurface,double north,double south,double west,double east,bool terrainMapped,ImageStore[] imageStores)根据指定的瓦片名称、从属的星球、瓦片高于地表的距离、瓦片集合北边界、南边界、西边界、东边界、是否进行地形映射、影像存储数组等参数实例化一个四叉树瓦片集合对象。
public override void Update(DrawArgs drawArgs)方法根据具体的绘制参数更新渲染场景的地形和影像瓦片数据,内部调用QuadTile.Update(drawArgs)函数。
public override void Render(DrawArgs drawArgs) 方法根据具体的绘制参数完成场景的渲染和绘制功能,内部调用QuadTile. Render (drawArgs)函数。其中,设计到纹理渲染阶段问题,详情请参阅Direct3D相关内容。
protected void RemoveInvisibleTiles(CameraBase camera)根据相机参数camera移除不可见的瓦片
public void ClearDownloadRequests()方法清空下载请求
public void RenderDownloadProgress(DrawArgs drawArgs, GeoSpatialDownloadRequest request, int offset)渲染下载进度
public virtual void ResetCacheForCurrentView(WorldWind.Camera.CameraBase camera)为当前视图重置缓冲区,内部调用QuadTile.ResetCache()函数。
public virtual void AddToDownloadQueue(CameraBase camera, GeoSpatialDownloadRequest newRequest)把下载请求newRequest添加到下载队列中。
public virtual void RemoveFromDownloadQueue(GeoSpatialDownloadRequest removeRequest)从下载对列中移除下载请求。
public virtual void ServiceDownloadQueue()当下载线程可用时开始启动下载任务。内部调用了非抽象类WorldWind.Renderable. GeoSpatialDownloadRequest.StartDownload()函数,以及非抽象类WorldWind.Net.WebDownload。注意区分WorldWind.Net. GeoSpatialDownloadRequest抽象类。
public virtual GeoSpatialDownloadRequest GetClosestDownloadRequest()从下载请求队列中寻找最好的下载请求并返回。
static protected Texture CreateDownloadRectangle(Device device, Color color, int padding)创建一个瓦片下载指示纹理。
WorldWind源码剖析系列:四叉树瓦片集合类QuadTileSet的更多相关文章
- WorldWind源码剖析系列:星球类World
星球类World代表通用的星球类,因为可能需要绘制除地球之外的其它星球,如月球.火星等.该类的类图如下. 需要说明的是,在WorldWind中星球球体的渲染和经纬网格的渲染时分别绘制的.经纬网格的渲染 ...
- WorldWind源码剖析系列:星球球体的加载与渲染
WorldWind源码剖析系列:星球球体的加载与渲染 WorldWind中主函数Main()的分析 在文件WorldWind.cs中主函数Main()阐明了WorldWind的初始化运行机制(如图1所 ...
- WorldWind源码剖析系列:四叉树瓦片类QuadTile
四叉树瓦片类QuadTile提供了对影像和地形数据的四叉树访问模型.该类的类图如下. 四叉树瓦片类QuadTile提供的主要字段.属性和方法简要描述如下: public QuadTileSet Qua ...
- WorldWind源码剖析系列:表面瓦片类SurfaceTile
表面瓦片类SurfaceTile描述星球类(如地球)表面纹理影像的瓦片模型.其类图如下. 表面瓦片类SurfaceTile包含的主要的字段.属性和方法如下: int m_Level;//该瓦片所属金字 ...
- WorldWind源码剖析系列:影像存储类ImageStore、Nlt影像存储类NltImageStore和WMS影像存储类WmsImageStore
影像存储类ImageStore 影像存储类ImageStore提供了计算本地影像路径和远程影像影像URL访问的各种接口,是WmsImageStore类和NltImageStore类的基类.当划分完层次 ...
- WorldWind源码剖析系列:星球表面渲染类WorldSurfaceRenderer
星球表面渲染类WorldSurfaceRenderer描述如何渲染星球类(如地球)表面影像纹理.该类的类图如下. 星球类World包含的主要的字段.属性和方法如下: public const int ...
- WorldWind源码剖析系列:WorldWind实时确定、更新、初始化和渲染地形和纹理数据
WorldWind实时确定.更新.初始化和渲染地形和纹理数据 当用户点击WorldWind中的地球时,首先响应的是WorldWindow.OnPaint()函数,后续程序的调用流程如下图所示. 零散知 ...
- WorldWind源码剖析系列:表面影像类SurfaceImage
表面影像类SurfaceImage描述星球类(如地球)表面纹理影像.该类的类图如下. 表面影像类SurfaceImage包含的主要的字段.属性和方法如下: string m_ImageFilePath ...
- WorldWind源码剖析系列:设置类SettingsBase
PluginSDK中的星球设置类WorldSettings 和WorldWind.程序设置类WorldWindSettings均继承自父类SettingsBase.类图如下所示.其中父类Setting ...
随机推荐
- 使用cgroup进行系统资源使用限制
环境:Centos 7 64 一.对某个进程限制它使用cpu为50% 1.先写一个占用cpu较高的脚本 x=0 while [ True ];do x=$x+1 done; 2.可以看到运行后cpu使 ...
- npm包管理工具在一般项目中的应用方法
最近自己在有时间,在通学一些知识点,记录一下,以便以后使用方面 当我们在做项目的时候,如果需要到包管理工具,那么我们一定会经历以下流程: 1.首先在官网下载node.js,然后默认安装到C盘 检查是否 ...
- Java中List、integer[]、int[]之间的转化
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.functio ...
- Python os、sys、pickle、json等模块
1.os 所有和操作系统相关的内容都在os模块,一般用来操作文件系统 import os os.makedirs('dirname1/dirname2') # 可生成多层递归目录 os.removed ...
- js-jQuery性能优化(二)
5.数组方式使用jQuery对象 使用jQuery选择器获取结果是一个jQuery对象.然而,jQuery类库会让你感觉正在使用一个定义了索引和长度的数组.在性能方面,建议使用简单的for或者whil ...
- 【读书笔记】iOS-网络-使用Bonjour实现自组织网络
Bonjour就是这样一种技术:设备可以通过它轻松探测并连接到相同网络中的其他设备,整个过程只需要很少的用户参与或是根本就不需要用户参与.该框架提供了众多适合于移动的使用场景,如基于网络的游戏,设备间 ...
- Oracle 12c SQL Developer连接报错(ORA-12505)
Oracle 12c SQL Developer连接报错(ORA-12505) 连接时报错码:Listener refused the connection with following error: ...
- js多线程(worker)
浏览器端js是单线程执行,所以当js执行高负载运算时,UI渲染就会阻塞,页面就会出现卡顿,用户体验就不是很好 js为此也提供了异步操作,例如: 定时器(setTimeout 和 setInterval ...
- JS函数机制小结
1.javascript中函数是第一型对象,即与其它对象一样,具有: 1.可以通过字面量创建 2.可以赋值给变量或者属性 3.可以作为参数进行传递 4.可以作为函数结果返回 5.拥有属性和方法 2.函 ...
- 解决The type 'ASP.global_asax' exists in both ASP.global_asax同时存在问题
习惯发布站点的同学有时候可能遇见以下错误 这是发布时[预编译勾选/不勾选]产生的文件冲突导致的 如果不勾选预编译会发布以下代码 如果勾选预编译会发布以下代码 错误就在于此,如果非预编译Global.a ...