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
總結
以上是生活随笔為你收集整理的WorldWind Java 版学习:1、启动过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MAC机路由管理
- 下一篇: iTunes“解决方案”发展历程及研究(