モデルの読み込み


モデルデータの読み込み方についてです。

読み込み / 戻る / トップページ


モデルの読み込み

Java3D にはユーティリティークラス (com.sun.j3d.loaders パッケージ) ではありますが、 モデルデータを読み込む機能が提供されています。 標準では LightWave3D のシーンファイル (.lws)、 Wavefront のオブジェクトファイル (.obj) の二種類が読みこめます。
 
ローダーの実装方法・使い方には指針が示されているため、 他の方が作ったローダー (例えば、 Portfolio など) もこの指針に従っているものは同じ方法で使えます。
 
使い方は大変簡単です。 各ローダーをオブジェクトに対して load メソッドを呼び出します。 引数には Reader, ファイル名、URL が指定できます。
	Loader loader=new Lw3dLoader();
	Scene scene=loader.load("hogehoge.lws");
load メソッドの返り値として Scene オブジェクトを得ます。 Scene オブジェクトにはファイルから読みこまれた情報が詰まっています。 通常はそれらの情報を一つの Scenegraph の木として返す getSceneGroup() メソッドで BranchGroup オブジェクトを得れば十分です。
	root.addChild(scene.getSceneGroup());
これで、モデルは読みこめますが表示する時には少し注意が必要です。 Java3D の標準の奥行き方向の視界は非常に狭いため、 モデリング時のスケールによっては全体を表示できない時があります。
 
SimpleUnivere では次のようにして視界を広めます。
	universe.getViewer().getView().setFrontClipPolicy(View.VIRTUAL_EYE);
	universe.getViewer().getView().setFrontClipDistance(0.5);
	// こちら側のクリッピング領域
	universe.getViewer().getView().setBackClipPolicy(View.VIRTUAL_EYE);
	universe.getViewer().getView().setBackClipDistance(1000.0);
	// 向こう側のクリッピング領域
この例では視点から 0.5m より近いもの、 1000.0m より遠いものを表示しない設定になります。 向こう側のクリッピング領域をより大きくすれば当然遠くのものまで 表示できるようになりますが、 Z-buffer (物体の奥行き情報を保持するメモリ) の精度という問題があるため あまり大きな値を設定してしまいますと 奥に隠れるはずの物体が手前に表示されてしまったりします。 表示量が増えれば表示速度も当然遅くなってしまいますので、 適度な範囲で設定する必要があります。

戻る