next up previous
Next: 6.6 HelloUniverse Up: 6 Java3Dのプログラミング Previous: 6.4 Transform3Dクラス

6.5 立体表示サンプル

Java3Dの環境をすばやく作るための クラスとして,Canvas3D, SimpleUniverse, BranchGraphを 使う例を示す. Java3Dでは,三次元空間上に存在する物体や光源などの 描画に必要な情報すべてを,1つの木構造として表現する. その木構造をシーングラフと呼ぶ. 木構造の各ノードがNodeクラスのオブジェクトで表現される. Nodeクラスのサブクラスに,葉となるノードのLeafクラス と,葉以外のノードのGroupクラスがある. SimpleUniverseは,シーングラフの根になり, SimpleUniverseオブジェクトの子ノードはBranchGroupクラス のオブジェクトとなる.
java.lang.Object
 |
 +--javax.media.j3d.Transform3D
 |
 +--java.awt.Component
    |
    +--java.awt.Canvas
       |
       +--javax.media.j3d.Canvas3D
 |
 +--javax.media.j3d.VirtualUniverse
    |
    +--com.sun.j3d.utils.universe.SimpleUniverse
 |
 +--javax.media.j3d.SceneGraphObject
    |
    +--javax.media.j3d.Node
       |
       +--javax.media.j3d.Group
          |
          +--javax.media.j3d.BranchGroup
          |
          +--javax.media.j3d.TransformGroup
       |
       +--javax.media.j3d.Leaf
          |
          +--javax.media.j3d.Shape3D
             |
             +--com.sun.j3d.utils.geometry.ColorCube
図 11: Hello3D
\includegraphics[width=6.0cm]{/home/inaba/eps/lecture/fig/Hello3D.eps}
/*
 * Hello3D.java
 * 太田,やさしくわかるJava 3D,技術評論社,2003.
 */
import java.applet.Applet;
import java.awt.BorderLayout;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;

public class Hello3D extends Applet
{
  private Canvas3D canvas;
  private SimpleUniverse universe;

  public void init() {
    canvas=new Canvas3D(
      SimpleUniverse.getPreferredConfiguration());
    universe=new SimpleUniverse(canvas);
    universe.getViewingPlatform().
      setNominalViewingTransform();
    universe.addBranchGraph(createSceneGraph());
    setLayout(new BorderLayout());
    add(canvas,BorderLayout.CENTER);
  }
  private BranchGroup createSceneGraph(){
    BranchGroup root;
    Transform3D rotation,rotationX,rotationY;
    TransformGroup transform;
    root=new BranchGroup();
    rotationX=new Transform3D();
    rotationX.rotX(Math.PI/4.0);
    rotationY=new Transform3D();
    rotationY.rotY(Math.PI/5.0);
    rotation=new Transform3D();
    rotation.mul(rotationX,rotationY);
    transform=new TransformGroup(rotation);
    root.addChild(transform);
    transform.addChild(new ColorCube(0.4));
    return root;
  }
}
ColorCubeクラスは,テスト用に,各面の色が違う立方体を 作るためのクラスである. ノードの座標系を指定するには,ノードに至る経路の間に TransformGroupノードを挟む. TransformGroupオブジェクトは,子ノードの座標系をあらわすTransoform3D オブジェクトを与えられて生成する.

generated through LaTeX2HTML. M.Inaba 平成18年5月7日