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 の固定パラメータが返されます。
回転パラメータについては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 が指定されている場合:
- カレントノードに対応した NJS_MDATA(n) 配列中のポインタが指すキーフレーム配列が参照される。
- カレントノードが更新される(0番スロットと1番スロットの両方に対してnjSetNextMotionNodeEx()が呼び出される)。
以下の説明において、ある項目のキーフレームが存在するとは、motion->type の対応する NJD_MTYPE_??? ビットが ON であり、かつ、カレントノードに対応する NJS_MDATA(n)配列中の実際のそのキー配列へのポ インタが NULL ではないことを意味します。
- cnkobj の中のpos,ang,sclメンバがそのまま引数にコピーされる。
- カレントノードは更新されない。
条件 動作 戻り値 カレントノードの 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 ); }
本関数は0番スロットと1番スロットのモーション情報構造体に対し動作します。
本関数を呼び出すとカレントモーション情報構造体は0番に設定されます。
njStartMotionLink() モーションリンクパラメータの設定 njMotionLinkTransformEx() 現在のモーションリンクパラメータにおいてのカレントノードのマトリックス作成 njSetNextMotionNodeEx() モーションのカレントノードの更新 njGetMotionNodeData() 現在のモーションパラメータにおいてのカレントノードの姿勢情報の取得