6.光源を使う


『アンビエント光源を使ってみる』

まずは、アンビエント光源を使ってみます。アンビエント光源は一つのフレームに対して一つ定義する事ができます。定義はG3@FRMSETAMBIENT関数で行います。
光の色は光の三原色(赤色、緑色、青色)の割合(0〜1.0)の割合で指定します。
以下は5章で出てきたプログラムです(効果が分かりやすいように傾けています)が、赤い行でアンビエント光源を指定しています。今回は少し弱い白色の光(赤=0.5,緑=0.5,青=0.5)をあてています。実際に描画される色はフェース自身の色に光源の色が加わったものになります。赤色の光をあてる場合はRGB(赤=1.0,緑=0,青=0)を指定すればいいのですが、白系の色(RGBの各色が同じ値)は明るさを表現するという特別な使い方がありますので覚えておきましょう。RGB(赤=0.3,緑=0.3,青=0.3)という少し弱めの白色の光をあてると薄暗い空間に物体があるように描画されます。

CH = G@SETUP( 640 , 480 , 16 , 1 )
FM = G3@FRMMAKE()
MS = G3@MESHLOAD("hikouki.x")
G3@ADD( MS , FM )
G3@ADD( FM , 0 )
G3@FRMSETPOS( FM , 0 , 0 , 2.0 )
G3@FRMSETMATERIALMODE( FM , 4 )
G3@FRMSETROT( FM , -25.0 , 0 , 0 )
G3@FRMSETAMBIENT( FM , 0.5 , 0.5 , 0.5 )
LOOP
  G3@RENDER()
  G@FLIP()
ENDLOOP


『ポイント光源を使ってみる』

次にポイント光源を使ってみます。ポイント光源は一つのフレームに対して複数個定義する事ができます。定義には以下に示す3つの関数を使用します。

G3@LIGHTMAKE関数で光源を生成し、G3@ADD関数で指定のフレームに関連つけます。光源の影響は関連つけられたフレームに対してのみ反映されます。
ポイント光源は、光源の位置を指定することができます。この指定にはG3@LIGHTSETPOS関数を使用します。
下のプログラムは、上のプログラムの内光源に関する赤い行を変更したものです。
G3@LIGHTMAKE関数で、白色(RGB(赤=1.0,緑=0,青=0))のスポット光源を生成し、G3@ADD関数で飛行機のメッシュを含むフレームに関連つけています。光源はG3@FRMSETROT関数で飛行機の右側に置いてみました。
アンビエント光源とは異なり、光のあたる位置による濃淡で立体感が出てきましたね。
なお、光源は距離による減退がないので、好きな距離に配置してかまいません。

CH = G@SETUP( 640 , 480 , 16 , 1 )
FM = G3@FRMMAKE()
MS = G3@MESHLOAD("hikouki.x")
G3@ADD( MS , FM )
G3@ADD( FM , 0 )
G3@FRMSETPOS( FM , 0 , 0 , 2.0 )
G3@FRMSETMATERIALMODE( FM , 4 )
G3@FRMSETROT( FM , -25.0 , 0 , 0 )

LT = G3@LIGHTMAKE( 1 , 1.0 , 1.0 , 1.0 )
G3@LIGHTSETPOS( LT , 10.0 , 0.0 , 0 )
G3@ADD( LT , FM )

LOOP
  G3@RENDER()
  G@FLIP()
ENDLOOP