Volume Renderingの課題

概要

 このJavaアプレットは、1998年度の「情報科学特論IV」課題3を実現したものです。

 このJavaプログラムは、JDK1.1に準拠するように書いてあるため、JDK1.0の仮想マシンを塔載したブラウザでは動作しません。Netscape 4.5 以上・Internet Explorer 4以上、などで御覧下さい。非常に重いアプレットですので、できる限りIE4で御覧になることをお勧めします。


説明

 3次元配列に「不透明度」の入ったデータを可視化するプログラムです。可視化の方法は教科書にある方法に従って、各ボクセル毎の輝度値を求めました。

 レイ・キャスティングにおけるサンプリングは、レイに沿って等間隔に行ないました。そのため、輝度・不透明度ともに、tri-linear補間によって計算されています。

ソースコード

ソースファイル名説明
Ray.java 視線(レイ)を表すクラス。視点・レイの先頭などの情報を持っている
Vector3D.java 3次元ベクトルのクラス。内積や外積・ノルム・定数倍など。
VolumeData.java ボリュームデータ全体を表すクラス。中にボクセルなどの情報がある
VolumeRendering.java このアプレットのメインクラス。
Voxel.java ボクセル1つに関する情報。位置や、輝度・不透明度など。
VoxelCube.java 格子点状に並んでいるボクセルに囲まれている、最小の立方体を表す。この立方体を取り囲んでいる8つのボクセルを持っている。tri-linear補間をするときに必要になる。

データについて

 以下の表に、実際にボリュームレンダリングをしてみた結果の画像と、その画像の説明を示します。画像をクリックすると、その画像を表示するアプレットを実行することができますが、大変重い計算を行うので、十分なマシンパワーが必要かも知れません。(あまりにヒドいアプレットなのでリンクを外しました(^^;)

画像 説明
物体内部の全ての点の不透明度が均一の場合です。
不透明度が均一だと、輝度を求めるための法線ベクトルが求まらないため、そのような所の輝度は0と仮定して生成しました。そのため、中央が殆ど透けてしまっています。
球の中心へ行く程、透明度が増す場合です。意図通り、中空な感じが表れています。
球の中心へ行く程、不透明度が増す場合です。これも、意図通り、中身がつまった感じが表れています。
球の中心に、3方向に穴を空けたようなデータを作ってみました。球の中心を原点とした座標系を考えたときに、それぞれの軸の周りだけ、その他の部分の1/3の不透明度になっています。

TOYAMA Sumio <sumio@is.s.u-tokyo.ac.jp>
$Id: index.html,v 1.3 1999-09-12 05:01:11+09 sumio Exp $