void njCnkSimpleMultiDrawMotionLink( object, motionlink, rate )
const NJS_CNK_OBJECT *object
const NJS_MOTION_LINK *motionlink
Float rate
object オブジェクト構造体へのポインタ motionlink モーションリンク構造体へのポインタ rate 補完レイト(0〜1)
なし
モーションリンク構造体によって指定された2つのモーションを結合したモーションを描画します。モーションリンク構造体中の2つのフレーム番号は、リンク元のモーションおよびリンク先のモーションの フレーム番号を指定します。
一方、引数の rate にはそれらのモーション間の内分比を指定します。
引数の rateが 0 のときはリンク元のモーションに、rate が 1のときはリンク先の モーションに一致します。rate がその間(0 < rate < 1)にあるときはリンク先のモーションと リンク元のモーションを補完します。
リンク元やリンク先のモーションを実行するときの補完方法は、それぞれのモーション構造体の inp_fn メンバのビットによって制御できます。デフォルトでは線形補完ですが、 スプライン補完も可能です。
一方、それらを結合する際の補完方法は、線形補完のみ対応しています。
また、リンク元やリンク先の回転の表現が Angle 形式であっても、それらを結合する 際には、いったんそれぞれの回転表現を共にクォータニオン形式に変換してから、 クォータニオンによる線形補完をします。これにより、リンク元とリンク先のモーションに 関連性が薄い場合でも自然な補完が行えます。
#include <Ninja.h> #define OBJECT object_sample #define MOTION1 motion_sample1 /* Entered in NAM file */ #define MOTION2 motion_sample2 /* Entered in NAM file */ extern NJS_MOTION MOTION1[]; extern NJS_MOTION MOTION2[]; extern NJS_CNK_OBJECT OBJECT[]; NJS_MOTION_LINK motionlink; Float rate = 0.0f; : { motionlink.motion[0] = MOTION1;/* Link source */ motionlink.motion[1] = MOTION2;/* Link target* / /* Interpolate from last frame of MOTION1 to 1.5 frames of MOTION2*/ motionlink.frame[0] = MOTION1->nbFrame-1; motionlink.frame[1] = 1.5; : /* rate specifies 0 to 1 */ njCnkSimpleMultiDrawMotionLink( OBJECT, &motionlink, rate ); rate += 0.01f; if ( rate > 1.0f ) { rate = 0.0f; } }
本関数は、他のモーションリンク描画関数と描画関数以外は完全に共通です。
njCnkSimpleMultiDrawObject() CHUNKオブジェクトのSIMPLE MULTI描画 njCnkSimpleMultiDrawMotion() モーションの描画(CHUNK-SIMPLE MULTI) njCnkSimpleMultiDrawShapeMotion() シェープモーションの描画(CHUNK-SIMPLE MULTI) njCnkEasyDrawMotionLink() モーションリンクの描画(CHUNK-EASY) njCnkSimpleDrawMotionLink() モーションリンクの描画(CHUNK-SIMPLE) njCnkEasyMultiDrawMotionLink() モーションリンクの描画(CHUNK-EASY MULTI)