Java 版 (精华区)

发信人: bali (阿奔), 信区: Java
标  题: JAVA3D学习系列(14)---初始观察位置的设定 
发信站: 紫 丁 香 (Fri Mar 24 11:04:45 2000), 转信

发信人: vrml (3d), 信区: Java
标  题: JAVA3D学习系列(14)--初始观察位置的给定
发信站: BBS 水木清华站 (Wed Apr 21 08:30:05 1999)

   JAVA3D学习系列(14)---初始观察位置的设定




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


一. 初始观察位置的给定
    前面我们介绍的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)改为
我们所需要的任何数值。初始观察位置改动同样用到了
SimpleUniverse对象,只是将对象的观察点坐标变量作了修改。

//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.hit.edu.cn.[FROM: 202.118.243.89]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.353毫秒