# Ninjaライブラリ

## ライト構造体

## NJS_LIGHT_CAL, *NJS_LIGHT_CAL_PTR構造体

［定義］
  ライト内部の計算結果を格納する構造体
  ユーザ・レベルでこの構造体を触ることを禁止します。
  光源システム用作業領域となっている為、メンバの保証はありません
  （いつもメンバの説明通りの内容になっているとは限りません。）

［記述］

      typedef struct{
      	Float		ratten;		/* ブロック・ライト用減衰率	*/
      	Float		ipd;		/* ブロック・ライト用内積結果	*/
      	Float		nrr,frr;	/* 距離限界値	*/
      	Float		cosi,cose;	/* 角度限界値	*/
      	Float		idev,odev;	/* 光線の距離計算用の係数設定	*/
      	Float		rate;		/* 減衰率	*/
      	Float		intns;		/* 輝度値	*/
      	Int		exp;		/* 指数値	*/
      	Int		reserve;        /* 予約		*/
      	NJS_POINT3	lpnt;		/* 光源位置ベクトル	*/
      	NJS_VECTOR	lvctr;		/* 光源方向ベクトル	*/
      	NJS_VECTOR	lmvctr;		/* ブロック・ライト用ベクトル	*/
      	NJS_ARGB	atten;		/* 光源計算用バッファ	*/
      	NJS_ARGB	amb,dif,spc;	/* 光源計算用バッファ	*/
      	NJS_ARGB	mamb,mdif,mspc;	/* 光源計算用バッファ	*/
      } NJS_LIGHT_CAL, *NJS_LIGHT_CAL_PTR;

## NJS_LIGHT_ATTR, *NJS_LIGHT_ATTR_PTR構造体

［定義］
  光源の属性が格納されている構造体
  ユーザ・レベルでこの構造体を設定することがありません。

［記述］

      typedef struct {
      	Int		lsrc;	/* 光源の種類
      				   0x01:NJD_AMBIENT
      				   0x02:NJD_DIR_LIGHT
      				   0x03:NJD_LAMBERT_DIR
      				   0x04:NJD_POINT_LIGHT
      				   0x05:NJD_LAMBERT_POINT
      				   0x08:NJD_SPOT_LIGHT
      				   0x10:NJD_SPEC_DIR
      				   0x13:NJD_PHONG_DIR
      				   0x20:NJD_SPEC_POINT
      				   0x25:NJD_PHONG_POINT
      				   0x40:NJD_USER_LIGHT
      				   0x80:NJD_SIMPLE_LIGHT
      				   0xC0:NJD_BLOCK_LIGHT
      				*/
      	Float		iamb;	/* 環境光の強度		*/
      	Float		idif;	/* ディフューズ光の強度	*/
      	Float		ispc;	/* スペキュラの強度	*/
      	Float		nrang;	/* 光源の距離減衰のはじまる距離	*/
      	Float		frang;	/* 光源の効果をカットする距離	*/
      	void*		func;	/* ユーザ指定のライト	*/
      	Angle		iang;	/* スペキュラ又はスポットライトが最大強度である角度*/
      	Angle		oang;	/* スペキュラ又はスポットライトの効果がなくなる角度*/
      	NJS_ARGB	argb;	/* 光源色	*/
      } NJS_LIGHT_ATTR, *NJS_LIGHT_ATTR_PTR;

## NJS_LIGHT, *NJS_LIGHT_PTR構造体

［定義］
  光源１個分のデータを格納する構造体

［記述］

      typedef struct {
      	NJS_MATRIX	mtrx;	/* マトリクス	*/
      	NJS_POINT3	pnt;	/* 光源の位置ベクトル	*/
      	NJS_VECTOR	vctr;	/* 光源の方向ベクトル	*/
      	Int		stat;	/* 光源の状態（ＯＮ・ＯＦＦ）*/
      	Int		reserve;	/* 予約	*/
      	NJS_LIGHT_CAL	ltcal;	/* ライブラリの計算用作業領域
      				   (通知なく変更する場合がありますので使用しないで下さい）
      				*/
      	NJS_LIGHT_ATTR	attr;	/* ライトの属性構造体	*/
      } NJS_LIGHT, *NJS_LIGHT_PTR;

## NJS_LIGHT_MATERIAL構造体

［定義］
  ライト用マテリアル・データ構造体
  (モデル・ルーチン内部で光源システムに受け渡すマテリアル・データモデル計算時の
  中間頂点バッファ格納用構造体)

［記述］

      typedef  struct {
      	NJS_ARGB	ambient;	/* マテリアルのアンビエント色	*/
      	NJS_ARGB	diffuse;	/* マテリアルのマテリアル色	*/
      	NJS_ARGB	specular;	/* マテリアルのスペキュラ色	*/
      	Float		exponent;	/* 指数値			*/
      } NJS_LIGHT_MATERIAL;