00000013.htm
来自「水木清华BBS」· HTM 代码 · 共 356 行 · 第 1/2 页
HTM
356 行
BoundingSphere bounds = <BR> new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); <BR> rotator.setSchedulingBounds(bounds); <BR> obj.addChild(rotator); <BR> <BR> objRoot.addChild(objScale); <BR> <BR> Color3f light1Color = new Color3f(1.0f, 1.0f, 0.9f); <BR> Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f); <BR> <BR> DirectionalLight light1 <BR> = new DirectionalLight(light1Color, light1Direction); <BR> light1.setInfluencingBounds(bounds); <BR> <BR> objRoot.addChild(light1); <BR> <BR> Appearance app_red = new Appearance(); <BR> Material material1 = new Material(); <BR> material1.setDiffuseColor(new Color3f(1.0f,0.0f,0.0f)); <BR> app_red.setMaterial(material1); <BR> <BR> Appearance app_yellow = new Appearance(); <BR> Material material2 = new Material(); <BR> material2.setDiffuseColor(new Color3f(1.0f,1.0f,0.0f)); <BR> app_yellow.setMaterial(material2); <BR> <BR> Appearance app_blue = new Appearance(); <BR> Material material3 = new Material(); <BR> material3.setDiffuseColor(new Color3f(0.0f,0.0f,1.0f)); <BR> app_blue.setMaterial(material3); <BR> <BR> Appearance app_cyan = new Appearance(); <BR> Material material4 = new Material(); <BR> material4.setDiffuseColor(new Color3f(0.0f,1.0f,1.0f)); <BR> app_cyan.setMaterial(material4); <BR> <BR> Appearance app_white = new Appearance(); <BR> Material material5 = new Material(); <BR> material5.setDiffuseColor(new Color3f(1.0f,1.0f,1.0f)); <BR> app_white.setMaterial(material5); <BR> <BR> Cone c = new Cone(1.0f,2.0f,1,app_red); <BR> Primitive s_1 = (Primitive) new Sphere(1.0f,app_yellow); <BR> Primitive s_2 = (Primitive) new Sphere(.2f ,app_blue); <BR> Primitive s_2b = (Primitive) new Sphere(.2f ,app_blue); <BR> Primitive s_3 = (Primitive) new Sphere(1.0f,app_cyan); <BR> Primitive s_3b = (Primitive) new Sphere(1.0f,app_cyan); <BR> Primitive s_4 = (Primitive) new Sphere(1.0f,app_red); <BR> Primitive s_5 = (Primitive) new Sphere(1.0f,app_white); <BR> <BR> Transform3D t1 = new Transform3D(); <BR> t1.setScale(new Vector3d(1,1.2,1)); <BR> TransformGroup objTrans1 = new TransformGroup(t1); <BR> objTrans1.addChild(s_1); <BR> <BR> Transform3D t2 = new Transform3D(); <BR> t2.setScale(new Vector3d(1,1,2)); <BR> t2.setTranslation(new Vector3f(0.5f, 0.4f, 0.6f)); <BR> TransformGroup objTrans2 = new TransformGroup(t2); <BR> objTrans2.addChild(s_2); <BR> <BR> Transform3D t3 = new Transform3D(); <BR> t3.setScale(new Vector3d(1,1,2)); <BR> t3.setTranslation(new Vector3f(-0.5f, 0.4f, 0.6f)); <BR> TransformGroup objTrans3 = new TransformGroup(t3); <BR> objTrans3.addChild(s_2b); <BR> <BR> Transform3D t4 = new Transform3D(); <BR> t4.setScale(new Vector3d(1.1,0.4,1.1)); <BR> t4.setTranslation(new Vector3f(0.0f, 1.0f, 0.0f)); <BR> TransformGroup objTrans4 = new TransformGroup(t4); <BR> objTrans4.addChild(c); <BR> <BR> Transform3D t5 = new Transform3D(); <BR> t5.setScale(new Vector3d(0.2, 0.4, 0.2)); <BR> t5.setTranslation(new Vector3f(1.0f, 0.0f, 0.0f)); <BR> TransformGroup objTrans5 = new TransformGroup(t5); <BR> objTrans5.addChild(s_3); <BR> <BR> Transform3D t6 = new Transform3D(); <BR> t6.setScale(new Vector3d(0.2, 0.4, 0.2)); <BR> t6.setTranslation(new Vector3f(-1.0f, 0.0f, 0.0f)); <BR> TransformGroup objTrans6 = new TransformGroup(t6); <BR> objTrans6.addChild(s_3b); <BR> <BR> Transform3D t7 = new Transform3D(); <BR> t7.setScale(new Vector3d(0.2, 0.4, 0.2)); <BR> t7.setTranslation(new Vector3f(0.0f, 0.0f, 1.0f)); <BR> TransformGroup objTrans7 = new TransformGroup(t7); <BR> objTrans7.addChild(s_4); <BR> <BR> Transform3D t8 = new Transform3D(); <BR> t8.setScale(new Vector3d(0.4, 0.1, 0.3)); <BR> t8.setTranslation(new Vector3f(0.0f, -0.5f, 0.9f)); <BR> TransformGroup objTrans8 = new TransformGroup(t8); <BR> objTrans8.addChild(s_5); <BR> <BR> Color3f bgColor = new Color3f(1.0f, 1.0f, 1.0f); <BR> Background bg = new Background(bgColor); <BR> bg.setApplicationBounds(bounds); <BR> <BR> objRoot.addChild(bg); <BR> <BR> obj.addChild(objTrans1); <BR> obj.addChild(objTrans2); <BR> obj.addChild(objTrans3); <BR> obj.addChild(objTrans4); <BR> obj.addChild(objTrans5); <BR> obj.addChild(objTrans6); <BR> obj.addChild(objTrans7); <BR> obj.addChild(objTrans8); <BR> <BR> objRoot.compile(); <BR> return objRoot; <BR> } <BR> <BR> public Ex4_03() { <BR> setLayout(new BorderLayout()); <BR> Canvas3D c = new Canvas3D(null); <BR> add("Center", c); <BR> BranchGroup scene = createSceneGraph(); <BR> SimpleUniverse u = new SimpleUniverse(c); <BR> u.getViewingPlatform().setNominalViewingTransform(); <BR> u.addBranchGraph(scene); <BR> } <BR> <BR> public static void main(String[] args) { <BR> new MainFrame(new Ex4_03(), 640, 480); <BR> } <BR>} <BR>//end of Ex4_03.java <BR> <BR> 我们来仔细研究JAVA3D所提供的形体几何变换功能。 <BR>前面我们主要介绍形体生成的方法,其中,编写自己的形体 <BR>用到的是Shape3D对象,VRML97与之对应的是Shape节点。 <BR>同样,JAVA3D对应于VRML97的Transform节点的对象是Transform3D。 <BR> VRML97编程中,形体的平移可以通过Transform节点的 <BR>translation字段来设置;JAVA3D编程时,形体的平移可以通过 <BR>Transform3D的setTranslation方法完成。 <BR> VRML97编程中,形体的旋转可以通过Transform节点的 <BR>rotation字段来设置;JAVA3D编程时,形体的旋转可以通过 <BR>Transform3D的setRotation方法完成。 <BR> VRML97编程中,形体的比例变化可以通过Transform节点的 <BR>scale字段来设置;JAVA3D编程时,形体的比例变化可以通过 <BR>Transform3D的setScale方法完成,其中,当扩弧里只有一个双 <BR>精度数时,setScale对所有的方向均采用同一个比例,而当里面 <BR>有三个双精度数时,setScale对不同的方向可以采用不同的比例, <BR>双精度数后面不加符号,而单精度浮点数后面要加一个f。 <BR> 我们来看一下程序的主要内容: <BR> 程序一开始就定义了一个BranchGroup,后面所有的生成的内容 <BR>如形体、形体的变换、背景、灯光都放入其中。 <BR> 为了使我们生成的图形有合适的大小,我们定义了一个 <BR>TransformGroup对象objScale,通过一个t3d使其按比例缩小,这 <BR>相当于我们将视野往后移动。 <BR> 为了使我们生成的小丑能够旋转,我们定义一个TransformGroup <BR>类型的obj,这相当于定义了一个小丑所在的局部坐标系,设定此 <BR>坐标系可以旋转,选转方式由一个Transform3D类型的temp来确定, <BR>定义obj为objScale的一个子节点。 <BR> 通过定义rotationAlpha、rotator地定义使得obj能够产生旋转。 <BR>它们的作用类似于VRML的时间传感器及方向内插器。 <BR> 接下来我们在空间中定义了一个定向光、各种材质、形体,并 <BR>将灯光、具有一定材质的形体放入objRoot、obj之中,最后我们 <BR>还定义了一个背景光。 <BR> 通过这个程序的编写,我们掌握了JAVA3D生成复杂形体的最基本 <BR>概念,即如何进行形体的几何坐标变换。掌握了形体几何坐标变换 <BR>方法,我们就具有了编写JAVA3D复杂应用程序的能力。 <BR> <BR>-- <BR>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.192.158.172] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?