00000012.htm
来自「水木清华BBS」· HTM 代码 · 共 398 行 · 第 1/3 页
HTM
398 行
} catch (Exception e) { <BR> System.err.println(e); <BR> System.exit(1); <BR> } <BR> <BR> obj.addChild(s.getSceneGroup( ) ); <BR> this.addChild(obj); <BR> } <BR>} <BR>//end of vrmlLoad.java <BR> <BR>3. 调用两个VRML文件并使其放在不同的位置处旋转 <BR> 编写这个程序非常简单,只需将前面介绍的Obj4.java <BR>稍作修改即可,程序如下: <BR>//Vrml3.java <BR> <BR>import java.applet.Applet; <BR>import java.awt.BorderLayout; <BR>import com.sun.j3d.utils.applet.MainFrame; <BR>import com.sun.j3d.utils.universe.*; <BR>import javax.media.j3d.*; <BR>import javax.vecmath.*; <BR> <BR>public class Vrml3 extends Applet { <BR> public BranchGroup createSceneGraph() { <BR> BranchGroup objRoot = new BranchGroup(); <BR> TransformGroup objScale = new TransformGroup(); <BR> Transform3D t3d = new Transform3D(); <BR> t3d.setScale(0.1); <BR> objScale.setTransform(t3d); <BR> objRoot.addChild(objScale); <BR> <BR> BoundingSphere bounds = <BR> new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); <BR> Color3f bgColor = new Color3f(1.05f, 0.00f, 0.0f); <BR> Background bg = new Background(bgColor); <BR> bg.setApplicationBounds(bounds); <BR> objRoot.addChild(bg); <BR> <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> objRoot.addChild(light1); <BR> <BR> BranchGroup b1 = new vrmlLoad("7.wrl"); <BR> BranchGroup b2 = new vrmlLoad("8.wrl"); <BR> <BR> objScale.addChild(createObject (b1, -1.2f , 0.0f )); <BR> objScale.addChild(createObject (b2, 1.2f , 0.0f )); <BR> <BR> objRoot.compile(); <BR> return objRoot; <BR> } <BR> <BR> private Group createObject (BranchGroup b, float xpos, float ypos ) { <BR> Transform3D t = new Transform3D ( ); <BR> t.setTranslation ( new Vector3f ( xpos, ypos, 0.0f ) ); <BR> TransformGroup objTrans = new TransformGroup(t); <BR> TransformGroup spin = new TransformGroup(); <BR> spin.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); <BR> spin.addChild(b); <BR> <BR> Transform3D yAxis = new Transform3D ( ); <BR> <BR> Alpha rotationAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE, <BR> 0, 0, <BR> 4000, 0, 0, <BR> 0, 0, 0); <BR> RotationInterpolator rotator = <BR> new RotationInterpolator(rotationAlpha, spin, yAxis, <BR> 0.0f, (float) Math.PI*2.0f); <BR> BoundingSphere bounds = <BR> new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); <BR> <BR> rotator.setSchedulingBounds(bounds); <BR> objTrans.addChild(rotator); <BR> objTrans.addChild ( spin ); <BR> <BR> return objTrans ; <BR>} <BR> <BR> public Vrml3(String args[]) { <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 Vrml3(args), 400,400); <BR> } <BR>} <BR>//end of Vrml3.java <BR> <BR> <BR> <BR>四. AUTOCAD R14的DWG图形及3DS MAX图形在JAVA3D中的应用。 <BR> 在三维图形生成过程中,国内目前大量使用AUTOCAD及3DS MAX等 <BR>软件。如何将这些软件生成的三维图形应用到JAVA3D上去呢? <BR> 对于3DS MAX软件,处理起来非常方便,因为3DS MAX可以将其图形 <BR>直接输出成VRML97格式,因而可以按本讲介绍的方法处理。 <BR> 对于AUTOCAD R14来说,目前还不太方便,不知AUTOCAD 2000是否 <BR>能直接输出VRML97图形格式。本人从欧洲捷克一个站点拷得一个文件, <BR>可用来直接将AUTOCAD R14所绘制的三维图形转换成VRML97(VRML2.0) <BR>格式,因而AUTOCAD软件生成的图形也可以非常方便地应用到JAVA3D上面, <BR>为我们编写JAVA3D的复杂应用程序打下了良好的基础。此软件非常好用 <BR>(采用ARX技术编写)。 <BR> <BR>**************好消息************** <BR> 需要将AUTOCAD R14所生成的图形转换成VRML2.0的朋友,可 <BR>发一个EMAIL给我,在收到EMAIL一分钟之内,我将把 <BR>AUTOCAD ----> VRML的转换文件发出,大小为206KB。 <BR>**************好消息************** <BR> <BR>-- <BR>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.192.158.89] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?