00000014.htm

来自「水木清华BBS」· HTM 代码 · 共 145 行

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

⌨️ 快捷键说明

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