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 の範囲と補完のされ方をまとめると次のように成ります。

 引数 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;
	}
    
}

備考


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

参照

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

njGetLightMotion
COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000