国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

用Java開發3D游戲之創建場景

2019-11-18 11:12:36
字體:
來源:轉載
供稿:網友


  本文將用一個java 3D游戲來介紹Checkers3D以及如何使用它創建一個場景,該場景包含深綠色和藍色間隔的平鋪表面,其軸向是沿著x和z軸,一個藍色的背景和一個浮動的可以從兩個不同的方向照亮的球體。用戶(觀察者)能通過移動鼠標移動該場景。

  圖1中左邊的快照顯示出程序起始的視圖;右邊的顯示出用戶移動一點后的場景圖。

用Java開發3D游戲之創建場景(圖一)
圖1.起始和后來的視圖

  Checkers3D游戲展示了Java 3D編程中許多共同之處及一些技巧。例如,3D場景的顯示是使用Java 3D Canvas3D類完成的-這個類必須與Java的Swing組件集成到一起。所有的Java 3D應用程序要求一個場景圖,而Checkers3D展示了怎樣添加基本的外形、光源(環境光和有向光)和背景。該場景圖用作文檔的一種可視化形式,并且借助于Daniel Selman的Java3dTree包可以輕易地生成其信息的一種文本版本。

  地板和球利用了Java 3D的QuadArray、Text2D和球體幾何體類。地板是在一個QuadArray中的一系列的四邊形;而標簽是利用Text2D對象沿著地板的主軸放置的。球體的實現將向用戶展示怎樣著色,點亮和放置一個3D外形。用戶從一種視圖來觀察該3D世界。你將看到如何在初始化過程中確定球體的位置,以及如何在執行期間通過使用Java 3D的OrbitBehavior類來移動該球體的。

  一、 Checkers3D的類圖

  圖2中的類圖顯示該Checkers3D應用程序的所有的公共和私有數據及方法。

用Java開發3D游戲之創建場景(圖二)
圖2.Checkers3D的類圖

  Checkers3D是該應用程序最頂層的JFrame。WrapCheckers3D是一擁有場景圖的JPanel,該場景圖可經由一Canvas3D對象來觀看。 CheckerFloor創建地板子圖(如瓷磚,軸,等等),這里相同顏色的瓷磚是用一個ColoredTiles對象描述的。

  二、 集成Java 3D和Swing

  Checkers3D是一個JFrame-假如必要的話,可以把GUI控件,例如Swing文本域和按鈕等放置到它上面。在本文的實例中,我創建了一個WrapCheckers3D(一個JPanel)的實例并把它放到一個BorderLayout的中心:

c.setLayout( new BorderLayout( ) );
WrapCheckers3D w3d = new WrapCheckers3D( );//3D畫布的面板
c.add(w3d, BorderLayout.CENTER);
  在該場景上的Canvas3D視圖是在WrapCheckers3D中創建的:

public WrapCheckers3D( ){
setLayout( new BorderLayout( ) );
//另外的初始化代碼
GraphicsConfiguration config =SimpleUniverse.getPReferredConfiguration( );
Canvas3D canvas3D = new Canvas3D(config);
add("Center", canvas3D);
//另外的初始化代碼
}
  當使用Canvas3D時必須小心,因為它是一個輕量級的GUI元素(在一個OS生成的窗口之上的薄層)。重量級的組件無法輕易地與輕量級的Swing控件相結合;這些控件大部分由Java生成。假如把Canvas3D對象嵌入到Jpanel中就可以避免這些問題;那么該面板就可以安全地與基于Swing構建的應用程序的其它部分集成到一起。

  提示 在j3d.org(http://www.j3d.org/tutorials/quick_fix/swing.Html)上有關于把Canvas3D和Swing相結合的具體討論。

  與前面的章節中的應用程序相比,這里沒有更新/繪制動畫循環。這是不必要的,因為Java 3D包含它自己的機制來監視場景變化并且初始化著色。下面是該算法的偽碼形式:

while(true){
處理用戶輸入;
if (存在請求) break;
執行行為;
if (場景圖發生變化)
遍歷場景圖并著色;
}
  行為是一些場景圖結點。它們包含能夠影響圖中其它部分的代碼,例如移動外形或改變燈光。它們可以用于監控圖形,從而把細節信息傳遞到應用程序中的非3D部分。

  有關細節可能要比這個偽代碼中所建議的更為復雜,例如,Java 3D使用多線程來執行并行遍歷和著色。然而,了解一下這個過程的大致思想將有助于你理解本文后面的代碼。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 保康县| 华宁县| 高陵县| 喜德县| 锡林浩特市| 昭苏县| 东兴市| 射洪县| 彩票| 卓资县| 黎平县| 广河县| 中宁县| 维西| 定边县| 修文县| 黄大仙区| 竹山县| 乾安县| 花莲县| 益阳市| 南通市| 张家口市| 渭源县| 永安市| 贞丰县| 澄江县| 华池县| 雷山县| 盐津县| 屯昌县| 抚松县| 西和县| 阜阳市| 青龙| 平谷区| 夏邑县| 安仁县| 新巴尔虎右旗| 平邑县| 兰坪|