《Java3D总结五篇.docx》由会员分享,可在线阅读,更多相关《Java3D总结五篇.docx(16页珍藏版)》请在第一文库网上搜索。
1、Java3D总结五篇第一篇:Java3D总结Java3D介绍Java3d是适应与internet环境下开发的三维图形开发包,它针对底层库OPenG1和DirectX的封装。这样使得他们摆脱了单机三维束缚,面向与网络方向。OpenG1:图形编程库。(如坐标的变化,基本形体,关照效果等)DirectX:微软公司三维库传统下的Internet图形处理,数据不是从本地硬盘中读取,运行环境也不是事先安装好的,如果用OpenG1等传统的可视手段,只能在Web服务器端生成图像,在发到客户端显示。但是当前的网络传输能力是不可能满足的。(但是java3的是传输的不是图像本生,而是三维图像生成的程序和数据)当前下
2、的Java3d是这样的:java3d是基于OpenG1或DirectX底层的APIo他和java一样需要安装Jre(java虚拟机)一次编程,跨平台运行。所以说他很好的运用了pc机的硬件加速器。(当前我们现在用的是WebStart来下载java3d程序,他保证了如果服务器端没有升级变化时,只需要下载一次,以后就可以直接运行)。Java3d本质是一个交互式三维图形应用编程接口(api),他可以和java2d,swing,awt结合。其目标是:让用户在浏览器中观看或操作三维动画图形。一次编程,到处运行。适应不同的软件平台。适应各种显示环境和输入设备。Java3d的编程思想Java3d编程的空间采用
3、场景图结构,是一种有向无环图。如图:1oca1e下有一到多个branchgroup节点,在他下有一个基准坐标系transformgroup,就可以相对此坐标系摆放所需的形体(shape3d)也可以给出形体的外观叩PearanCe及geometryo所以:他就是将许多对象安放在这个虚拟空间的过程,在设置各个方面的属性,如:形状,位置,外观,贴图,透明效果等;再在三维环境下设置灯光,雾,背景,声音等。最后定义我们自己的观察角度,最终达到效果。基本形体的生成Java3d的Com.sun.j3d.uti1s包中提供一些基本形体,如长方体,圆柱体,圆锥体等。Java3d包:Com.sun.j3d.uti
4、1s包:包括一些sun公司提供的一些3d程序中经常使用的apioJavax.media.j3d包:提供了java3d的基本apioJavaxwecmatch包:提供了与矢量运算相关的一些api。Java3d场景的组建一个java3d的场景图是由一组具有父子关系的节点对象形成的树状结构。在一个树状结构中,第一个节点是根节点。(通过从根节点到其他节点的弧可以访问其他节点)这些弧是不循环的。一个场景图是由以方位对象的跟节点的若干棵树组成的。而节点组件和引用弧并不是场景图树的组成部分。场景图路径:从场景图的根节点到指定的页节点之间的路径是这个页节点的场景路径。Java3d场景图中的每个场景图路径都是可
5、以完全指明其页节点的状态信息。状态信息包括可视对象的方位,方向,和尺寸。Java3d的渲染系统是按照他的场景顺序来渲染的。实例分析:当两个TransformGroup对象共享同一个shape3d叶节点对象作为他们各自的子节点时,是不允许的(不能将一个Sh叩e3d安放在不同的地方)。记住:一个页节点对象只能拥有一个父节点。换句话说,从1oca1e对象到页节点只有一条路径。一个定义不合理的场景图的java3d程序是可以编译通过的,但是不能被渲染。如果是这样的话当屏幕一片漆黑的时候,就是需要考虑是否场景图逻辑错误存在于设计的场景中了。Java3d的几个基本类1.Node类:是Group和Ieaf类的
6、抽象父类,node类定义了子类中一些重要的公用的方法。2.Group类:Group类是用来指明可视对象在虚拟世界中方位的父类。他的两个子类是BranchGroup和TransformGroup0BranchGroup需要设置(一些情况):能力位(ForBranchGroupnodes,specifiesthatthisBranchGroupa11owsdetachingfromitsparento)3 .1eaf类:1eaf类是用来指明虚拟世界中的可视对象的声音,形状,和行为的父类。他的一些子类包括Sh叩e3dz1ight,behavior和SOUnd。这些对象不能有子节点但是可以引用Node
7、Componento4 .NodeCompenent类:NodeComponent类是用来描述Sh叩e3d节点的几何特性,外观,纹理,材质的父类。NodeComponent不是场景图的组成部分,当时在场景中可以引用他们。一个NodeCOmPonem可以被多个ShaPe3d对象同时弓I用。编写java3d的步骤:(1)仓!J建Canvas3d又寸象。(2)创建一个VirtUa1UniVerSe对象。(3)创建1oca1e对象,将他与VirtuaIUnivers对象联系起来。(4)构造视野子图。a.创建一个Viewob.创建一个ViewPIatformoc.创建一个PhysicaIBody对象。d
8、.创建一个PhysicaIEnvironment无像。e.将ViewPaItform,PhysicaIBody,PhysicaIEnvironment和Canvas3D对象联系到View对象上。(5)构造内容子图。(6)编译子图。2(7)将子图插到1oca1eo默认的,图像板居中放置于SimP1eUniVerSe的原点。默认的方向是与z轴方向垂直,从这个位置,X轴水平的穿过图像板,右侧是正轴,y轴垂直的穿过图像板,上面是正半轴。结果点(0,0,0)位于图像板的正中间。激活和编译将一个子图插入到1oca1e后,这个子图就是处于激活状态,结果这个子图中的每个对象都被激活。在对象被激活之前,如果对象
9、对应的能力没有被指定的话,那么处于激活状态对象的对应参数是不能够修改的。BranChGroUP对象可以是编译的。Voidcompi1e():编译与该对象有关的BranchGroup,然后创建一个编译过的场景。注意:在基本的编程步骤中没有开始渲染这一步。Java3d渲染工作是位于一个无限的循环中,只要一个虚拟世界中的VieW实例变为激活的就进入该循环。能力和性能性能:就是对系统的一种优化方式,当前主要用的是BranChGrOUP下的ComPiIe方法,他主要的功能是一条路径上有两个TransformGroup对象时,合并为一个,另一个可就是合并具有固定物理关系的Shape3d对象,但是当能力没有
10、被设置的时候,这些优化是可能的,其他的优化也是可能的。这种转化最重要的效果是提高了渲染的性能。能力:也就是我们说的能力位置,它的设置目的是当我们要改变某些Sh叩e3d在编译后改变其状态或位置及加动画等变动时,必须要在程序编译后者激活之前设置能力。不然的话就有异常报出。点,线,面的领JavaSD中线的生成是由1ineArray等对象生成的,而1ineAttributes的功能则类似于PointAttributes对象,可以设置直线的宽度,反走样效果和样式.创建直线数轨寸象1ineArray1ine=new1ineArray(6z1ineArray.COORDINATESI1ineArray.CO
11、1OR_3)Jine.setCoordinates(OzVert:);设置直线的坐标数组1ine.setCo1ors(Ozco1or);设置直线数组的颜色坐标1ineAttributesIa=new1ineAttribUteS();创建直线属性对象IaSet1ineWidth(1Of);设置直线的宽度1a.set1ineAntia1iasingEnab1e(true);/设置直线的渲染效果Appearanceap=newAPPearanCe();创建对象的夕卜观属性叩.Set1ineAttributes(Ia)/设置1ineAttributes属性this.setGeometry(1ine);
12、/设置几何体形状this.setAppearance(ap);设置外观属性2D和3D文字的生成有两种方法可以将文字加到JAVA3D场景中。一种是Text2d类,一种是Text3d类。Text2d对象是具有文字纹理的多边形(这个多变形是透明的只要纹理部分是可见得)。Text3d对象是文字形状的3d几何体。注意:Text3d是Geometry的子类,因此Text3d对象是一个NocIeComponent,他可以被多个shape3d对象引用。Appearance对象:主要功能是表示一些对象的外观属性,是对对象外观的一种抽象,它的成员变量保存了一些属性的数据,而不说具体的渲染方法(所以可以重复的给不同
13、的shape3d运用),具体的渲染方法留给指定该外观属性的几何体,并且他在java3d中只保留一份外观数据,节省存贮空间。这也是将数据和操作抽象分离的作法,也是面向对象的设计方法。(这也是优化程序减少的内存的方法)。Shape3d对象可能会同时引用一个Geometry对象和一个APPearanCe又寸象。Appearance常用方法:SetPointAttributes,Set1ineAttribute,SetPoIygonAttributes,SetMateriaI,SetCoIoringAttributes:设置外观属性,当Geometry设置了颜色,此方法无作用,SetRendering
14、Attributes:设置外观渲染属性。SetTransparencyAttributes:设置外观透明度属性(当设置一个Sh叩e3d为透明时能用到,如在广告牌-树)。Shape3d:维持一个Geometry对象的列表,将这些几何体与该Sh叩e3d对象关联。有两种方式可一关联几何体与Sh叩e3d,一种是继承Sh叩e3d,一种是SetGeometry()方法。Bounds:允许程序员制定一个空间范围。它的子类有:BoundingShpere,BoundingBox,BoundingPoIytope0BranchGroup对象和OrderedGroup对象BranchGroup对象:通常是整个场景
15、的跟节点,灯光背景等效果对象加在这一对象上面。OrderedGroup对象:在场景渲染的时候,它是按照下标顺序渲染的,在需要特殊效果时候才用到。DecaIGroup对象:透现一个面中的多个面一般用0rderedGroup的子类DeCaIGroUP-最典型的应用就是:在文字付着几何体表面的时候,如果不使用DecaIGroup对象,程序就无法显示正确的结果。Switch对象:Switch通常switch用在交互程序中,作为开关f不如在场景中设置一个计时器,每次计时器调用一次SetWhichChiId函数,通过指定不同的参数来控制对象可视与否。SharedGroup对象:SharedGroup可以以
16、对象为模子进行同一对象的复制。当场5景中需要大量相同物体的时候可以使用SharedGroup对象。比如构建一个住宅小区的三维场景,所有的住楼可以使用同一个SharedGroUP对象(并且可以达到同步性,那边当前这个对象在abrs中的放大缩小中使用过)。他一般只用以下对象的复制:1ightz1inkzmorph,shape,soundo其实有拷贝的方式也是可以的c1oneTree();但是拷贝只适应小的东西,这些东西可以有差异.不如TransformGroup:他重要定义局部坐标系的对象,通过他和Tranform3d及vector3d可实现形体的旋转和缩放变换。但是在这些动作实现之前必须设置能力位。关照和材质环境光(Ambient1ight)提供的是在不同位置和方向上强度都相同