視点


視点の移動方法についてです。

視点移動 / SimpleUniverse の視点移動 / 戻る / トップページ


視点移動

視点を移動させるには ViewPlatform オブジェクトを作り SceneGraph に追加します。 その ViewPlatform オブジェクトはコンストラクタで直接 作るのではなく View オブジェクトを作り、 getViewPlatform() メソッドで取得します (あまり詳しく調べていないので間違っているかもしれません)。
 
ViewPlatform オブジェクトは Shape3D オブジェクトと同じように TransformGroup オブジェクトを間に挟んで SceneGraph にぶら下げます。 その TransformGroup オブジェクトに参照されている Transform3D オブジェクトで視点の位置を決定します。

SimpleUniverse の視点移動

SceneGraph の根として SimpleUniverse を使った場合、 視点移動が楽にできるように工夫されています。
 
SimpleUniverse オブジェクトが作られると 自動的に ViewingPlatform オブジェクト (com.sun.j3d.utils.universe.ViewingPlatform です。 ViewPlatform と名前が似ているので注意してください) が作られて SceneGraph にぶら下げられます。 ViewingPlatform オブジェクトは TransformGroup,ViewPlatform オブジェクトをまとめたものです。
 
SimpleUniverse オブジェクトの getViewingPlatform() メソッドで ViewingPlatform オブジェクトを取得し、 ViewingPlatform オブジェクトの getViewPlatformTransform() メソッドで TransformGroup を取得します。
	Canvas3D canvas=new Canvas3D(null);
	SimpleUniverse universe=new SimpleUniverse(canvas);
	
	TransformGroup transform;
	Transform3D translation=new Transform3D();
	translation.setTranslation(new Vector3d(0.0,1.0,0.0));	// 視点を (0.0,1.0,0.0) に設定
	
	transform=universe.getViewingPlatform().getViewPlatformTransform();
	transform.setTransform(translation);
Immediate Mode でこの方法を使うと確かに視点変更はできるのですが、 どうやら指定した光源の座標が 視点座標系上での座標になってしまうようです (視点の位置を変更すると光源の位置が動いてしまいます)。

戻る