00000014.htm
来自「水木清华BBS」· HTM 代码 · 共 145 行
HTM
145 行
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: vrml (3d), 信区: Java <BR>标 题: JAVA3D学习系列(14)--初始观察位置的给定 <BR>发信站: BBS 水木清华站 (Wed Apr 21 08:30:05 1999) <BR> <BR> JAVA3D学习系列(14)---初始观察位置的设定 <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>一. 初始观察位置的给定 <BR> 前面我们介绍的JAVA3D程序,在没有进行比例变换前,观察点位于 <BR>(0 , 0 , 2.41 ),这是由 <BR> setLayout(new BorderLayout()); <BR> Canvas3D c = new MyCanvas3D(null); <BR> add("Center",c); <BR> BranchGroup scene = createSceneGraph(); <BR> SimpleUniverse u = new SimpleUniverse(c); <BR> u.getViewingPlatform().setNorminalViewingTransform(); <BR>多个语句确定的,在前面的第5讲已经对其作了简单介绍,大多数程序 <BR>都利用这些语句定义场景图中的一个观察分支。 <BR> 我们可以将JAVA3D所提供的java3d-utils-src.jar按照下面 <BR>的方式解开: <BR> jar xvf java3d-utils-src.jar <BR>就可以获得JAVA3D所有UTILITY的源程序,我们可以从其中的 <BR>SimpleUniverse.java、ViewingPlatform.java <BR>程序了解JAVA3D是如何进行观察点初始位置的设置的。 <BR> 语句中的u定义了一个SimpleUniverse类型的对象实例。 <BR>getViewingPlatform()方法定义在ViewingPlatform.java中, <BR>利用它可以获得程序所需要的观察位置,而此方法又通过 <BR>ViewingPlatform.java中的setNorminalViewingTransform() <BR>来做进一步的设置。 <BR> 在没有用到setNorminalViewingTransform()之前, <BR>ViewingPlatform() 给出的缺省观察位置为坐标原点(0,0,0), <BR>而当我们用到setNorminalViewingTransform()时,由 <BR>viewDistance我们得知这时的观察点的Z坐标移到了 <BR>1/tan(math.PI/8),也即2.41。 <BR> <BR>**************这时的观察视角为90°**************** <BR> <BR> 如果要使程序的观察点为一个可以很方便改动的点,我们就 <BR>需要将程序改动,下面是我们将前面介绍的第4讲的程序 <BR>SimpleCone.java,修改获得的新程序NewCone.java,两者的差别 <BR>在于,SimpleCone.java的观察点位于(0,0,2.41), <BR>NewCone.java的观察点坐标位于(0, 0, 10)。我们可以根据需要 <BR>设定初始的观察点的位置,这时只需要方便地将(0,0, 10)改为 <BR>我们所需要的任何数值。初始观察位置改动同样用到了 <BR>SimpleUniverse对象,只是将对象的观察点坐标变量作了修改。 <BR> <BR>//NewCone.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.universe.*; <BR>import javax.media.j3d.*; <BR>import javax.vecmath.*; <BR> <BR>public class NewCone extends Applet{ <BR> <BR> public BranchGroup createSceneGraph() { <BR> <BR> BranchGroup objRoot = new BranchGroup(); <BR> <BR> TransformGroup objTrans = new TransformGroup(); <BR> objRoot.addChild(objTrans); <BR> <BR> Appearance app = new Appearance(); <BR> Material material = new Material(); <BR> material.setEmissiveColor(new Color3f(1.0f,0.0f,0.0f)); <BR> app.setMaterial(material); <BR> Cone cone=new Cone(.5f,1.0f,1,app); <BR> objTrans.addChild(cone); <BR> <BR> objRoot.compile(); <BR> return objRoot; <BR> } <BR> <BR> public NewCone() { <BR> setLayout(new BorderLayout()); <BR> Canvas3D c = new Canvas3D(null); <BR> add("Center", c); <BR> ViewPlatform viewPlatform; <BR> Viewer viewer = new Viewer(c); <BR> Vector3d viewpoint = new Vector3d(0.0, 0.0, 10.0); <BR> //初始观察点位置 <BR> Transform3D t = new Transform3D(); <BR> t.set(viewpoint); <BR> ViewingPlatform v = new ViewingPlatform( ); <BR> v.getViewPlatformTransform().setTransform(t); <BR> <BR> BranchGroup scene = createSceneGraph(); <BR> SimpleUniverse u = new SimpleUniverse( v, viewer); <BR> <BR> u.getViewingPlatform(); <BR> u.addBranchGraph(scene); <BR> <BR> } <BR> <BR> public static void main(String[] args) { <BR> new MainFrame(new NewCone(), 256, 256); <BR> } <BR>} <BR> <BR>//end of NewCone.java <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 + -
显示快捷键?