Next: 6.6 HelloUniverse
Up: 6 Java3Dのプログラミング
Previous: 6.4 Transform3Dクラス
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
/*
* 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日