Chapter4. 拡張関数


4.6 3Dグラフィックス関数

関数名
G3@LIGHTMAKE
機能
光源を生成する。
書式
int。G3@LIGHTMAKE(Type,red,green,blue , alpha)
《パラメーター》
Typeint。光源の種類。
1
:ポイントライト
点で照らす光。点から全方向に均等に光を放つ。
2
:スポットライト
円錐状で照らす光。スポットライトのような光源。光の光度には中心と周辺の2つを指定する。
3
:ディレクショナルライト
無限に遠い位置から特定の方向に照らす光。太陽の光のようなもの。
4
:半球ライティング
ディレクショナルライトに加え、同ディレクショナルライトの地面からの照り返しの影響も受ける。ただし、複数の半球ライティングを生成した場合は、有効なライト(G3@LIGHTSETENABLEで有効にした光源)のうち、より先に生成した1つのみ描画に反映する。
ディレクショナルライトの場合、光を受ける面の反対側は計算上光をまったく受けないため真っ暗になってしまう。
しかし実際の世界では照り返しがあるため、光を直接受けない面にもわずかな光を受けている。この照り返しの影響を受けるにはディレクショナルライトではなく半球ライティングを使うとよい。ただし、処理を高速化するため単純に光源に対して1/4の光を反対側から当てる処理(スペキュラの影響は受けない)を行っているだけのため、場合によっては期待する表現がされない可能性が無きにしもあらず・・・。また演算上は2つのライトを使用してしまう点にも注意が必要です。
5
:トゥーンライト
トゥーンシェーディングに影響を与えるライト
6
:シャドウライト
シャドウ描画に影響を与えるライト。alpha値で影の濃さを指定できます。
redfloat。光源の赤色の量。0〜1.0。
greenfloat。光源の緑色の量。0〜1.0。
bluefloat。光源の青色の量。0〜1.0。
alpha float。光源のアルファ成分を指定する。0〜1.0。本設定はシャドウライトでのみ有効である。
戻り値int。ライト番号。
解説
生成した光源は G3@ADD関数でフレームに関連付けて使用する。1つの光源は1つのフレームに関連付ける事ができ、デフォルトでは関連付けたフレーム及び同フレーム配下のフレームに影響を与える。フレームの設定(G3@FRMSETLIGHTD関数,G3@FRMSETLIGHTS関数)により上位フレームの影響を受けないようにすることもできる。
なお、光源が必要なくなった時は、G3@DELETE関数で関連付けを開放し、G3@RELEASE関数で開放する。
複数のライトを生成することができるが、実際に有効となるライトは8つだけである。その為生成したライト(生成しG3@ADDで登録したもの)が全て描画に反映されるわけではない。描画に反映される条件(1が最優先とする優先順位あり)は以下のとおりであり、フレーム毎に最大8つのライトが描画に反映される。
-----------
1.半球ライティングで有効なライト(G3@LIGHTSETENABLEで有効にした光源)のうち1つのみ適用される。(2つのライトを消費する事に注意すること)
2.ディレクショナルライトで有効なライト(G3@LIGHTSETENABLEで有効にした光源)が適用される。
3.ポイントライトとスポットライトはフレームに最も近い場所のライトが適用される。
-----------
トゥーンライトは特殊な光源の為、他の光源との関係性は低く、フレーム毎のライト数(最大8つ)には含まれない。1つのフレームに影響を与えるトゥーンライトは1つのみである。フレームに複数のトゥーンライトを登録した場合(上位フレームからの影響を含む)は、G3@LIGHTMAKEで先に生成したトゥーンライトが有効となる。
用例
水色(赤=0、緑=1.0、青=1.0)のライトを生成し、フレームに追加する。
FD=G3@FRMLOAD("sample.x")
LD = G3@LIGHTMAKE( 3 , 0 , 1.0 , 1.0 )
G3@ADD( LD , FD )