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

njCreateLight

ライトの登録

書式

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

引数

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

戻値

なし

解説

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

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

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

ライトの種類(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()によって指定された角度で定められる円錐内が照射されます。


用例

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

参照

njDrawObject()
njFastDrawObject()
njCnkDrawObject()

njCreateLight
COPYRIGHT © SEGA ENTERPRISES, LTD., 1998