二java3D技术基础
2.1简介?场景图(scenegraph)的数据结构来为三维场景及其中的三维物体建模和控制,提供了层次较高、交互能力很强的API编程接口。强的API编程接口。是OpenGL、DirectX的快速、高效率实OpenGL、DirectX的快速、高效率实现的编程平台,用户只要关心场景及其物体的构造
问题,无需过多关心具体细节的实现。面向对象的
设计方法;用户交互和控制能力强与多种3D图形文件格式具有装入接口与多种3D图形文件格式具有装入接口(.3DS;.OBJ;.SLDetc.)层次化结构的场景图
?
???
2.2
Java3D坐标系
1)世界坐标系世界坐标系(worldcoordinateSystems),该坐标
系统主要用于
计算机图形场景中的所有图形对象的空间定位,包括观察者的位置、视线等等。计算机图形系统中涉及的其它坐标系统都是参照它进行定义。世界坐标系也称为用户坐标系。2)物体坐标系(局部坐标系)局部坐标系(LocalCoordinateSystem),主要为考察物体方便起见,独立于世界坐标系来定义物体几何特性,通常是在不需要指定物体在世界坐标系中的方位的情况下,使用局部坐标系。一旦你定义“局部”物体,通过指定在局部坐标系的原点在世界坐标系中的方位,然后通过几何变换,就可很容易地将“局部”物体放入世界坐标系内,使它由局部上升为全局。
2)观察坐标系
观察坐标系(Viewingcoordinatesystems),观察坐标系通常是以视点的位置为原点,通过用户指定的一个向上的观察向量(viewupvector)来定义整个坐标系统,缺省为左手坐标系,观察坐标系主要用于从观察者的角度对整个世界坐标系内的对象进行重新定位和描述,从而简化几何物体在投影面的成像的数学推导和计算。
2.3Java3D
程序框架
Java3D的编程空间
Scenegraphsarebuiltfromcomponents:?Shapes(geometryandappearance)?Groupsandtransforms?Lights?Fogandbackgrounds?Soundsandsoundenvironments(reverb)?Behaviors?Viewplatforms(viewpoints)
Java3Drendersthescenegraph?Scenegraphspecifiescontent,notrenderingorder?RenderingorderisuptoJava3DJava3Dusesseparate,independentandasynchronousthreads?Graphicsrendering?Sound"rendering"?Animation"behaviorexecution"?Inputdevicemanagement?Eventgeneration(collisiondetection)
//HelloJava3Darendersasingle,rotatingcube.publicclassExample01extendsApplet{publicExample01(){//setdisplaycontainertoEast,west,south,north,centrallayoutsetLayout(newBorderLayout());GraphicsConfigurationconfig=SimpleUniverse.getPreferredConfiguration();Canvas3Dcanvas3D=newCanvas3D(config);//setcanvasadd("Center",canvas3D);BranchGroupscene=createSceneGraph();//SimpleUniverseisaConvenienceUtilityclassSimpleUniversesimpleU=newSimpleUniverse(canvas3D);//ThiswillmovetheViewPlatformbackabitsothe//objectsinthescenecanbeviewed.simpleU.getViewingPlatform().setNominalViewingTransform();simpleU.addBranchGraph(scene);}//endofHelloJava3Da(constructor)publicBranchGroupcreateSceneGraph(){//CreatetherootofthebranchgraphBranchGroupobjRoot=newBranchGroup();objRoot.addChild(newColorCube(0.4));returnobjRoot;}//endofCreateSceneGraphmethodofHelloJava3Da//Thefollowingallowsthistoberunasanapplication//aswellasanappletpublicstaticvoidmain(String[]args){Frameframe=newMainFrame(newExample01(),256,256);}//endofmain(methodofHelloJava3Da)}//endofclassExample01