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 の取り得る範囲は0以上10未満(9.9999)となります。
- 引数 frame を0.5とすると、0フレーム目と1フレーム目の中央のモーションを補完して描画します。
- 引数 frame が9以上10未満(9.9999)の補完は、最後のキーフレームと最初のキーフレーム間の補完となります。
引数 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() ライトアクション情報取得関数