WorldWind源码剖析系列:影像图层类ImageLayer
影像图层类ImageLayer
影像图层类ImageLayer将单张影像作为纹理映射到星球表面上去。源影像必须是平面笛卡尔坐标系。该类的类图如下。
影像图层类ImageLayer提供的主要字段、属性和方法简要描述如下:
protected double layerRadius;//图层半径,实际是添加影像纹理的星球半径
protected double minLat; //图层的最小纬度
protected double maxLat; //图层的最大纬度
protected double minLon; //图层的最小经度
protected double maxLon;//图层的最大经度
World m_ParentWorld;//图层所从属的星球对象
Stream m_TextureStream = null;//图层所包含的纹理数据流
protected bool _disableZbuffer;//是否对影像纹理图层启用Zbuffer缓冲
protected CustomVertex.PositionNormalTextured[] vertices;//将影像映射成纹理时所对应的含法线、纹理的位置坐标
protected static CustomVertex.TransformedColored[] progressBarOutline = new CustomVertex.TransformedColored[5];
protected static CustomVertex.TransformedColored[] progressBar = new CustomVertex.TransformedColored[4];
protected short[] indices;//使用索引缓存,减少内存使用并加速渲染
protected Texture texture;//从影像创建的纹理对象
protected Device device;//渲染纹理的设备
protected string _imageUrl; //纹理影像的URL字符串
protected string _imagePath; //纹理影像的路径
protected int meshPointCount = 64;//将纹理影像剖分的三角形格网点密度
protected TerrainAccessor _terrainAccessor;//影像纹理的地形访问器
protected int progressBarBackColor = System.Drawing.Color.FromArgb(100, 255, 255, 255).ToArgb();//进度条的背景颜色
protected int progressBarOutlineColor = System.Drawing.Color.SlateGray.ToArgb();//进度条的外轮廓颜色
protected int textColor = System.Drawing.Color.Black.ToArgb();
protected float downloadPercent;//下载文理影像完成的百分比
protected Thread downloadThread;//下载文理影像的线程
protected float verticalExaggeration;//纹理的竖直放大率
protected string m_legendImagePath;//图例影像路径
protected Colorbar legendControl; //颜色条图例控件窗体
int m_TransparentColor = 0;//透明区域的颜色
bool m_renderGrayscale = false;//是否灰度渲染
TimeSpan cacheExpiration = TimeSpan.MaxValue;缓冲区过期时间段
System.Timers.Timer refreshTimer = null;//刷新定时器
float m_grayscaleBrightness = 0.0f;//灰度尺度的透明度
static Effect grayscaleEffect = null;//启用效果对象
public override void Initialize(DrawArgs drawArgs):重载父类方法,根据URL创建下载线程、创建格网等。
public override void Update(DrawArgs drawArgs) :重载父类方法,根据绘制参数更新状态。
public override void Render(DrawArgs drawArgs) :重载父类方法,根据绘制参数完成影像图层的渲染。
protected virtual void CreateMesh():创建了Device最终渲染三角面格网所需要的点集合,即 protected CustomVertex.PositionNormalTextured[] vertices,并为构成三角形格网的每一个顶点指定顶点索引即protected short[] indices。同时使用顶点缓存和索引缓存,可以减少内存使用并加速渲染。
protected void DownloadImage():下载线程所绑定的处理函数,内部构造网络下载WebDownload对象来发起网络下载,并为该对象的“正在下载中事件”指定处理函数,以便在进度条中显示下载百分比。其中,当_imagePath为空时,将下载的文件放到内存中,然后ImageHelper类从流对象加载转变为纹理对象;当_imagePath不为空时,将加载的文件保存到——imagePath中,然后加载更新纹理;最后再调用CreateMesh()创建Mesh。
private static string getFilePathFromUrl(string url):从URL字符串中获取文件路径。
private void calculate_normals(ref CustomVertex.PositionNormalTextured[] vertices, short[] indices):计算格网顶点的法线,在光照状态下要用到法线。
WorldWind源码剖析系列:影像图层类ImageLayer的更多相关文章
- WorldWind源码剖析系列:设置类SettingsBase
PluginSDK中的星球设置类WorldSettings 和WorldWind.程序设置类WorldWindSettings均继承自父类SettingsBase.类图如下所示.其中父类Setting ...
- WorldWind源码剖析系列:挂件类Widgets
WorldWindow用户定制控件类中所包含的的挂件类Widgets控件主要有如下图所示的派生类.它们的类图如下所示. 鉴于挂件类Widgets及其派生类,相对简单,基本上都是些利用DirectX3D ...
- WorldWind源码剖析系列:BMNG类构造函数深入分析
BMNG构造函数深入分析 一.主要类图 二.主要功能: 1) BMNG类 BMNG类将包含以“Blue Marble”为主题的所有可渲染影像的根节点添加到当前星球的可渲染对象列表中,包括 ...
- WorldWind源码剖析系列:图层管理器按钮类LayerManagerButton和菜单条类MenuBar
WorldWindow用户定制控件类中所包含的的可视化子控件主要有:图层管理器按钮类LayerManagerButton和菜单条类MenuBar.BmngLoader类中所包含的的可视化子控件主要有: ...
- WorldWind源码剖析系列:插件类Plugin、插件信息类PluginInfo和插件编译器类PluginCompiler
插件类Plugin是所有由插件编译器加载的插件子类的抽象父类,提供对插件的轻量级的访问控制功能. 插件信息类PluginInfo用来存储关于某个插件的信息的类,可以理解为对插件类Plugin类的进一步 ...
- WorldWind源码剖析系列:日志类Log
Utility工程中的日志类Log主要用来输出Debug状态下的调试信息.该类的类图如下: 日志类Log中使用到的类和内嵌结构体类型主要有以下这些: public class LogEventArgs ...
- WorldWind源码剖析系列:相机类CameraBase
相机基类CameraBase PluginSDK中的相机类CameraBase是三维计算机图形学中的概念.观察者在三维场景中漫游时,通过眼睛看到的场景和相机拍摄过程非常一致.实际上,Direct3D和 ...
- WorldWind源码剖析系列:角度类Angle
PluginSDK中的角度结构体Angle类图如下所示. 角度结构体主要定义了一个弧度表示角度值的字段:double Radians.还有几个表示角度最大值.最小值.非数值和零角度等字段.定义了一个D ...
- WorldWind源码剖析系列:缓冲类Cache
缓冲类Cache主要用于在最小的限制条件下保存从远程服务器通过网络下载下来的地理空间数据,以便当用户处于离线状态时能够使用这些已经缓冲好的数据.Google Earth也采用类似机制处理用户离线浏览漫 ...
- WorldWind源码剖析系列:四元数类Quaternion
PluginSDK中的Quaternion4d类可能是感觉Microsoft.DirectX. Quaternion类不太实用或不够用,自己有重新写的. 四元数是英国数学家哈密顿(W.R.Hamilt ...
随机推荐
- python-状态模式
源码地址:https://github.com/weilanhanf/PythonDesignPatterns 说明: 在软件开发过程中,各种应用程序可能会根据不同的情况做出不同的处理.最直接的方案就 ...
- JS笔记--------预编译,闭包和作用域
(一)JS预编译四部曲: 1,创建AO对象. 2,找形参和变量声明,将变量和新参名作为AO属性名,值为undefined. 3,将实参值和形参值统一. 4,在函数体里找函数声明,值赋给函数体. (二) ...
- Android studio Connection failed (dl.google.com)
公司的网,莫名其妙的不能更新了,却可以下载compile文件... 于是乎FQ,hosts,修改studio.exe.vmoptions文件 然并卵,都特么不行 搞了一天还是不行 这种问题或许可以找到 ...
- MySQL 命令行操作集合
1.导入数据库 ) 登录 mysql -uroot -p Enter password: 2) 创建数据库create database pluto_0; 3)导入 source /var/www/m ...
- window平台搭建Hudson服务器
1.1 环境 Microsoft Windows server 2008 x64 1.2 资源下载 TortoiseSVN-1.7.11.23600-x64-svn-1.7.8.msi h ...
- python if 判断
#!/usr/bin/env python# -*- conding:utf-8 -*- if 条件: 执行1 执行2else: 执行3 if else 后面需要加: python严格缩进,内容1和内 ...
- 有关 Azure IaaS VM 磁盘以及托管和非托管高级磁盘的常见问题解答
本文将对有关 Azure 托管磁盘和 Azure 高级存储的一些常见问题进行解答. 托管磁盘 什么是 Azure 托管磁盘? 托管磁盘是一种通过处理存储帐户管理来简化 Azure IaaS VM 的磁 ...
- ejb-jar.xml
所有bean类(无论是会话bean还是实体bean)必须实现的最基本的接口是javax.ejb.EnterpriseBean接口. 所有的会话bean必须实现javax.ejb.SessionBean ...
- linux开机步骤
linux开机启动步骤: 1.bios自检 2.MBR引导 3.引导系统,进入grub菜单 4.加载内核kernel 5.运行第一个进程init 6.读取/etc/inittab 读取运行级别 7.读 ...
- java读取txt文件的2中方法---并将内容(每一行以固定的字符分割切成2段)存到map中去
#java读取txt文件的第一种方法 /** * 方法:readTxt * 功能:读取txt文件并把txt文件的内容---每一行作为一个字符串加入到List中去 * 参数:txt文件的地址 * 返回: ...