WorldWind Java 版学习:1、启动过程

一、JOGL使用介绍

使用 JOGL,需要构造GLCapabilities、GLCanvas 和 GLEventListener 的对象,其中 GLCapabilities 对象用于构造 GLCanvas 对象,将 GLCanvas 添加到相应的 Container 中用于窗口显示,实现 GLEventListener 中的init、display、reshape 等方法用于 GL 的设置和渲染,然后添加到 GLCanvas 上从而被程序调用。例子程序操作步骤如下:

1、新建 Java 工程,新建两个类,一个窗口相关类(JoglApp),一个GL相关类(JoglEventListener)

2、下载 WorldWind Java 版,解压后得到一些 jar 包和 dll 动态库文件,将其中 jogl.jar 和 gluegen-rt.jar 的加入工程 classpath 中,将 dll 文件放入系统 path 中

3、在窗口类中添加 GL 相关的代码:

                   // 创建 GLCapabilities对象

                   GLCapabilities glcaps = new GLCapabilities();

                   // 创建 GLCanvas 用于绘制

                   GLCanvas glcanvas = new GLCanvas(glcaps);

                   // 添加 GLEventListener 从而将调用 init、display、reshape 等方法

                   glcanvas.addGLEventListener(new JoglEventListener());

                   // 将 GLCanvas 添加到窗口中

                   getContentPane().add(glcanvas);

4、令 JoglEventListener 类实现接口 GLEventListener,从而实现所需的 init、display、reshape 等方法,在各个方法中添加相应的代码:

         public void init(GLAutoDrawable drawable) {

                   GL gl = drawable.getGL();

                   gl.glEnable(GL.GL_DEPTH_TEST);

                   // 状态设置    }

         public void display(GLAutoDrawable drawable) {

                   GL gl = drawable.getGL();

                   gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

                   // 具体绘制    }

         public void reshape(GLAutoDrawable drawable, int x, int y, int width,  int height) {

                   // 设置投影、视口等    }

 

二、WorldWind 启动过程介绍

WorldWind Java版是基于JOGL库进行开发的,所以同样使用了上述结构, GLCanvas 和 GLEventListener对象分别对应WorldWind中的WorldWindowGLCanvas和WorldWindowGLAutoDrawable,而GLCapabilities 对象是在WorldWindowGLCanvas对象中构造的。具体过程如下:

1、类 gov.nasa.worldwindx.applications.worldwindow.WorldWindow

         在入口 main 方法中构造了 Controller 对象,进而调用了该对象的 start 方法

2、类 gov.nasa.worldwindx.applications.worldwindow.core.Controller

         在 Controller 类中有两个重要的对象,一个是(Registry registry),用于在 WorldWind 启动过程中构造和注册某个具体的对象,另一个是(AppConfiguration appConfig),用于读取配置文件,进而初始化和配置对象

         在 start 方法最后,调用了 redraw 方法,该方法调用 getWWd 方法获取一个 WorldWindow 对象,并调用该对象的 redraw 方法

         在 getWWd 方法中,首先调用 getWWPanel 方法获的一个 WWPanel 类型的对象,而 WWPanel 对象是由 registry 创建和注册的,最终得到的是实现接口 WWPanel 的 WWPanelImpl 对象,然后调用 WWPanelImpl 类的 getWWd 方法,返回一个 WorldWindow 类型的对象,最终得到的是实现接口 WorldWindow 的 WorldWindowGLCanvas 的对象

3、类 gov.nasa.worldwindx.applications.worldwindow.core.WWPanelImpl

         在 WWPanelImpl 类中有两个重要的对象,一个是和窗口相关的(JPanel panel),一个是(WorldWindowGLCanvas wwd)

         在 WWPanelImpl 的构造函数中,依次构造了 panel、wwd 以及 m 等对象,最后将 wwd 添加到 panel 上用于显示

4、类 gov.nasa.worldwind.awt.WorldWindowGLCanvas

         在 WorldWindowGLCanvas 类中有(WorldWindowGLDrawable wwd)对象

         在 WorldWindowGLCanvas 的构造函数中,依次构造了 GLCapabilities 和 WorldWindowGLDrawable 对象,最终得到的是实现接口 WorldWindowGLDrawable 的 WorldWindowGLAutoDrawable 对象,然后调用 WorldWindowGLAutoDrawable 对象的 initDrawable 方法把添加了 GLEventListener,然后还构造了 BasicOrbitView 对象

5、类 gov.nasa.worldwind.WorldWindowImpl

         在 WorldWindowImpl 类中有(SceneController sceneController)成员,调用构造函数时进行构造,最终得到的是 StereoOptionSceneController 对象

6、类 gov.nasa.worldwind.WorldWindowGLAutoDrawable

         该类继承了 WorldWindowImpl 类,实现了 GLEventListener 接口

         在 display(GLAutoDrawable glAutoDrawable) 方法中调用了 doDisplay() 方法,进而调用 AbstractSceneController 类的 repaint() 方法,进而调用 BasicSceneController 类的 doRepaint(DrawContext dc) 方法,在 doRepaint 中创建了地形,处理了拾取,最后调用 AbstractSceneController 类的 draw(DrawContext dc) 方法进行逐层以及表面物体的渲染

转载于:https://www.cnblogs.com/redfler/archive/2012/11/02/2750812.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值