解读WorldWind(二)基本情况
目前最新的WorldWind版本是2.0.0,使用Java开发,通过JOGL调用系统的OpenGL接口完成3D绘图。JOGL的基本介绍可以参见JOGL_互动百科 ,我就不搬运了。
使用Java的基本原因我猜想是为了跨平台,WorldWind可以运行在Windows、Linux和MacOS上,俺目前在Windows和MacOS上测试过,感觉Mac比Windows流畅,还没深入研究原因,俺的MBP是I5CPU,集显,Windows是E8500CPU,Nvidia Quadro显卡,据此猜测WorldWind利用CPU多过GPU。
OpenGL只负责画图,也就是包含地球、天空的面板那一部分,在GUI当中,这个面板要嵌入到一个窗口容器里,才符合用户习惯,窗口系统虽然不是重点,但也必不可少。WorldWind使用AWT而不是Swing来绘制窗口。具体可以参见 java.awt_互动百科 ,这里不再展开。
OpenGL地球面板大致是个MVC架构,基本的View是WorldWindowGLCanvas,实现WorldWindow接口,基本的Controller是
StereoOptionSceneController,但是主要方法都在AbstractSceneController里,实现SceneController接口。使用PropertyChangeListener来传递和处理UI和通信消息,实现Model、View与Controller之间的绑定。
顶级类层次结构如下图
基本上所有重要的接口都继承自WWObject,所有重要的类都继承自WWObjectImpl,这两样是对应的,每个WWObjectImpl的子类都会继承一个WWObject的子接口。WWObject的定义是这样的:
public interface WWObject extends AVList, java.beans.PropertyChangeListener, MessageListener
可见继承了两个Listener接口,用来处理消息,这在上面已经提到了。而奇葩的是,还继承了一个AVList,这个东西基本上就是一个Map,用来读取和保存配置文件里的keyvalue对,因此很多类本身都自带配置的keyvalue对,这些配置是创建类的工厂在创建时从文件里读出来的。这样处理配置文件的手法俺还是第一次见到,俺自己写代码的话,读取配置这种事一般会封装一个helper类,当个utility来处理,肯定不会拿来当顶层类。
WorldWind的核心是三样东西:模型、地形、图层,模型决定基本的几何参数,也是放置地形和图层的位置基准。地形是附在模型上的栅格,从高程数据中生成出来,表示地表的起伏变化。图层通常是附在模型或者地形栅格上的图片纹理,但也有一些例外,比如星空图层、比例尺图层,控件图层,罗盘图层等,都不依附于球体模型。这部分内容较多,下次再详细讲。
页:
[1]