書 式
-
#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);
...........
/* 平行光源はnjDeleteLight、njLightOffが呼ばれなければ、
この後のすべてのモデル関数で反映されることになります */
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によって指定された角度で定められる円錐内が照射されます。