##### Ninja Library - モーション関数

# njGetMotionLinkNodeData

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

### 書式

> `int njGetMotionLinkNodeData( 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 に返された。

### 解説

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

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

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

> 回転パラメータについては３通りの返され方があり、戻り値によって区別できます。
> 回転パラメータは引数 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 が指定されていない場合:

> - カレントノードに対応した NJS_MDATA(n) 配列中のポインタが指すキーフレーム配列が参照される。
> - カレントノードが更新される(０番スロットと１番スロットの両方に対してnjSetNextMotionNodeEx()が呼び出される)。

> 指定された cnkobj の evalflags メンバに NJD_EVAL_SKIP が指定されている場合:
> - cnkobj の中のpos,ang,sclメンバがそのまま引数にコピーされる。
> - カレントノードは更新されない。

> 以下の説明において、ある項目のキーフレームが存在するとは、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

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

### 用例

>     //     Equivalent source code of njMotionLinkTransformEx
>     void njMotionLinkTransformEx( const NJS_CNK_OBJECT *cnkobj )
>     {
>         Float                pos[3];
>         Float                scl[3];
>         Angle                ang[3];
>         NJS_QUATERNION       qua;
>         int                  MotRot;

>         MotRot       = njGetMotionLinkNodeData( 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 );
>     }

### 備考

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

### 参照

> njStartMotionLink() | モーションリンクパラメータの設定
> njMotionLinkTransformEx() | 現在のモーションリンクパラメータにおいてのカレントノードのマトリックス作成
> njSetNextMotionNodeEx() | モーションのカレントノードの更新
> njGetMotionNodeData() | 現在のモーションパラメータにおいてのカレントノードの姿勢情報の取得

njGetMotionLinkNodeData

COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000