SceneGraph


Java3D の機能の中心となる SceneGraph についての解説です。

SceneGraph とは / SimpleUniverse / BranchGroup / 戻る / トップページ


SceneGraph とは

Java3D の Retained Mode の機能の中心となるもので、 Java3D を理解する上で必要不可欠な概念です。
 
表示される物体などの情報を木構造で表現します。 その根は VirtualUniverse オブジェクトです。 その子に Locale オブジェクト (javax.media.j3d.Locale です。java.util.Locale とは違います)、 さらにその子に BranchGroup オブジェクトがぶら下げられます。
 
BranchGroup オブジェクトの子には Behavior オブジェクトや TransformGroup オブジェクトがぶら下げられ、 TransformGroup オブジェクトにはさらに Shape3D オブジェクトや TransformGroup オブジェクトがぶら下げられます。
 
各オブジェクトの意味合いは こちら をご覧ください。

SimpleUniverse

SceneGraph は上記のような構造を取りますが、 複雑な処理をしない限り冗長なコードを書く事になってしまいます。 そこでより簡単に SceneGraph が扱えるように いくつものユーティリティークラスが com.sun.j3d.utils パッケージとして提供されています。 その中でも最もよく使われるであろうクラスが SimpleUniverse クラスです。
 
SimpleUniverse オブジェクトは VirtualUniverse オブジェクトと Locale オブジェクトを一つにまとめたようなものです。 通常は SimpleUniverse オブジェクトを根と考えて SceneGraph を作ればよい事になります。 その子には BranchGroup オブジェクトがぶら下げられます。
	Canvas3D canvas=new Canvas3D(null);
	SimpleUniverse universe=new SimpleUniverse(canvas);
	
	BranchGroup root=new BranchGroup();
	
	// ここで root に Shape3D,TransformGroup オブジェクトをぶら下げる。
	
	universe.getViewingPlatform().setNominalViewingTransform();	// 視点を適当な位置に設定
	universe.addBranchGraph(root);

BranchGroup

上のような処理の後、BranchGroup オブジェクトの下に 表示したい物体などをぶら下げます。
 
何か物体を表示したい時はその物体を表現する Shape3D オブジェクトを生成し、 直接 BranchGroup オブジェクトの下にぶら下げます。
	Shape3D shape=new ColorCube();	// 色付き立方体
	root.addChild(shape);
このままでは物体は原点に表示されてしまいます。 別の位置に物体を表示したい場合は BranchGroup オブジェクトの下に TransformGroup オブジェクトをぶら下げて、 さらにその下に Shape3D オブジェクトをぶら下げます。 TransformGroup オブジェクトに移動を示す行列である Transform3D オブジェクトを設定することで物体の位置を設定します。
	Transform3D translation=new Transform3D();
	translation.setTranslation(new Vector3d(0.0,1.0,0.0));	// 座標を (0.0,1.0,0.0) に設定
	
	TransformGroup transform=new TransformGroup(translation);
	root.addChild(transform);
	
	Shape3D shape=new ColorCube(0.3);	// 色付き立方体
	transform.addChild(shape);

戻る