Ninja Library - モーション関数

njGetMotionNodeData

現在のモーションパラメータにおいてのカレントノードの姿勢情報の取得

書式

int njGetMotionNodeData( cnkobj, pos, ang, scl, qua )
const NJS_CNK_OBJECT *cnkobj
Float pos[3]
Angle ang[3]
Float scl[3]
NJS_QUATERNION *qua

引数

cnkobj   カレントノードに対応したチャンクオブジェクト構造体へのポインタ。
pos   位置の格納先
ang   角度の Angle 形式の格納先
scl   拡大率の格納先
qua   角度の NJS_QUATERNION 形式の格納先

戻り値

戻り値   返された回転パラメータの種類
NJD_MROT_ANGLEXYZ   回転パラメータは、XYZ-Angle 形式で引数 ang に返された。
NJD_MROT_ANGLEZXY   回転パラメータは、ZXY-Angle 形式で引数 ang に返された。
NJD_MROT_QUATERNION   回転パラメータは、NJS_QUATERNION 形式で引数 qua に返された。

解説

現在のモーションパラメータにおいての、カレントノードの補完後の位置、回転、拡大縮小 情報を取得します。

本関数を呼ぶ前に、njStartMotionObj() または njStartMotionObjEx() 関数で、 カレントのモーションパラメータを設定してある必要が有ります。

対応するモーションデータが無い場合は、指定された cnkobj の固定パラメータが返されます。


回転パラメータについては3通りの返され方があり、戻り値によって区別できます。
回転パラメータは引数 ang と qua のどちらか一方に返されます。
回転パラメータが引数 ang に返された場合、回転順序に XYZ と ZXY の二通りあり戻り値に よって区別できますが、いずれの場合でも、ang[0], ang[1], ang[2] が、それぞれ、 X,Y,Z 軸周りの回転角に対応します。

本関数が正常に終了すると、引数に指定された領域に以下のような情報が返されます。

 返される場所   内容 
 pos[0] pos[1] pos[2]   カレントノードの位置 
 ang[0] ang[1] ang[2]   カレントノードの角度のAngle表現(戻り値参照) 
 scl[0] scl[1] scl[2]   カレントノードの拡大率 
 qua->re qua->im[0] qua->im[1] qua->im[2]   カレントノードの角度のQuaternion表現(戻り値参照) 

指定された cnkobj の evalflags メンバに NJD_EVAL_SKIP が指定されていない場合:

指定された cnkobj の evalflags メンバに NJD_EVAL_SKIP が指定されている場合: 以下の説明において、ある項目のキーフレームが存在するとは、motion->type の対応する NJD_MTYPE_??? ビットが ON であり、かつ、カレントノードに対応する NJS_MDATA(n)配列中の実際のそのキー配列へのポ インタが NULL ではないことを意味します。

 条件   動作   戻り値 
 カレントノードの pos キーがある場合   前後の pos キーを補完して引数posに返す。   ---- 
 カレントノードの pos キーがない場合   cnkobj->pos を引数posに返す。   ---- 
 カレントノードの scl キーがある場合   前後の scl キーを補完して引数sclに返す。   ---- 
 カレントノードの scl キーがない場合   cnkobj->scl を引数sclに返す。   ---- 
 カレントノードの ang キーがある場合   前後の ang キーを補完して引数angに返す。   NJD_MROT_ANGLE??? 
 カレントノードの ang キーがない場合   cnkobj->ang を引数angに返す。   NJD_MROT_ANGLE??? 
 カレントノードの qua キーがある場合   前後の qua キーを補完して引数quaに返す。   NJD_MROT_QUATERNION 
 カレントノードの qua キーがない場合   cnkobj->ang を引数angに返す。   NJD_MROT_ANGLE??? 

上の表で戻り値が NJD_MROT_ANGLE??? とある場合、以下の表のように 条件によって実際の戻り値は NJD_MROT_ANGLEZXY または、NJD_MROT_ANGLEXYZ のいずれかに成ります。

 条件   戻り値 
 cnkobj->evalflags に NJD_EVAL_ZXY_ANG が指定されているとき   NJD_MROT_ANGLEZXY 
 cnkobj->evalflags に NJD_EVAL_ZXY_ANG が指定されていないとき   NJD_MROT_ANGLEXYZ 

用例欄に、njMotionTransformEx と等価なソースコードを示します。


用例

//     Equivalent source code of njMotionTransformEx
void njMotionTransformEx( const NJS_CNK_OBJECT *cnkobj )
{
    Float                pos[3];
    Float                scl[3];
    Angle                ang[3];
    NJS_QUATERNION       qua;
    int                  MotRot;
    
    MotRot       = njGetMotionNodeData( cnkobj, pos, ang, scl, &qua );
    
    njTranslateEx( (NJS_VECTOR *)pos );
    
    switch( MotRot ) {
    case NJD_MROT_ANGLEXYZ :
        njRotateEx( ang, 0 );
        break;
    case NJD_MROT_ANGLEZXY :
        njRotateEx( ang, 1 );
        break;
    default:
        njQuaternionEx( &qua );
        break;
    }
    
    njScaleEx( ( NJS_VECTOR *)scl );
}

備考

本関数はカレントモーション情報構造体に対し動作します。

参照

njStartMotionObj() 0番スロットへのオブジェクトモーションパラメータの設定
njMotionTransformEx() 現在のモーションパラメータにおいてのカレントノードのマトリックス作成
njSetNextMotionNodeEx() モーションのカレントノードの更新
njGetMotionLinkNodeData() 現在のモーションリンクパラメータにおいてのカレントノードの姿勢情報の取得

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