一、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) 方法进行逐层以及表面物体的渲染

world wind java_WorldWind Java 版学习:1、启动过程相关推荐

  1. 20165234 [第二届构建之法论坛] 预培训文档(Java版) 学习总结

    [第二届构建之法论坛] 预培训文档(Java版) 学习总结 我通读并学习了此文档,并且动手实践了一遍.以下是我学习过程的记录~ Part1.配置环境 配置JDK 原文中提到了2个容易被混淆的概念 JD ...

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

    一.JOGL使用介绍 使用 JOGL,需要构造GLCapabilities.GLCanvas 和 GLEventListener 的对象,其中 GLCapabilities 对象用于构造 GLCanv ...

  3. 微信公众号开发-Java版学习笔记

    微信公众号开发整体不难,主要是熟悉微信公众号常用的一些接口文档,然后会一门后端语言(比如java)即可. 罗召勇老师教程:微信公众号开发-Java版(蓝桥罗召勇) 微信公众号文档:微信公众号官方文档 ...

  4. WorldWind Java 版学习:10、服务器响应

    一.服务器处理请求过程 1.服务器启动时,会先读一系列配置文件,然后启动 SocketListener 进行监听 ApplicationServerLauncher.main(String[]) li ...

  5. worldwind java加载3ds_WorldWind Java 版学习:3、配置文件的读取

    1.在 WorldWindow 启动过程中,直接读取的配置文件有三个: 一个是在程序启动前,使用静态模块配置程序的配置文件 System.setProperty("gov.nasa.worl ...

  6. Java 虚拟机学习笔记 | 类加载过程和对象的创建流程

    前言 创建对象是 Java 语言绕不开的话题,那么对象是如何创建出来的呢?我们今天就来聊一聊.对象创建第一步就是检查类是否加载,而类的加载又牵扯到类的加载过程.如果单说对象的创建而绕开类的加载过程,感 ...

  7. Delta3d框架学习--程序启动过程详解

    一个Delta3d程序启动过程详解 一.初始化一个dtGame::GameApplication的实例,dtGame::GameApplication* app = new dtGame::GameA ...

  8. 2015版uboot的启动过程及网卡驱动结构分析

    启动流程和上篇博文介绍的rtems类似 首先是start.s: 在这里选择arm的arm7作为例子分析,代码:/arch/arm/cpu/armv7/start.s /** armboot - Sta ...

  9. WorldWind Java 版学习:8、事件响应

    1.在 WWPanelImpl 构造时,会调用 createView 构造一个 View 对象,此处是 BasicOrbitView 对象,在构造 BasicOrbitView 对象的时候,会构造一个 ...

最新文章

  1. php backdoor creator encoder,Raven2 渗透(phpmailer漏洞+UDF提权)
  2. Android之linux之基础建设之窗口系统
  3. 【好书试读】大数据处理之道
  4. python中函数和方法的区别
  5. cmd mysql 报错_客户端cmd打开mysql,执行插入中文报错或插入中文乱码解决方案
  6. CRC循环校验码原理及计算举例
  7. 消息队列入门案例-环境搭建
  8. FluentAspects -- 基于 Fluent API 的 Aop
  9. 有关SQL Server中日期的常见问题解答
  10. 《Using Docker》书评和与作者Adrian Mouat的问答
  11. 0.96寸OLED 屏幕SSD1306驱动四脚原理图PDF
  12. php7isapi,Windows7 IIS7下以FastCgi和ISAPI方法安装配置PHP5教程
  13. 【大咖说】激活数据价值,永洪科技智胜法则
  14. android实现日历
  15. 腾讯云云开发CTA认证题库
  16. html设置闹钟提醒,设置闹钟标签.html
  17. VS code 使用技巧-设置鼠标滚轮翻页速度(Mac版本)
  18. 写自己的故事,帮别人说话
  19. aws mysql 费用_AWS 免费一年套餐详解
  20. xshell免费版绿化版下载

热门文章

  1. 全面分析RHCE7(红帽认证工程师)考试题目之 ----WEB 服务器 篇
  2. 删除目录下的重复文件,优先删除副本
  3. 开放源代码的微微信.NET 0.8 版公布了
  4. Zotero使用:2023届重庆邮电大学硕士论文参考文献格式。
  5. 资深测试老司机优化软件测试成本的 7 个步骤
  6. TiDB 助力东南亚领先电商 Shopee 业务升级
  7. 如何有效使用Project(1)--编制进度计划、保存基准
  8. 最近一百年,全球涌现过哪些最顶尖的、最赚钱的公司?它们的共性是什么?
  9. java 项目 q a 表设计_《JAVA程序设计项目案例训练》期末试卷(A卷)..doc
  10. c语言打字游戏下落时间,打字游戏 C语言