荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: ziya (水草蜢), 信区: CAD
标  题: JAVA3D学习系列(十四)
发信站: BBS 荔园晨风站 (Wed May 26 09:29:25 1999), 转信


    汕头大学机电系    张杰(jzhang@mailserv.stu.edu.cn)

****************书名  VRML2.0交互式三维图形编程******
JAVA3D学习系列中的例题将有非常多的VRML程序与之相比较,
介绍JAVA3D的顺序也和VRML2.0新书基本一致,
欢迎购买VRML2.0新书。
特殊购书方式:
1。作者售书
1。网上订购(email address: jzhang@mailserv.stu.edu.cn)
2。可以先获书,后汇款(不满意可退书),
   只需将通信地址及邮编告知作者,即可在最短的时间内得到书。
3。书价为25元/本,免收邮购费用。                              4。书为16开本,正
文161页。
5. 购书可获盖有出版社财务章的收据。
6. 如果需要书中所有的源程序,我可以email一个打包程序
*************书名   VRML2.0交互式三维图形编程******


一. 初始观察位置的给定
    前面我们介绍的JAVA3D程序,在没有进行比例变换前,观察点位于
(0 , 0 , 2.41 ),这是由
      setLayout(new BorderLayout());
      Canvas3D c = new MyCanvas3D(null);
      add("Center",c);
      BranchGroup scene = createSceneGraph();
      SimpleUniverse u = new SimpleUniverse(c);
      u.getViewingPlatform().setNorminalViewingTransform();
多个语句确定的,在前面的第5讲已经对其作了简单介绍,大多数程序
都利用这些语句定义场景图中的一个观察分支。
    我们可以将JAVA3D所提供的java3d-utils-src.jar按照下面
的方式解开:
      jar xvf java3d-utils-src.jar
就可以获得JAVA3D所有UTILITY的源程序,我们可以从其中的
SimpleUniverse.java、ViewingPlatform.java                     程序了解JAVA3D是如
何进行观察点初始位置的设置的。
    语句中的u定义了一个SimpleUniverse类型的对象实例。
getViewingPlatform()方法定义在ViewingPlatform.java中,
利用它可以获得程序所需要的观察位置,而此方法又通过
ViewingPlatform.java中的setNorminalViewingTransform()
来做进一步的设置。
    在没有用到setNorminalViewingTransform()之前,
ViewingPlatform() 给出的缺省观察位置为坐标原点(0,0,0),
而当我们用到setNorminalViewingTransform()时,由
viewDistance我们得知这时的观察点的Z坐标移到了
1/tan(math.PI/8),也即2.41。

**************这时的观察视角为90°****************

    如果要使程序的观察点为一个可以很方便改动的点,我们就
需要将程序改动,下面是我们将前面介绍的第4讲的程序
SimpleCone.java,修改获得的新程序NewCone.java,两者的差别
在于,SimpleCone.java的观察点位于(0,0,2.41),
NewCone.java的观察点坐标位于(0, 0, 10)。我们可以根据需要
设定初始的观察点的位置,这时只需要方便地将(0,0, 10)改为
我们所需要的任何数值。初始观察位置改动涉及到较多的概念,
这里不再详述。                                                //NewCone.java


import java.applet.Applet;
import java.awt.BorderLayout;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.Cone;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;

public class NewCone extends Applet{

  public BranchGroup createSceneGraph() {

    BranchGroup objRoot = new BranchGroup();

    TransformGroup objTrans = new TransformGroup();
    objRoot.addChild(objTrans);

    Appearance app = new Appearance();
    Material material = new Material();
    material.setEmissiveColor(new Color3f(1.0f,0.0f,0.0f));
app.setMaterial(material);
    Cone cone=new Cone(.5f,1.0f,1,app);
    objTrans.addChild(cone);

    objRoot.compile();
        return objRoot;
    }

    public NewCone() {
       setLayout(new BorderLayout());
        Canvas3D c = new Canvas3D(null);
        add("Center", c);
          ViewPlatform        viewPlatform;
          Viewer viewer = new Viewer(c);
          Vector3d viewpoint = new Vector3d(0.0, 0.0, 10.0);
                                                 //初始观察点位置
       Transform3D t = new Transform3D();
       t.set(viewpoint);
          ViewingPlatform v = new ViewingPlatform( );
          v.getViewPlatformTransform().setTransform(t);

        BranchGroup scene = createSceneGraph();
SimpleUniverse u =   new SimpleUniverse( v,   viewer);

       u.getViewingPlatform();
       u.addBranchGraph(scene);

    }

    public static void main(String[] args) {
        new MainFrame(new NewCone(), 256, 256);
    }
}

//end of NewCone.java


--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.0.138]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店