00000013.htm
来自「水木清华BBS」· HTM 代码 · 共 356 行 · 第 1/2 页
HTM
356 行
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: vrml (3d), 信区: Java <BR>标 题: JAVA3D学习系列(13)--形体的组合及几何坐标变换 <BR>发信站: BBS 水木清华站 (Sat Apr 17 21:42:11 1999) <BR> <BR> JAVA3D学习系列(13)---形体的组合及几何坐标变换 <BR> <BR> <BR> <BR> <BR> 汕头大学机电系 张杰(<A HREF="mailto:jzhang@mailserv.stu.edu.cn)">jzhang@mailserv.stu.edu.cn)</A> <BR> <BR>****************书名 VRML2.0交互式三维图形编程****** <BR>JAVA3D学习系列中的例题将有非常多的VRML程序与之相比较, <BR>介绍JAVA3D的顺序也和VRML2.0新书基本一致, <BR>欢迎购买VRML2.0新书。 <BR>特殊购书方式: <BR>1。作者售书 <BR>1。网上订购(email address: <A HREF="mailto:jzhang@mailserv.stu.edu.cn)">jzhang@mailserv.stu.edu.cn)</A> <BR>2。可以先获书,后汇款(不满意可退书), <BR> 只需将通信地址及邮编告知作者,即可在最短的时间内得到书。 <BR>3。书价为25元/本,免收邮购费用。 <BR>4。书为16开本,正文161页。 <BR>5. 购书可获盖有出版社财务章的收据。 <BR>6. 如果需要书中所有的源程序,我可以email一个打包程序 <BR>*************书名 VRML2.0交互式三维图形编程****** <BR> <BR> <BR> VRML2.0(VRML97)中,有两个用来组合各形体的组节点: <BR>Transform、Group,其中的Group节点完全可以用Transform <BR>节点来代替。如何在JAVA3D中实现Transform所提供的几何变换 <BR>功能,是我们掌握JAVA3D应用编程的基础。下面我们对此给以 <BR>详细的介绍。 <BR> <BR> 我们首先来看一下VRML97的Transform节点的定义: <BR>Transform节点的定义是: <BR>Transform { <BR>eventIn MFNode addChildren <BR>eventIn MFNode removeChildren <BR>exposedField SFVec3f center 0 0 0 <BR>exposedField MFNode children [] <BR>exposedField SFRotation rotation 0 0 1 0 <BR>exposedField SFVec3f scale 1 1 1 <BR>exposedField SFRotation scaleOrientation 0 0 1 0 <BR>exposedField SFVec3f translation 0 0 0 <BR>field SFVec3f bboxCenter 0 0 0 <BR>field SFVec3f bboxSize -1 -1 -1 <BR>} <BR> 由定义我们可以看出,VRML程序中,我们可以通过设定 <BR>translation、rotation、scale来使形体产生平移、旋转、 <BR>比例变换。如VRML2.0交互式三维图形编程一书所给出的一个 <BR>生成一个小丑的程序Ex4_03.wrl,里面就对形体进行了平移、 <BR>旋转、比例变换。我们先给出Ex4_03.wrl程序(我们对 <BR>书中的程序进行了修改,使生成的小丑能够旋转),再给出 <BR>用JAVA3D编写出来的Ex4_03.java。 <BR>//Ex4_03.wrl <BR> <BR>#VRML V2.0 utf8 <BR>DEF T Transform{ <BR> children[ <BR> Transform { <BR> scale 1 1.2 1 <BR> children Shape { <BR> appearance Appearance{material Material <BR> {diffuseColor 1 1 0 }} <BR> geometry Sphere{}}} <BR> Transform{ <BR> translation .5 .4 .6 <BR> scale 1 1 2 <BR> children Shape{ <BR> appearance Appearance{material Material <BR> {diffuseColor 0 0 1}} <BR> geometry Sphere{radius .2}}} <BR> Transform { <BR> translation -.5 .4 .6 <BR> scale 1 1 2 <BR> children Shape{ <BR> appearance Appearance{material Material <BR> {diffuseColor 0 0 1}} <BR> geometry Sphere {radius .2}}} <BR> Transform{ <BR> translation 0 1 0 <BR> scale 1.1 .4 1.1 <BR> children Shape{ <BR> appearance Appearance{material Material <BR> {diffuseColor 1 0 0}} <BR> geometry Cone{}}} <BR> Transform{ <BR> translation 1 0 0 <BR> scale .2 .4 .2 <BR> children Shape{ <BR> appearance Appearance{material Material <BR> {diffuseColor 0 1 1}} <BR> geometry Sphere{}}} <BR> Transform{ <BR> translation -1 0 0 <BR> scale .2 .4 .2 <BR> children Shape{ <BR> appearance Appearance{material Material <BR> {diffuseColor 0 1 1}} <BR> geometry Sphere{}}} <BR> Transform{ <BR> translation 0 0 1 <BR> scale .2 .4 .2 <BR> rotation 1 0 0 -.5 <BR> children Shape{ <BR> appearance Appearance{material Material <BR> {diffuseColor 1 0 0}} <BR> geometry Sphere{}}} <BR> Transform{ <BR> translation 0 -.5 .9 <BR> scale .4 .1 .3 <BR> children Shape{ <BR> appearance Appearance{material Material <BR> {diffuseColor 1 1 1}} <BR> geometry Sphere{}}} <BR> ]} <BR> <BR>DEF TS TimeSensor{ <BR> cycleInterval 8 <BR> loop TRUE} <BR>DEF OI OrientationInterpolator{ <BR> key [0 .25 .5 .75 1] <BR> keyValue [0 1 0 0, 0 1 0 1.57, 0 1 0 3.14 <BR> 0 1 0 4.71 0 1 0 6.28]} <BR> <BR>ROUTE TS.fraction TO OI.fraction <BR>ROUTE OI.value TO T.rotation <BR> <BR>Background {skyColor 1 1 1} <BR> <BR>//end of Ex4_03.wrl <BR>------------------------------ <BR>//Ex4_03.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.geometry.Cone; <BR>import com.sun.j3d.utils.geometry.Sphere; <BR>import com.sun.j3d.utils.geometry.Primitive; <BR>import com.sun.j3d.utils.universe.*; <BR>import javax.media.j3d.*; <BR>import javax.vecmath.*; <BR> <BR>public class Ex4_03 extends Applet{ <BR> <BR> public BranchGroup createSceneGraph() { <BR> <BR> BranchGroup objRoot = new BranchGroup(); <BR> Transform3D t3d = new Transform3D(); <BR> t3d.setScale(0.3); <BR> TransformGroup objScale = new TransformGroup(); <BR> objScale.setTransform(t3d); <BR> <BR> Transform3D temp = new Transform3D(); <BR> TransformGroup obj = new TransformGroup(); <BR> obj.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); <BR> obj.setTransform(temp); <BR> <BR> objScale.addChild(obj); <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, obj, temp, <BR> 0.0f, (float) Math.PI*2.0f); <BR>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?