world wind java_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) 方法进行逐层以及表面物体的渲染
world wind java_WorldWind Java 版学习:1、启动过程相关推荐
- 20165234 [第二届构建之法论坛] 预培训文档(Java版) 学习总结
[第二届构建之法论坛] 预培训文档(Java版) 学习总结 我通读并学习了此文档,并且动手实践了一遍.以下是我学习过程的记录~ Part1.配置环境 配置JDK 原文中提到了2个容易被混淆的概念 JD ...
- WorldWind Java 版学习:1、启动过程
一.JOGL使用介绍 使用 JOGL,需要构造GLCapabilities.GLCanvas 和 GLEventListener 的对象,其中 GLCapabilities 对象用于构造 GLCanv ...
- 微信公众号开发-Java版学习笔记
微信公众号开发整体不难,主要是熟悉微信公众号常用的一些接口文档,然后会一门后端语言(比如java)即可. 罗召勇老师教程:微信公众号开发-Java版(蓝桥罗召勇) 微信公众号文档:微信公众号官方文档 ...
- WorldWind Java 版学习:10、服务器响应
一.服务器处理请求过程 1.服务器启动时,会先读一系列配置文件,然后启动 SocketListener 进行监听 ApplicationServerLauncher.main(String[]) li ...
- worldwind java加载3ds_WorldWind Java 版学习:3、配置文件的读取
1.在 WorldWindow 启动过程中,直接读取的配置文件有三个: 一个是在程序启动前,使用静态模块配置程序的配置文件 System.setProperty("gov.nasa.worl ...
- Java 虚拟机学习笔记 | 类加载过程和对象的创建流程
前言 创建对象是 Java 语言绕不开的话题,那么对象是如何创建出来的呢?我们今天就来聊一聊.对象创建第一步就是检查类是否加载,而类的加载又牵扯到类的加载过程.如果单说对象的创建而绕开类的加载过程,感 ...
- Delta3d框架学习--程序启动过程详解
一个Delta3d程序启动过程详解 一.初始化一个dtGame::GameApplication的实例,dtGame::GameApplication* app = new dtGame::GameA ...
- 2015版uboot的启动过程及网卡驱动结构分析
启动流程和上篇博文介绍的rtems类似 首先是start.s: 在这里选择arm的arm7作为例子分析,代码:/arch/arm/cpu/armv7/start.s /** armboot - Sta ...
- WorldWind Java 版学习:8、事件响应
1.在 WWPanelImpl 构造时,会调用 createView 构造一个 View 对象,此处是 BasicOrbitView 对象,在构造 BasicOrbitView 对象的时候,会构造一个 ...
最新文章
- php backdoor creator encoder,Raven2 渗透(phpmailer漏洞+UDF提权)
- Android之linux之基础建设之窗口系统
- 【好书试读】大数据处理之道
- python中函数和方法的区别
- cmd mysql 报错_客户端cmd打开mysql,执行插入中文报错或插入中文乱码解决方案
- CRC循环校验码原理及计算举例
- 消息队列入门案例-环境搭建
- FluentAspects -- 基于 Fluent API 的 Aop
- 有关SQL Server中日期的常见问题解答
- 《Using Docker》书评和与作者Adrian Mouat的问答
- 0.96寸OLED 屏幕SSD1306驱动四脚原理图PDF
- php7isapi,Windows7 IIS7下以FastCgi和ISAPI方法安装配置PHP5教程
- 【大咖说】激活数据价值,永洪科技智胜法则
- android实现日历
- 腾讯云云开发CTA认证题库
- html设置闹钟提醒,设置闹钟标签.html
- VS code 使用技巧-设置鼠标滚轮翻页速度(Mac版本)
- 写自己的故事,帮别人说话
- aws mysql 费用_AWS 免费一年套餐详解
- xshell免费版绿化版下载
热门文章
- 全面分析RHCE7(红帽认证工程师)考试题目之 ----WEB 服务器 篇
- 删除目录下的重复文件,优先删除副本
- 开放源代码的微微信.NET 0.8 版公布了
- Zotero使用:2023届重庆邮电大学硕士论文参考文献格式。
- 资深测试老司机优化软件测试成本的 7 个步骤
- TiDB 助力东南亚领先电商 Shopee 业务升级
- 如何有效使用Project(1)--编制进度计划、保存基准
- 最近一百年,全球涌现过哪些最顶尖的、最赚钱的公司?它们的共性是什么?
- java 项目 q a 表设计_《JAVA程序设计项目案例训练》期末试卷(A卷)..doc
- c语言打字游戏下落时间,打字游戏 C语言