1、 (2)代码编写在编写代码部分,我们组遇到了许多问题,因为是从未接触过的知识,所以在编程过程中经常报错,为了在规定时间内完成任务,我们组就现学现用,在网上下载相关的代码,结合a_AP手册一遍又一遍的反复读,手册上没有的类就上网查,遇到英文就用翻译软件翻译了来看,最后再一步又一步的解决编程过程中的一个个erro首先介绍一点必备的ava3相关知识Java的场景图结构:Jva3实际上是Java语言在三维图形领域的扩展,与Java一样,Java3D有纯粹的面向对象结构。JaaD的数据结构采用的是eneGphsStructur(场景图),就是一些具有方向性的不对称图形组成的树状结构(图)。我们在一个va
2、3D应用程序看到的逼真三维场景从程序的角度看来,实际就是由va3D定义的一系列的对象,这些对象不是杂乱无序,对象之间也不是毫无关系。如果想让三维图像正常显示,必须在这两点上遵循JavD场景图的规定。观察图1,Jav3场景图的树结构由各种各样的对象组成:在图中出现的这些对象都实现了Java中有重要的意义的类,从逻辑上我们将它们分为三类:根节点(Root):Virtanverebje节点(Ne):ocaOject、BanchGopNodes、BehvirNe、Sha3DNod叶子节点(Lef):Appearace、Gomry.图:在应用中的ava3D场景图场景图中线和线的交汇点称为节点(Nod),
3、这些节点都是aaD类的实例(Intncofass),节点之间的线表示各个实例之间的关系。rtUnverse是根节点,每一个场景图的VirtualUnivrs是唯一的。在Virtualnierse下面是Locale节点,每个程序可以有一个或多个Loale,但同时只能有一个L处于显示状态,就好象一个三维世界非常大,有很多个景点,但我们同时只能在一个景点进行观察。Java3D允许从一个Loca跳到另一个Locae,不过绝大多数程序只有一个ocal。每一个Lole可以拥有多个BrahGroup节点。所有三维形体的其位置信息(ranformrNode)都建立在BranhGru节点之上。TransfrmG
4、rupNode用来设定Sape3D在ViuaUniver中的位置。Sape3DNode是三维图形节点,这个节点的实体放映在最后的显示画面中,就是三维世界中的每个形体。包括正方体、球体以及任何形状和外观的三维形体。位于场景图最下层的是两个叶子节点:三维体的外观(Appeaan)和几何信息(eomety),这两个节点定义了一个三维体的显示效果。ViewPlator位于图的另一个分枝上,与前面所有描述三维体的性质的概念不同,Viewlaom和iew都是用来定义观察者的信息。上面所列的概念很多,但是对于建立一个简单的a3D程序,我们至少需要了解三个概念:虚拟宇宙(VrtalUvese)、场景(Loca
5、e)、坐标系统。下面是一些相关代码的具体实现:1.制作象棋程序的窗体privae ChessFam() stpane = w SePanel();cvasfaco =ew nvasactro(Simpeniverse.etPreferredCiurato(); his.stize(660, 60); ths.setResizbl(alse); tis.setLocatonReatveo(null); thisetTile(中国象棋3D);tssetDealtloeperaio(Jrame.EXT_O_SE); this.add(canvasfatro.getCanvasD(), BodeLyo
6、ut.CETER); ti.add(etpael, BordrLautEAT); 比较简单,就不介绍了.构建棋板pbi Cavasactroy(GrphicsConfigurtonconfg) canvas3d= new ns3D(cnfig); bodi=nw BodinSphere(nw3d(, , ),1000);statabs =new AbsChess(炮,new Pit(2, ), Coor.d);/开始节点信息 ndab= nw AbChes(, w oint(3, ), Clore);/结束节点信息Sipiversenivere= newSimpleUnivee(avs3d);
7、/创造一个虚拟场景 BrancGoup branchgou= ew rachGroup();/创建一个组群 ansgrop = new TranformGop();/定义摆放位置 transroup.etCaality(rasformGroup.AOW_TANSFORM_WRITE);traroup.stCapility(ranormGrup.ALOTRASFRM_REA); trnsgrop.dChild(aeBdLit();/添加背景色和光线 transgraddChi(eatChesbard();/添加棋板 transgrouaddCld(reattrtIf();/添加开始信息 trns
8、group.adChild(createInfo();/添加结束信息Arayst rr = new Arrayi();/添加棋子 for (ACess a: ChsConig.hssPeces) CessPiece p = new Chesiece(a.geChessNae(),a.etesPnt(), .gthesCoor(); arr.ad(p); tansgrup.ddCild(cp.tieceGup();pecaction ewPieActon(rr, start, endbs); branchgrop.addChild(trangrou);/将对象添加到组群里 Orbitehvio
9、orbit =nw rbitBeavr(cnvs3d,/定义对象能否通过鼠标选择 OrbitBhavior.VESE_A | ObitBehaior.SOP_M);orit.setSchedulinBods(boung);Viewinglafrm viewngPlatoruiere.etViwnlfrm();/添加人物视角 viwigPlaom.setNmiaVewigTransfo(); vewigPtrm.tViwPlomehvio(rbt);verseaddBrancGph(brachgo);cnvas3d.adduseListener(ths); cvas3d.adouseMotinL
10、isener(is);3.构造棋子pbli clasAsChe /定义一个棋子的数据结构,包括棋子名字,坐标,颜色public AbsCess(har cheme, Pont chessPoin, Colr chessoor) super();essame = essNam; ssoit = cessPin;Cssolor hssCoor;publc char gtCssNam() reurn ChessNme; pulicvoid seChesName(chr cessNa) ChessName= hessNam;pubic PntgehsPnt()returCheson;public vo
11、setChessPint(Poit hessPoint) ChssPoin = chessoin; pulic ColorgethesCoor() retun Cesolor; pbic od setChsolo(Color hesso) ChesClor= chessColor;rivate chr Chesae;private oin ChesPoit; priate Colr ChesColo;4.构造D棋子pblic class ChsieeextendsAhs /类的继承 public ChessPie(cr hesName, intchesPon, Coor chessol)supe(cssNam, chsso, chssolo); icegroup =wTrnsformGroup();pice
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1