void njLightMotion( light_num, light, motion, frame )
Int light_num
const NJS_LIGHT *light
const NJS_MOTION *motion
Float frame
light_num ライト番号 light ライト構造体へのポインタ motion ライト用のモーション構造体へのポインタ frame フレーム番号(0〜モーションフレーム数(motion->nbFrame)未満)
なし
ライトのモーションをモーションデータにしたがって実行します。 ライト構造体のfuncがEasyMulti、SimleMulti関数の場合は、ライト番号(light_num)を 指定します。設定する値は、EasyMulti、SimpleMulti関数のライト番号と同じです。 ただし、アンビエントライトのときと、Easy、Simple関数のときこの値は参照されません。 ライト構造体のfunc,typeは、njLightMotion関数を使用する前に設定しておいてください。 本関数ではLightSwitch関数、LightMatrices関数は実行していません。ライトを反映させるために 各自実行してください。 通常、本関数の light 引数には、NACファイル(またはNJCファイル)中の NJS_LIGHT 構造体、 motion 引数には、ライトモーション用の NAMファイル(またはNJMファイル)中の NJS_MOTION 構造体 を指定します。引数の light 構造体は、モーションデータ中にキーフレームデータ列が存在しない場合の デフォルト値として使用されます。従って読み込まれるだけで書き込みは行われません。
引数 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> #define LIGHT light1; #define LIGHT_MOTION light_motion1; #define ENEMY1_MODEL model_enemy1; #define ENEMY1_MOTION motion_enemy1; extern NJS_LIGHT LIGHT; extern NJS_MOTION LIGHT_MOTION; extern NJS_MODEL ENEMY1_MODEL; extern NJS_MOTION ENEMY1_MOTION; void DrawFunc( Float frame ) { njLightMotion( NJD_CNK_EASY_MULTILIGHT_1,&LIGHT, &LIGHT_MOTION, frame ); njCnkSetEasyMultiLightSwitch(NJD_CNK_EASY_MULTILIGHT_ALL, 1); njPushMatrixEx(); njCnkSetEasyMultiLightMatrices(); njTranslate( NULL, EneX, EneY, EneZ ); njCnkEasyMultiDrawMotion( &ENEMY1_MODEL, &ENEMY1_MOTION, frame ); njPopMatrixEx(); }
本関数は0番スロットのモーション情報構造体を使用します。
本関数を呼び出すとカレントモーション情報構造体は0番スロットに設定されます。
njLightAction() ライトモーションの実行(アクション構造体対応)