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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

用Java開發(fā)3D游戲之創(chuàng)建浮動(dòng)的球體

2019-11-18 11:12:29
字體:
供稿:網(wǎng)友


  在本系列的第一篇中,我們討論了如何在開發(fā)java 3D圖形程序中創(chuàng)建外形、燈光和背景。在隨后的本篇中,我將向你展示如何為Checkers3D程序創(chuàng)建浮動(dòng)的球體。

  一、 地板

  地板是由瓷磚(用我的ColouredTiles類創(chuàng)建)和軸標(biāo)簽(用Java 3D中的Text2D工具類構(gòu)建)組成的。圖5顯示了地板分支子圖,以前隱藏在圖3中的一個(gè)"Floor Branch"方框中。

用Java開發(fā)3D游戲之創(chuàng)建浮動(dòng)的球體(圖一)
圖5.場(chǎng)景圖的地板分支子圖

  這個(gè)地板子圖是用我的CheckerFloor類的一個(gè)實(shí)例構(gòu)建的,它可以通過調(diào)用getBG()方法來使用:

sceneBG.addChild(new CheckerFloor().getBG());//添加地板
  這個(gè)CheckerFloor()構(gòu)造器使用嵌套的循環(huán)來初始化兩個(gè)ArrayLists。blueCoords列表包含藍(lán)色瓷磚相關(guān)的所有坐標(biāo),而greenCoords包含綠色瓷磚相關(guān)的坐標(biāo)。一旦填充完ArrayLists,連同用于生成瓷磚的顏色被一起傳遞到ColouredTiles對(duì)象中。ColouredTiles對(duì)象是一個(gè)Shape3D的子類,因此可以被直接添加到地板圖中:

floorBG.addChild( new ColouredTiles(blueCoords, blue) );
floorBG.addChild( new ColouredTiles(greenCoords, green) );
  原點(diǎn)處的紅色方格(見于圖1)是用相似的方式構(gòu)建的:

Point3f p1 = new Point3f(-0.25f, 0.01f, 0.25f);
Point3f p2 = new Point3f(0.25f, 0.01f, 0.25f);
Point3f p3 = new Point3f(0.25f, 0.01f, -0.25f);
Point3f p4 = new Point3f(-0.25f, 0.01f, -0.25f);
ArrayList oCoords = new ArrayList( );
oCoords.add(p1); oCoords.add(p2);
oCoords.add(p3); oCoords.add(p4);
floorBG.addChild( new ColouredTiles(oCoords, medRed) );
  該方格的中心在XZ平面的(0,0)處并且在y軸稍微向上(+0.01單位)的地方,這樣就可以在瓷磚上看到它。

  該方格的每一邊的長(zhǎng)度為0.5單位。在ArrayList中的四個(gè)Point3f點(diǎn)以逆時(shí)針方向存儲(chǔ)。對(duì)于在blueCoords和greenCoords中的每一組的四個(gè)點(diǎn)都是如此。圖6顯示出方格中的點(diǎn)的順序。

用Java開發(fā)3D游戲之創(chuàng)建浮動(dòng)的球體(圖二)
圖6.從上方看上去的OrigMarker

  二、 著色的瓷磚

  我的ColouredTiles類擴(kuò)展了Shape3D并用相同的顏色定義瓷磚的幾何體和外觀。該幾何體使用一個(gè)Java 3D QuadArray來描述瓷磚為一系列的四邊形。其構(gòu)造器是:

QuadArray(int vertexCount, int vertexFormat);
  vertexFormat是一個(gè)靜態(tài)整數(shù)集合-它指定稍后被初始化的該四邊形的各種信息如坐標(biāo)、顏色和法線。在ColouredTiles中,QuadArray平面是用下面一行代碼創(chuàng)建的:

plane=new QuadArray(coords.size(),GeometryArray.COORDINATESGeometryArray.COLOR_3);
  size()方法返回在ArrayList中的坐標(biāo)數(shù)目。坐標(biāo)和顏色數(shù)據(jù)是在createGeometry()中提供的:

int numPoints=coords.size();
Point3f[] points=new Point3f[numPoints];
coords.toArray(points);//ArrayList->數(shù)組
plane.setCoordinates(0,points);
Color3f cols[]=new Color3f[numPoints];
for(int i=0;i<numPoints;i++)
cols[i]=col;
plane.setColors(0,cols);
  一個(gè)四邊形的坐標(biāo)順序的正確指定是極為重要的。一個(gè)多邊形的前面是指頂點(diǎn)形成一個(gè)逆時(shí)針方向環(huán)時(shí)的那一面。區(qū)別開前面與后面對(duì)于光線和隱藏面的選擇是非常重要的;并且默認(rèn)情況下,在一個(gè)場(chǎng)景中只有多邊形的前面是可見的。在這個(gè)應(yīng)用程序中,瓷磚是有向的-它們的前面朝向y軸。

  必須確保一個(gè)凸的平面多邊形的每個(gè)四邊形中的頂點(diǎn)可以是折衷的(comPRomised)。然而,在坐標(biāo)數(shù)組中的每個(gè)四邊形不需要連接到鄰近其它的四邊形-正好適于表達(dá)瓷磚。既然一個(gè)四邊形的幾何體不包括法線信息,那么一個(gè)Material結(jié)點(diǎn)組件不可能被用來指定該四邊形的在照亮?xí)r的顏色。我可以使用一個(gè)ColoringAttributes,但是第三種選擇是設(shè)置幾何體中的顏色,例如使用語句"plane.setColors(0,cols);"。這個(gè)顏色將固定不變-不受場(chǎng)景中燈光的影響。

  一旦完成,用下列語句設(shè)置Shape3D的幾何體:



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 磐安县| 射洪县| 尼勒克县| 静安区| 南皮县| 辽阳县| 油尖旺区| 渝中区| 崇礼县| 嘉义县| 南皮县| 丹寨县| 岐山县| 始兴县| 日照市| 阿城市| 乌苏市| 光山县| 新民市| 临夏市| 巴青县| 抚松县| 松滋市| 靖西县| 木里| 应用必备| 恩施市| 道孚县| 连南| 德令哈市| 旅游| 鲜城| 什邡市| 弥勒县| 河西区| 沙坪坝区| 广昌县| 五寨县| 永福县| 沿河| 桦川县|