トップページ > Java3D入門 > Java3Dをインストールする(2)
Java3Dが正常に動作し今後の開発ができるかを判断するために、テストプログラムを走らせてみます。 以下のソースコードをコピペして“Java3D_first_test.java”の名前で保存し、 コンパイルします。 その後、コマンド“java Java3D_first_test”で上画像のような画面が表示され、 立方体が回転していれば動作正常です。
ソースコードの詳しい内容はこれから解説するので、今回は読み飛ばしてください。。。 もしコンパイル・エラーになったり、実行する際にエラー・メッセージが表示される場合は テストプログラムが動かなかったら・・・・ を参照してください。
//******************************************************************************
//Java3D とりあえず動作確認するプログラム
//カラーキューブ回転
//******************************************************************************
//==============================================================================
//インポート・ファイル
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
import java.util.Timer;
//==============================================================================
//メイン・クラス
public class Java3D_first_test
{
//=============================================================================
//クラスのフィールド
//仮想空間全体
SimpleUniverse universe;
//オブジェクトのためのグループ
BranchGroup group1;
//オブジェクトの座標変換のためのグループ
TransformGroup transform_group1;
//オブジェクトの座標変換のためのクラス
Transform3D transform1;
//回転角を管理
float rot_value;
//=============================================================================
//メイン・メソッド
public static void main(String[] args)
{
Java3D_first_test test = new Java3D_first_test();
}
//=============================================================================
//コンストラクタ
public Java3D_first_test()
{
//============================================================================
//まずは、基礎フレームの設定。
//============================================================================
//メイン・ウィンドウ作成
JFrame frame = new JFrame();
//ウィンドウのサイズ設定
frame.setSize(250,250);
//ウィンドウのタイトル設定
frame.setTitle("Java3D 動作確認");
//ウィンドウを閉じる動作の登録
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//コンテントペインを作成
JPanel cp = new JPanel();
//コンテントペイン上のレイアウトは全て手動で行う
cp.setLayout(null);
//フレームに、コンテントペインを登録
frame.add(cp);
//============================================================================
//次にJava3D関係の設定。
//============================================================================
//現在使用している画面の、ハードウェア情報を取得する
GraphicsConfiguration g_config = SimpleUniverse.getPreferredConfiguration();
//Canvas3Dというのが、3Dグラフィクスを表示する領域となる
Canvas3D canvas = new Canvas3D(g_config);
//3D表示領域の大きさを設定。今回はウィンドウいっぱいに表示する
canvas.setBounds(0,0,250,250);
//コンテントペインにCanvas3Dを登録
cp.add(canvas);
//============================================================================
//3D空間を構築していきます
//============================================================================
//仮想空間のインスタンスを生成。表示先としてcanvasを指定。
universe = new SimpleUniverse(canvas);
//オブジェクトの「枝」を1つ作る
group1 = new BranchGroup();
//「カラーキューブ」を1つ生成
ColorCube cube = new ColorCube(0.4f);
//座標変換クラスを生成
transform_group1 = new TransformGroup();
//座標変換の書き換えを許可
transform_group1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
//カラーキューブを座標変換クラスに登録
transform_group1.addChild(cube);
//座標変換内容
transform1 = new Transform3D();
//「枝」に座標変換クラスを登録
group1.addChild(transform_group1);
//仮想空間に「枝」を登録(これは最後に・・・!)
universe.addBranchGraph(group1);
//回転数をリセット
rot_value=0.0f;
//============================================================================
//視点について設定
//============================================================================
//視点についてのハードウェア情報を取得。
ViewingPlatform vp = universe.getViewingPlatform();
//視点のための座標変換クラスを用意
TransformGroup Camera = vp.getViewPlatformTransform();
//カメラの位置ベクトル
Transform3D view_pos = new Transform3D();
//カメラの位置を決める
Vector3f pos_vec = new Vector3f(1.4f,1.4f,1.4f);
//カメラの位置について、座標変換実行
view_pos.setTranslation(pos_vec);
//カメラの向きを示すベクトル
Transform3D view_dir = new Transform3D();
Transform3D view_dir2 = new Transform3D();
//カメラの向きを決める
view_dir.rotY(Math.PI/4);
view_dir2.rotX(-Math.PI/4 + 0.1f);
view_dir.mul(view_dir2);
//カメラの位置およびカメラの向きを統合
view_pos.mul(view_dir);
//カメラの位置情報を登録
Camera.setTransform(view_pos);
//============================================================================
//回転のためのタイマーを設定
//============================================================================
Timer timer = new Timer();
timer.schedule(new cube_rot(),0,40);
//ウィンドウを可視化
frame.setVisible(true);
}
//=============================================================================
//内部クラスとして、タイマー割り込み(?)を記述
class cube_rot extends TimerTask
{
public void run()
{
//回転角を増やす
rot_value+=Math.PI/60;
//回転の座標変換実行
transform1.rotY(rot_value);
//座標変換を登録
transform_group1.setTransform(transform1);
//1回転したら、回転角をリセットしておく
if(rot_value>Math.PI*2)
{
rot_value=0.0f;
}
}
}
}
//ソースコードここまで。
//******************************************************************************