Ninjaライブラリ - ライト関数

njCreateLight

ライトの登録

書式

void njCreateLight( *ptr, lsrc ) 
NJS_LIGHT *ptr 
Int lsrc 

引数

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

戻り値

なし

解説

光源の種類を定め、ライトを新たに設置(登録)します。 ライトの計算は、主として光線・ポリゴン法線(もしくは頂点の法線)の方向とライト〜頂点(またはモデル中の代表点)間距離で行います。 ポリゴンに照射される光は、原則として光線と法線の角度が90〜180度の間で行われ、180度に近くなるほど明るく、90度より小さくなると完全に照射がなくなります。 また、平行光源類を除き、距離が離れていけば減衰します。

NJD_DIR_LIGHT|NJD_SIMPLE_LIGHT(ベーシックモデル) のみ、0〜180度で計算されます。

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

●ベーシックモデル: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   ユーザーが作成したライト関数を呼びます。 

●チャンクモデル:njCnkDrawObject関数類が対応します。環境光はシーン(システム)に一つのみです。

 NJD_SPEC_DIR(NJD_SPEC_POINT)   ハイライト付き平行光源(点光源):スペキュラハイライトはスペキュラ無視フラグ(NJD_FST_IS)で消すことができ、平行光源(点光源)と同じになります。 
 NJD_SPOT_LIGHT   スポットライト:平行光源・点光源と同様に決められた光線方向・位置、そしてnjSetLightAngle関数によって指定された角度で定められる円錐内が照射されます。 


用例

	:
NJS_LIGHT light;
	:
/* 平行光源を登録 */
njCreateLight(&light, NJD_DIR_LIGHT);
	:
/* 平行光源はnjDeleteLight、njLightOffが呼ばれなければ、
  この後のすべてのモデル関数で反映されることになります */
njDrawObject(...);
	:

参照

njDrawObject()
njFastDrawObject()
njCnkDrawObject()

njCreateLight
COPYRIGHT © SEGA ENTERPRISES, LTD., 1998,1999