影像图层类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的更多相关文章

  1. WorldWind源码剖析系列:设置类SettingsBase

    PluginSDK中的星球设置类WorldSettings 和WorldWind.程序设置类WorldWindSettings均继承自父类SettingsBase.类图如下所示.其中父类Setting ...

  2. WorldWind源码剖析系列:挂件类Widgets

    WorldWindow用户定制控件类中所包含的的挂件类Widgets控件主要有如下图所示的派生类.它们的类图如下所示. 鉴于挂件类Widgets及其派生类,相对简单,基本上都是些利用DirectX3D ...

  3. WorldWind源码剖析系列:BMNG类构造函数深入分析

    BMNG构造函数深入分析 一.主要类图 二.主要功能: 1)        BMNG类 BMNG类将包含以“Blue Marble”为主题的所有可渲染影像的根节点添加到当前星球的可渲染对象列表中,包括 ...

  4. WorldWind源码剖析系列:图层管理器按钮类LayerManagerButton和菜单条类MenuBar

    WorldWindow用户定制控件类中所包含的的可视化子控件主要有:图层管理器按钮类LayerManagerButton和菜单条类MenuBar.BmngLoader类中所包含的的可视化子控件主要有: ...

  5. WorldWind源码剖析系列:插件类Plugin、插件信息类PluginInfo和插件编译器类PluginCompiler

    插件类Plugin是所有由插件编译器加载的插件子类的抽象父类,提供对插件的轻量级的访问控制功能. 插件信息类PluginInfo用来存储关于某个插件的信息的类,可以理解为对插件类Plugin类的进一步 ...

  6. WorldWind源码剖析系列:日志类Log

    Utility工程中的日志类Log主要用来输出Debug状态下的调试信息.该类的类图如下: 日志类Log中使用到的类和内嵌结构体类型主要有以下这些: public class LogEventArgs ...

  7. WorldWind源码剖析系列:相机类CameraBase

    相机基类CameraBase PluginSDK中的相机类CameraBase是三维计算机图形学中的概念.观察者在三维场景中漫游时,通过眼睛看到的场景和相机拍摄过程非常一致.实际上,Direct3D和 ...

  8. WorldWind源码剖析系列:角度类Angle

    PluginSDK中的角度结构体Angle类图如下所示. 角度结构体主要定义了一个弧度表示角度值的字段:double Radians.还有几个表示角度最大值.最小值.非数值和零角度等字段.定义了一个D ...

  9. WorldWind源码剖析系列:缓冲类Cache

    缓冲类Cache主要用于在最小的限制条件下保存从远程服务器通过网络下载下来的地理空间数据,以便当用户处于离线状态时能够使用这些已经缓冲好的数据.Google Earth也采用类似机制处理用户离线浏览漫 ...

  10. WorldWind源码剖析系列:四元数类Quaternion

    PluginSDK中的Quaternion4d类可能是感觉Microsoft.DirectX. Quaternion类不太实用或不够用,自己有重新写的. 四元数是英国数学家哈密顿(W.R.Hamilt ...

随机推荐

  1. CentOS命令行与shell操作(linux系管与运维二)

    原创作品,转载请注明出处:https://www.cnblogs.com/sunshine5683/p/10293729.html 在上篇文章中总结了Linux常用的开机与关机以及重启的命令,今天继续 ...

  2. Spring boot实现自定义拦截器

    Sprintboot的拦截器提供了精细的控制:在request被响应之前.request被响应之后.request全部结束之后至视图渲染之前 三个时间点,我们都可以通过编写他们的函数来控制. 首先新建 ...

  3. 安装mysql出现no compatible servers were found

    一.问题描述 今天在安装数据库的过程中,遇到错误提示: No compatible servers were found,You'll need to cancel this wizard and i ...

  4. Git 及 GitHub 使用

    Git bash 的常用命令 1. pwd    查看当前所在目录 2. cd cd ..         返回上一级 cd 目录    进入对应的目录 3. ls      查看当前文件夹的内容  ...

  5. 从零开始学习html(十二)CSS布局模型——上

    一.css布局模型 清楚了CSS 盒模型的基本概念. 盒模型类型, 我们就可以深入探讨网页布局的基本模型了. 布局模型与盒模型一样都是 CSS 最基本. 最核心的概念. 但布局模型是建立在盒模型基础之 ...

  6. drupal常用api

    最短的函数 // 语言字串,除了可以获取对应语言外,还可以设置字串变量.可以是!var, @var或 %var,%var就添加元素外层.@var会过滤HTML,!var会原样输出HTML,%var会添 ...

  7. drupal7 覆写node-type.tpl.php获取字段值的两种方式

    字段的机读名称为:field_publication_date <!-- 下面两种方式都可以获取node字段的值--> 出版时间: <?php print date('Y-m-d', ...

  8. BCG库的一个bug

     作者:朱金灿 来源:http://blog.csdn.net/clever101 同事在使用BCG库图表组件(BCG库的版本为BCGCBPRO1510)时遇到一个问题,就是图表标题总是出现乱码, ...

  9. Java:运算符的问题

    算术运算符: 算术运算符的注意问题 1. 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1.但被模数是负数就另当别论. -5%3=-2:-5%-3=-2:符号跟被模数(左边). 2. 对于除号 ...

  10. Hibernate 拦截器

    拦截器 你已经学到,在 Hibernate 中,一个对象将被创建和保持.一旦对象已经被修改,它必须被保存到数据库里.这个过程持续直到下一次对象被需要,它将被从持久的存储中加载. 因此一个对象通过它生命 ...