[プログラムの使用法]
 このプログラムでは、レイトレーシングの追跡の深さ、各球の特性、視点、背景色を任意に指定できる。
 チョイスボタンより変更したい項目を選択し、各パラメータの値を入力する。traceボタンをクリックすると再描画を始める。

 各パラメータの意味は以下のようになる。  (プログラムの理論の説明における各式、各図を参照)
depth:レイトレーシングの追跡の深さ
material:各球の特性
  sphere No.:属性を変更した球の番号
       (0):赤色の球[red]、(1):透明の球[transparent](黒)
       (2):黄緑色[yellowish green]、(3):水色[light blue]、
       (4):黄色[yellow]
       初期状態での配置を下図に示す。
       
  n,W,kt,ir :各球の特性を示すパラメータ
      n:下記の式においてCOSにかかる係数、W:鏡面反射率、kt:透過率、ir:屈折率
view point r,th,pi:視点の位置。極座標系における距離r、方位角theta、仰角:paiを示す。
back color r,g,b:背景の色を変更する。R,G,B成分を示す。
各球の属性のパラメータの情報が、右上のキャンバスに表示される。
キャンバスに表示されている内容は、
  球の番号=n:屈折率、W:鏡面反射率、kt:透過率、ir:屈折率
を示す。

phongのモデルは以下の式で表わされる。
 
 S:鏡面反射光の強さ
 Ii:入射光の強さ
 W:鏡面反射率
 n:ハイライトの特性を示す
 透過率:kt
 屈折率:ir
 (W+kt=1)。
 r(gamma):光源の反射ベクトルと視線ベクトルのなす角。


[プログラムの実行例]
(1)初期値画像


(2)depth,ambient colorを変更した例

 追跡の深さ:depth =1、背景色:ambient color =0.4,0.1,0.4


(3)materialの特性を変更した例

 1:透明の球 −> 反射率:W =0.5、透過率:kt=0.5
 0、2、3、4の球 −> COSにかかる係数: n = 5 の場合


(4)視点を変えた場合

 視点(r,th,fai) = 15、45、45



[プログラムリストの説明]
 このプログラムは、raytracer1,DispCanvas,Phong,Vec,Sphereの5つのクラスで構成されている。
 raytracer1はメインとなるクラスで、アプレット上に、描画をするための領域であるキャンバス、文字を入力するためのテキストフィールド、ボタンなどを設定している。また、各種イベントが発生したときの定義などを行っている。文字入力の部分はTextFieldクラス、ボタンの部分はButtonクラス、画像の表示部分にはCanvasクラス、"depth :","sphere No.:"などのラベルの部分にはLabelクラスを用いている。
 traceというボタンが押される、というイベントが発生すると、105行目から150行目の部分が実行され、phongクラスが呼ばれ、再描画を始める。
 これらのGUIの機能を使用するには、JAVAでは、AWT(Abstract Window Toolkit)と呼ばれるGUIツールキットを用いる。プログラム中では、2行目のimprot java.awtで、これをimportしている。
 Phongは、レイトレーシングを行うクラスである。Vecは、3次元ベクトルのクラスである。vcomb,vunitのメソッドで、ベクトルの1次結合、正規化を行う。Sphereは、球を定義している。DispCanvasは、アプレットの右上の部分の球の属性を示す変数の値を表示するキャンバスのクラスである。
 各クラスにおいて、setval,setparamなどsetで始まるメソッドが、各クラスに各変数を代入するものである。