影像图层类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. 存储过程TYPE类型参数调试

    当我们写完一段存储过程后,必然需要调试运行一下写的代码是否能成功运行,当参数是字符,数字或日期时,可以直接在测试窗口输入值.但是类型如果是定义好的TYPE,就无法简单的输入. 一.自定义TYPE TY ...

  2. ubuntu16.4+nginx+uwsgi+Django 部署上线

    Nginx概述 Nginx是一款轻量级的HTTP服务器,采用事件驱动和异步非阻塞处理方式框架,这让其具有极好的IO性能,市场用于服务端的反向代理和负载均衡 Nginx优点 高并发连接:官方测试Ngin ...

  3. cf113D. Museum(期望 高斯消元)

    题意 题目链接 Sol 设\(f[i][j]\)表示Petya在\(i\),\(Vasya\)在\(j\)的概率,我们要求的是\(f[i][i]\) 直接列方程高斯消元即可,由于每个状态有两维,因此时 ...

  4. js-设计模式学习笔记-策略模式

    策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换(相互替换:表现为它们具有相同的目标和意图). 策略模式的目的是讲算法的使用与算法的实现分离开来. 一个基于策略模式的程 ...

  5. js-ES6学习笔记-async函数(3)

    1.await命令后面的Promise对象,运行结果可能是rejected,所以最好把await命令放在try...catch代码块中. 2.多个await命令后面的异步操作,如果不存在继发关系,最好 ...

  6. Intellij Idea出现 unable to establish loopback connection

    项目一运行就出现这个情况,好几次了,最后发现只要防火墙关闭,项目就可以运行成功.错误提示:“C:\Program Files\Java\jdk1.8.020\bin\java” -Xmx700m -D ...

  7. log4net 本地环境没问题 生产环境无法输出日志

    log4net输出日志大概分两块 1.程序代码编写问题 2.配置文件问题 当程序本地可以正常输出日志.配置文件也都正常可用的情况下,发布到生产环境后,有的程序可以输出日志,有的程序不可以输出,程序无问 ...

  8. web api 权限控制

    https://www.cnblogs.com/landeanfen/p/5287064.html 我只是个搬运工, 我只想存个档

  9. Nginx的虚拟主机

    1.虚拟主机的概念和类型 1.1 概念: 所谓的虚拟主机,在web服务里面就是一个独立的网站站点,这个站点对应独立的域名(也有可能是IP或者端口),具有独立的程序和资源目录,可以独立的对外提供服务. ...

  10. Express浅谈

    写给鸟自己的,大家如果不慎百度到这里来了,真好也在做这块功能,不懂的可以联系鸟.微信:jkxx123321 const Sequelize = require('sequelize'); const ...