トップページ > Java3D入門 > Java3Dの基礎知識(3)
Java3Dで視点(仮想空間を映すカメラのイメージ)を管理しているのは“ViewingPlatform”というクラスです。 (厳密にはかなりややこしいので,割愛します) ViewingPlatformオブジェクトは,SimpleUniverseのインスタンスを生成したときに, 自動的にSimpleUniverse内に作成されています。 図形オブジェクトと同様にBranchGroupに入れられて管理されますが,SimpleUniverseが生成してくれるオブジェクトは ,さらに“TransformGroup”というグループにも登録されています。これはカメラの向きを変えたり,位置を変えたり といった座標変換のためのグループです。とりあえずSimpleUniverseが作ってくれた 構造でそのまま便利に使えるので,座標変換については後回しにします。
SimpleUniverse内に自動的に生成されたViewingPlatformは,getViewingPlatform()メソッドを 呼ぶことで取得することができます。
またテストプログラムです。以下のソースコードをコピペして, “View_test.java”の名前で保存,コンパイル,実行します。 今回も,前回までのコメントを削ってあります。 最後の「視点の設定」のブロックだけが新しく加えられたところです。
//******************************************************************************
//Java3D View_test
//カメラをセットする
//******************************************************************************
//==============================================================================
//インポート・ファイル
import javax.media.j3d.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.*;
import java.awt.*;
import javax.swing.*;
//==============================================================================
//メイン・クラス
public class View_test
{
//=============================================================================
//メイン・メソッド
public static void main(String[] args)
{
View_test test = new View_test();
}
//=============================================================================
//コンストラクタ
public View_test()
{
//============================================================================
//まずは,基礎フレームの設定。
//============================================================================
JFrame frame = new JFrame();
frame.setSize(250,250);
frame.setTitle("View_test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel cp = new JPanel();
cp.setLayout(null);
frame.add(cp);
//============================================================================
//次にJava3D関係の設定。
//============================================================================
GraphicsConfiguration g_config = SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas = new Canvas3D(g_config);
canvas.setBounds(0,0,250,250);
cp.add(canvas);
//============================================================================
//空のSimpleUniverseを生成。
//============================================================================
SimpleUniverse universe = new SimpleUniverse(canvas);
frame.setVisible(true);
//============================================================================
//SimpleUniverseにSphereを追加
//============================================================================
BranchGroup group1 = new BranchGroup();
Sphere sphere = new Sphere(0.5f);
group1.addChild(sphere);
universe.addBranchGraph(group1);
//============================================================================
//視点の設定
//============================================================================
//ViewingPlatformを取得
ViewingPlatform camera = universe.getViewingPlatform();
//カメラの自動位置合わせ
camera.setNominalViewingTransform();
}
}
//ソースコードここまで。
//******************************************************************************
・・・まだです。物体を置いて,カメラもセットしたのですが。次回,この状態のままで ライトを照らしてみます。ここから先は,ソースコードの解説になります。例のごとく, 新しく追加された部分だけです。
getViewingPlatform()で,SimpleUniverseから視点クラスのオブジェクトを取得しています。 デフォルトの状態ではカメラの位置は原点にあるので,原点に置かれたSphereは見ることができません。 そこで,setNominalViewingTransform()メソッドを呼んで,全体が写る位置に自動セットします。 手動でカメラの位置決めをする方法は座標変換のところで解説します。