日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

發布時間:2023/12/19 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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、启动过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。