##### Ninja Library - モーション関数

# njGetLightMotion

ライトモーションのモーション後のデータの取得

### 書式

> `void njGetLightMotion( light, motion, data, frame )
> const NJS_LIGHT *light
> const NJS_MOTION *motion
> NJS_LMOTION_DATA *data
> Float frame
> `

### 引数

> light | ライト構造体へのポインタ
> motion | ライト用のモーション構造体へのポインタ
> data | 補完後のライト情報を取得するための構造体へのポインタ
> frame | フレーム番号(0〜モーションフレーム数(motion->nbFrame)未満)

### 戻り値

> なし

### 解説

> ライトのモーションをモーションデータにしたがって実行し、引数 data で指定された構造体に 示されている領域にモーション後のライト情報を返します。

> 通常、本関数の light 引数には、NALファイル（またはNJLファイル）中の NJS_LIGHT構造体、 motion 引数には、ライトモーション用の NAMファイル（またはNJMファイル）中の NJS_MOTION 構造体 を指定します。

> 引数の light 構造体は、モーションデータ中にキーフレームデータ列が存在しない場合のデフォルト値 として使用されます。従って読み込まれるだけで書き込みは行われません。

> 引数の data で示される NJS_LMOTION_DATA 構造体に直接値が格納されるのではありません。 予め NJS_LMOTION_DATA 構造体のメンバにモーション後のライト情報を返して欲しい領域へのポインタ を格納しておくと、本関数はその領域へ補完後のライト情報を返します。

> データ構造体のメンバ | 意味 | 領域の型
> data->pos | ライトの位置またはライトの方向を返す領域へのポインタ | Float pos[3]
> data->rgb | ライトのカラーを返す領域へのポインタ | Float rgb[3]
> data->rang | ライトのインテンシティ(inten)、アンビエント(ambi)または、ライトの範囲(nrange,frange)を返す領域へのポインタ | Float range[2]

> 引数 frame で示される位置の位置データ、及び姿勢データを、モーションデータのキーフレーム間を補間して 作成します。

> 例: フレーム数（motion->nbFrame）が10のモーションの場合

> - 引数 frame の取り得る範囲は0以上10未満(9.9999)となります。
> - 引数 frame を0.5とすると、0フレーム目と1フレーム目の中央のモーションを補完して描画します。
> - 引数 frame が9以上10未満(9.9999)の補完は、最後のキーフレームと最初のキーフレーム間の補完となります。

> 引数 frame の範囲と補完のされ方をまとめると次のように成ります。

> 引数 frame の範囲 | 補完のされ方
> frame < 0 | 暴走はしませんが通常は使いません。
> 0 <= frame <= motion->nbFrame - 1 | 通常の補完
> motion->nbFrame - 1 <= frame < motion->nbFrame | 最後のキーフレームと最初のキーフレームの補完
> motion->nbFrame <= frame | 暴走はしませんが通常は使いません。

### 用例

>     #include <Ninja.h>

>     void njEasyMultiLightMotion( Int light_num, const NJS_LIGHT *light, const NJS_MOTION *motion, Float frame )
>     {
>     	NJS_LIGHT dst_light;
>     	NJS_LMOTION_DATA data;

>     	//	補完データの取得
>     	data.pos = &dst_light.x;
>     	data.rgb = &dst_light.r;
>     	data.rang = &dst_light.f1;

>         njGetLightMotion( light, motion, &data, frame );

>     	switch(light->type){
>     	case NJD_LTYPE_POINT:
>     		njCnkSetEasyMultiLightPoint( light_num, dst_light.x, dst_light.y, dst_light.y);
>     		njCnkSetEasyMultiLightColor( light_num, dst_light.r, dst_light.g, dst_light.b );
>     		njCnkSetEasyMultiLightRange( light_num, dst_light.f1, dst_light.f2);
>     		break;
>     	case NJD_LTYPE_VECTOR:
>     		njCnkSetEasyMultiLightVectorEx(light_num, dst_light.x, dst_light.y, dst_light.y);
>     		njCnkSetEasyMultiLightColor( light_num, dst_light.r, dst_light.g, dst_light.b );
>     		break;
>     	case NJD_LTYPE_AMBIENT:
>     		njCnkSetEasyMultiAmbient( dst_light.r, dst_light.g, dst_light.b );
>     		break;
>     	}

>     }

### 備考

> 本関数は０番スロットのモーション情報構造体を使用します。
> 本関数を呼び出すとカレントモーション情報構造体は０番スロットに設定されます。

### 参照

> njLightMotion() | ライトモーションの実行
> njLightAction() | ライトモーションの実行（アクション構造体対応）
> njGetLightAction() | ライトアクション情報取得関数

njGetLightMotion

COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000