博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WorldWind Java 版学习:1、启动过程
阅读量:6721 次
发布时间:2019-06-25

本文共 3102 字,大约阅读时间需要 10 分钟。

一、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

你可能感兴趣的文章
gallery长按监听
查看>>
创建swap分区脚本
查看>>
CI框架获取post和get参数 CodeIgniter
查看>>
VRRP虚拟冗余路由协议配置实验:
查看>>
Hanlp在ubuntu中的使用方法介绍
查看>>
阿里分布式事务框架GTS开源啦!
查看>>
论router-on-a-stick和VLAN-IF
查看>>
网络分流器-网络分流器-5G的关键技术第一篇
查看>>
区块链之Hyperledger(超级账本)Fabric v1.0 的环境搭建(超详细教程)
查看>>
大快搜索数据爬虫技术实例安装教学篇
查看>>
Navicat使用教程:从MySQL中的多个表和视图中获取行计数(第3部分)
查看>>
进程和计划任务
查看>>
python机器学习实战(一)
查看>>
rm删除破折号开头的文件或目录
查看>>
找工作的程序员必懂的Linux
查看>>
滴滴发布2018年度总结:又有网友炸锅了
查看>>
PCB画板软件那么多,我到底该学习哪一个?
查看>>
linux创建用户与用户组
查看>>
如何从Spotify Music中删除DRM?
查看>>
VR开发者为Labo VR辩护 预计这可能是任天堂进军VR的开始
查看>>