00000012.htm

来自「水木清华BBS」· HTM 代码 · 共 398 行 · 第 1/3 页

HTM
398
字号
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;vrml&nbsp;(3d),&nbsp;信区:&nbsp;Java&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;JAVA3D学习系列(12)--3DS,AUTOCAD,VRML97图形的应用&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Wed&nbsp;Apr&nbsp;14&nbsp;22:29:57&nbsp;1999)&nbsp;<BR>&nbsp;<BR>&nbsp;JAVA3D学习系列(12)---AUTOCAD的DWG、VRML的WRL及3DS&nbsp;MAX图形的调用&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;汕头大学机电系&nbsp;&nbsp;&nbsp;&nbsp;张杰(<A HREF="mailto:jzhang@mailserv.stu.edu.cn)">jzhang@mailserv.stu.edu.cn)</A>&nbsp;<BR>&nbsp;<BR>****************VRML2.0交互式三维图形编程****************&nbsp;<BR>JAVA3D学习系列中的例题将有非常多的书中的VRML程序与之相比较,&nbsp;<BR>欢迎购买VRML2.0新书。&nbsp;<BR>特殊购书方式:&nbsp;<BR>1。作者售书&nbsp;<BR>1。网上订购(email&nbsp;address:&nbsp;<A HREF="mailto:jzhang@mailserv.stu.edu.cn)">jzhang@mailserv.stu.edu.cn)</A>&nbsp;<BR>2。可以先获书,后汇款(不满意可退书),&nbsp;<BR>&nbsp;&nbsp;&nbsp;只需将通信地址及邮编告知作者,即可在最短的时间内得到书。&nbsp;<BR>3。书价为25元/本,免收邮购费用。&nbsp;<BR>4。书为16开本,正文161页。&nbsp;<BR>5.&nbsp;购书可获盖有出版社财务章的收据。&nbsp;<BR>6.&nbsp;如果需要书中所有的源程序,我可以email一个打包程序&nbsp;<BR>******************VRML2.0交互式三维图形编程*************&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>一.&nbsp;VRML2.0(VRML97)图形文件在JAVA3D中的应用简介&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;SUN公司为我们提供了一个VRML97的LOADER,利用它我们可以&nbsp;<BR>在JAVA3D程序中方便地调用VRML图形。不过由于这个LOADER目前&nbsp;<BR>还不是很完善,因而没有放入JAVA3D之中,不过随着它的完善,&nbsp;<BR>最终它会成为JAVA3D的一个组成部分,调用VRML97程序就象调用&nbsp;<BR>Wavefront的OBJ一样简单。&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;我们可以从以下的网址下载(VRML97.ZIP)并安装,下载的网址为:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="http://www.vrml.org/WorkingGroups/vrml-java3d/">http://www.vrml.org/WorkingGroups/vrml-java3d/</A>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;从这个网页上我们需要下载目前大小为283KB的一个ZIP文件,&nbsp;<BR>VRML97.ZIP,利用解压程序将其解成VRML97.JAR,大小目前为310KB,&nbsp;<BR>版本为0.90.2版,利用它可以让我们在JAVA3D程序中调用&nbsp;<BR>VRML97(VRML2.0)图形。&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>*********好消息******************&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;为了使国内的JAVA3D爱好者能够节省时间及开支,本人愿意&nbsp;<BR>向国内的JAVA3D爱好者提供最新的VRML97.JAR,咨询请发EMAIL。&nbsp;<BR>收到EMAIL后一分钟内就可将VRML97.JAR发出。&nbsp;<BR>*********好消息******************&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>二.&nbsp;VRML97.JAR的安装&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;获得VRML97.JAR后,假设我们的JDK1.2摆放的位置为目录JDK1.2,&nbsp;<BR>我们应将其放在下面的子目录中:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:\jdk1.2\lib&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;并在WINDOWS的AUTOEXEC.BAT文件中写入下面一行:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;CLASSPATH=%CLASSPATH%;C:\JDK1.2\LIB\vrml97.jar&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;重新启动计算机,这样我们就可以利用它了。&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;当然,我们可以将VRML97.JAR放在一个目录中,利用下面的方法&nbsp;<BR>将其解开,不过所获得的全为CLASS文件。&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>三.&nbsp;VRML97.JAR的应用&nbsp;<BR>1.&nbsp;&nbsp;利用VRML971.JAR调用一个VRML文件,使VRML文件中的形体不停地&nbsp;<BR>旋转,程序如下。&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;程序的编译方法:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;javac&nbsp;Vrml1.java&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;程序的运行方法(假设图形在同一目录):&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java&nbsp;Vrml1&nbsp;&nbsp;myShape.wrl&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;当然,如果所调用的形体非常大或非常小时,需要修改:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t3d.setScale(0.3);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;中的数值。&nbsp;<BR>//Vrml.java&nbsp;<BR>&nbsp;<BR>import&nbsp;java.applet.Applet;&nbsp;<BR>import&nbsp;java.awt.BorderLayout;&nbsp;<BR>import&nbsp;com.sun.j3d.utils.applet.MainFrame;&nbsp;<BR>import&nbsp;com.sun.j3d.utils.universe.*;&nbsp;<BR>import&nbsp;javax.media.j3d.*;&nbsp;<BR>import&nbsp;javax.vecmath.*;&nbsp;<BR>import&nbsp;com.sun.j3d.loaders.vrml97.VrmlLoader;&nbsp;<BR>import&nbsp;com.sun.j3d.loaders.Scene;&nbsp;<BR>&nbsp;<BR>public&nbsp;class&nbsp;Vrml1&nbsp;extends&nbsp;Applet&nbsp;{&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;filename&nbsp;=&nbsp;null;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;BranchGroup&nbsp;createSceneGraph(String&nbsp;args[])&nbsp;&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BranchGroup&nbsp;objRoot&nbsp;=&nbsp;new&nbsp;BranchGroup();&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TransformGroup&nbsp;objScale&nbsp;=&nbsp;new&nbsp;TransformGroup();&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transform3D&nbsp;t3d&nbsp;=&nbsp;new&nbsp;Transform3D();&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t3d.setScale(0.3);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objScale.setTransform(t3d);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objRoot.addChild(objScale);&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color3f&nbsp;light1Color&nbsp;=&nbsp;new&nbsp;Color3f(1.0f,&nbsp;1.0f,&nbsp;0.9f);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vector3f&nbsp;light1Direction&nbsp;&nbsp;=&nbsp;new&nbsp;Vector3f(4.0f,&nbsp;-7.0f,&nbsp;-12.0f);&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BoundingSphere&nbsp;bounds&nbsp;=&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;BoundingSphere(new&nbsp;Point3d(0.0,0.0,0.0),&nbsp;100.0);&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DirectionalLight&nbsp;light1&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;new&nbsp;DirectionalLight(light1Color,&nbsp;light1Direction);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;light1.setInfluencingBounds(bounds);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objRoot.addChild(light1);&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TransformGroup&nbsp;objTrans&nbsp;=&nbsp;new&nbsp;TransformGroup();&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objScale.addChild(objTrans);&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VrmlLoader&nbsp;loader&nbsp;=&nbsp;new&nbsp;VrmlLoader();&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scene&nbsp;s&nbsp;=&nbsp;null;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;loader.load(filename);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println(e);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.exit(1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objTrans.addChild(s.getSceneGroup());&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transform3D&nbsp;yAxis&nbsp;=&nbsp;new&nbsp;Transform3D();&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alpha&nbsp;rotationAlpha&nbsp;=&nbsp;new&nbsp;Alpha(-1,&nbsp;Alpha.INCREASING_ENABLE,&nbsp;<BR>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?