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

# njCnkEasyMultiDrawShapeMotionLink

シェープモーションリンクの描画(CHUNK-EASY MULTI)

### 書式

> `void njCnkEasyMultiDrawShapeMotionLink( object, motionlink, shapelink, rate )
> const NJS_CNK_OBJECT *object
> const NJS_MOTION_LINK *motionlink
> const NJS_MOTION_LINK *shapelink
> Float rate
> `

### 引数

> object | オブジェクト構造体へのポインタ
> motionlink | ノードモーション用のモーションリンク構造体へのポインタ
> shapelink | シェープモーション用のモーションリンク構造体へのポインタ
> rate | 補完レイト(0〜1)

### 戻り値

> なし

### 解説

> 指定された２つのシェープモーションを結合したモーションを描画します。

> 本関数は、２つのノードモーションのリンクと、２つのシェープモーションのリンクをそれぞれ 独立して行い、通常のシェープモーション描画関数と同様に、シェープモーションを施したモデル にノードモーションに対応したマトリックス演算を施して描画します。

> このためエンベロープ描画との共存が可能です。

> 本関数は、引数として、ノードモーション用のモーションリンク構造体 motionlink と、 シェープモーション用のモーションリンク構造体 shapelink の二つをとります。

> 引数 motionlink には、リンク元および、リンク先に対応した２つのノードモーション構造体 および、それぞれに対応した２つのフレーム番号を指定します。

> 引数 shapelink には、リンク元および、リンク先に対応した２つのシェープモーション構造体 および、それぞれに対応したフレーム番号を指定します。

> 一方、引数の rate にはリンク元とリンク先のシェープモーション間の内分比を指定します。

> 引数の rateが 0 のときはリンク元のモーションに、rate が 1のときはリンク先の モーションに一致します。rate がその間(0 < rate < 1)にあるときはリンク先のモーションと リンク元のモーションを補完します。

> 引数の意味をまとめると以下の表のようになります。

> 変数名 | 役割
> motionlink->motion[0] | リンク元のノードモーション
> motionlink->motion[1] | リンク先のノードモーション
> motionlink->frame[0] | リンク元のノードモーションの補完位置
> motionlink->frame[1] | リンク先のノードモーションの補完位置
> shapelink->motion[0] | リンク元のシェープモーション
> shapelink->motion[1] | リンク先のシェープモーション
> shapelink->frame[0] | リンク元のシェープモーションの補完位置
> shapelink->frame[1] | リンク先のシェープモーションの補完位置
> rate | リンク元とリンク先との内分比（0:リンク元〜1:リンク先）

> 通常、リンク元のノードモーションとシェープモーションの補完位置、及び、 リンク先のノードモーションとシェープモーションの補完位置、がそれぞれ等しく なければなりません。

> つまり、

> - motionlink->frame[0] = shapelink->frame[0]
> - motionlink->frame[1] = shapelink->frame[1]

> とする必要があります。

> この関係を満たさない場合も補完自体は可能ですが、その場合の図形的効果は予想が難し くなるでしょう。

> ノードモーションのリンクの仕方については、モーションリンク関数とまったく同じになりますので、 詳しくはモーションリンク関数（たとえば、njCnkEasyMultiDrawMotionLink）を参照してください。

> シェープモーションの補完については、リンク元の補完、リンク先の補完、それらの結合のいずれに ついても線形補完となり、スプライン補完を指定するビットなどは無視されます。

> シェープリンクの補完部分は、シェープバッファ上にいったん vlist を作成しますが、この際、 リンク元の補完、リンク先の補完をそれぞれ全頂点にわたって行ってバッファ上に貯めてからから あらためて結合する事は行っていません。実際には、それら２つの補完とそれらの結合を１頂点単位で 同時に行ってからシェープバッファに格納します。このことにより、メモリアクセスが減り比較的 高速にシェープリンクが行えます。また、シェープバッファの消費量も通常のシェープモーションと 変わりなく、本関数で使用されるシェープバッファの容量は、オブジェクトツリーのノード中の最大の vlist のサイズに等しくなります。

> シェープ及びシェープリンク部分が対応している、VLIST の頂点型は下記のとおりです。
> NJD_CV
> NJD_CV_D8
> NJD_CV_UF
> NJD_CV_VN
> NJD_CV_VN_D8
> NJD_CV_VN_UF
> NJD_CV_VN_NF

### 用例

>     #include <Ninja.h>
>     #define	OBJECT    object_sample
>     #define	MOTION1   motion_sample1 /* Entered in NAM file */
>     #define	MOTION2   motion_sample2 /* Entered in NAM file */
>     #define	SHAPE1    shape_sample1  /* Entered in NAS file */
>     #define	SHAPE2    shape_sample2  /* Entered in NAS file */
>     extern NJS_MOTION    MOTION1[];
>     extern NJS_MOTION    MOTION2[];
>     extern NJS_MOTION    SHAPE1[];
>     extern NJS_MOTION    SHAPE2[];
>     extern NJS_CNK_OBJECT   OBJECT[];
>     NJS_MOTION_LINK         motionlink;
>     NJS_MOTION_LINK         shapelink;
>     Float                   rate = 0.0f;
>     	:

>     {
>         motionlink.motion[0]  = MOTION1;  /* Link source */
>         motionlink.motion[1]  = MOTION2;  /* Link target* /
>         motionlink.frame[0]   = 4.3f;
>         motionlink.frame[1]   = 1.5f;

>         shapelink.motion[0]   = SHAPE1;  /* Link source */
>         shapelink.motion[1]   = SHAPE2;  /* Link target* /
>         shapelink.frame[0]    = 4.3f;
>         shapelink.frame[1]    = 1.5f;
>                           :
>         /* rate specifies 0 to 1 */

>         njCnkEasyMultiDrawShapeMotionLink( OBJECT, &motionlink, &shapelink, rate );

>         rate   += 0.01f;
>         if ( rate > 1.0f ) {
>             rate = 0.0f;
>         }
>     }

### 備考

> 本関数は、他のシャープモーションリンク描画関数と描画関数以外は完全に共通です。

### 参照

> njCnkEasyMultiDrawObject() | CHUNKオブジェクトのEASY MULTI描画
> njCnkEasyMultiDrawMotion() | モーションの描画(CHUNK-EASY MULTI)
> njCnkEasyMultiDrawShapeMotion() | シェープモーションの描画(CHUNK-EASY MULTI)
> njCnkEasyMultiDrawMotionLink() | モーションリンクの描画(CHUNK-EASY MULTI)

njCnkEasyMultiDrawShapeMotionLink

COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000