njCreateLight
光源の種類を定め、ライトを新たに設置(登録)します。

書 式

#include <NINJA.H> 
void njCreateLight( *ptr, lsrc )
NJS_LIGHT *ptr
Int lsrc

引 数

NJS_LIGHT *ptr
ライトのポインタ。
lsrc
光源の種類。

返 値

なし

エラー

なし

機 能

ライトの計算は、主として光線・ポリゴン法線(もしくは頂点の法線)
の方向とライト−頂点(またはモデル中の代表点)間距離で行います。

ポリゴンに照射される光は、原則として、光線と法線の角度が90−180度間で
行われ、180度に近くなるほど明るく、90度より小さくなると完全に照らされません。

また、距離が離れていけば減衰します(ただし平行光源類を除きます)。

NJD_DIR_LIGHT|NJD_SIMPLE_LIGHT(BASICモデル) のみ、0−180度で計算されます。

用 例

#include <NINJA.H> 
...........

NJS_LIGHT light;

sbInitSystem( NJD_RESOLUTION_VGA, NJD_FRAMEBUFFER_MODE_RGB565, 1);

/* 平行光源を登録 */
njCreateLight(&light, NJD_DIR_LIGHT);
...........

/* 平行光源はnjDeleteLightnjLightOffが呼ばれなければ、
   この後のすべてのモデル関数で反映されることになります */
njDrawObject(...);
...........

備 考

ライトの種類(lsrc)は以下の通りです。

BASICモデル

njDrawObject
njFastDrawObject
関数類が対応します。(njFastDrawObject類は輝度のみ)

単一ライトモデル

NJD_AMBIENT
環境光:すべての面に等しく照らされます。

NJD_DIR_LIGHT
平行光源:距離によらず、njSetLightDirectionで指定された光線の方向、もしくは、njRotateLightX等のマトリックス演算後に回転された方向に照らされます。 この光源はまた、ライトフラグNJD_SIMPLE_LIGHTを追加できます。

NJD_POINT_LIGHT
点光源:njSetLightLocationによって指定された点、もしくは、njTranslateLight等のマトリックス演算後に移動された点より放射状に照射されます。 この光源は、ライトフラグNJD_SIMPLE_LIGHT、NJD_BLOCK_LIGHTを追加できます。

NJD_SPOT_LIGHT
スポットライト:平行光源・点光源と同様に決められた光線方向・位置、そして、njSetLightAngleによって指定された角度で定められる円錐内が照射されます。 この光源は、ライトフラグNJD_SIMPLE_LIGHT、NJD_BLOCK_LIGHTを追加できます。

複合ライトモデル

NJD_SPEC_DIR(NJD_SPEC_POINT)
ハイライト付き平行光源(点光源):スペキュラハイライトは njSetLightAngleによって指定された角度の条件で光ります。 他は、平行光源(点光源)に同じです。 この光源は、ライトフラグNJD_SIMPLE_LIGHTを追加できます(点光源のみ NJD_BLOCK_LIGHTも指定できます)。

NJD_LAMBERT_DIR(NJD_LAMBERT_POINT)
ランバートモデル:平行光源(点光源)に環境光も含めた標準的なライトモデルにしたがって照射されます。 この光源は、ライトフラグNJD_SIMPLE_LIGHTを追加できます(点光源のみ NJD_BLOCK_LIGHTも指定できます)。

NJD_PHONG_DIR(NJD_PHONG_POINT)
フォンモデル:平行光源(点光源)に環境光・スペキュラ光も含めた標準的なライトモデルにしたがって照射されます。 この光源は、ライトフラグNJD_SIMPLE_LIGHTを追加できます(点光源のみ NJD_BLOCK_LIGHTも指定できます)。

その他のフラグ

NJD_SIMPLE_LIGHT
原則として計算を単純化し、ライトの計算を速くします。 ただし、クオリティにも影響する場合があります。 使用法は、NJD_SPEC_POINT|NJD_SIMPLE_LIGHTのようにor演算子で設定します。

NJD_BLOCK_LIGHT
距離の演算を頂点ごとではなく代表点で行うので、ライトの計算を速くします。 ただし、場合によりクオリティにも非常に影響し、モデルによっては期待する効果が得られないことがあります。 使用法は、NJD_SIMPLE_LIGHTと同じです。

ユーザ設定(コールバック)ライト

NJD_USER_LIGHT
ユーザが作成したライト関数を呼びます。

CHUNKモデル

njCnkDrawObject
関数類が対応します。環境光はシーン(システム)に一つのみです。

NJD_SPEC_DIR(NJD_SPEC_POINT)
ハイライト付き平行光源(点光源):スペキュラハイライトはスペキュラ無視フラグ
(NJD)で消すことができ、平行光源(点光源)と同じになります。

NJD_SPOT_LIGHT
スポットライト:平行光源・点光源と同様に決められた光線方向・位置、そして、
njSetLightAngleによって指定された角度で定められる円錐内が照射されます。

関 連

njDrawObject
njFastDrawObject
njCnkDrawObject
njCreateLight

Copyright SEGA ENTERPRISES, LTD., 1998