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

# njCnkSimpleDrawShapeMotion

シェープモーションの描画(CHUNK-SIMPLE)

### 書式

> `void njCnkSimpleDrawShapeMotion( object, motion, shape, frame )
> const NJS_CNK_OBJECT *object
> const NJS_MOTION *motion
> const NJS_MOTION *shape
> Float frame
> `

### 引数

> object | チャンクオブジェクト構造体へのポインタ
> motion | ノードモーション用のモーション構造体へのポインタ
> shape | シェープモーション用のモーション構造体へのポインタ
> frame | フレーム番号(0〜モーションフレーム数(motion->nbFrame)未満)

### 戻り値

> なし

### 解説

> 引数 frame により指定された位置のシェープモーションをシェープデータ及び、 モーションデータにしたがって描画します。

> 本関数ではシェープモーション（頂点アニメーション）とノードモーション （ノードの位置と回転と拡大縮小のアニメーション）を合成して描画します。

> 基本的には、モーションのフレーム数とシェープのフレーム数が一致していなけれ ばなりません。つまり、motion->nbFrame == shape->nbFrame である必要が有りま す。一致していない場合の動作は保証しかねます。

> 内部的にはシェープモーションを施したモデルにノードモーションに対応 したマトリックス演算を施して描画します。 このためエンベロープ描画との共存が可能です。

> - シェープモーションを実行するために、シェープデータのキーフレーム間の補間を行います。
> - ノードモーションを実行するために、モーションデータのキーフレーム間の補完を行います。

> 例: フレーム数（motion->nbFrame）が10のモーションの場合
> - 引数 frame の取り得る範囲は0以上10未満(9.9999)となります。
> - 引数 frame を0.5とすると、0フレーム目と1フレーム目の中央のモーションを補完して描画します。
> - 引数 frame が9以上10未満(9.9999)の補完は、最後のキーフレームと最初のキーフレーム間の補完となります。

> 引数 frame の範囲と補完のされ方をまとめると次のように成ります。

> 引数 frameの範囲 | 補完のされ方
> frame < 0 | 暴走はしませんが通常は使いません。
> 0 <= frame <= motion->nbFrame - 1 | 通常の補完
> motion->nbFrame - 1 <= frame < motion->nbFrame | 最後のキーフレームと最初のキーフレームの補完
> motion->nbFrame <= frame | 暴走はしませんが通常は使いません。

> シェープ補完部では線形補完のみ行います。スプライン補完には対応していません。

> シェープ部分が対応している、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	/* Entered in NJA (NAM) file */
>     #define	MOTION	motion_sample	/* Entered in NAM file */
>     #define	SHAPE	shape_sample	/* Entered in NAS file */
>     extern NJS_CNK_OBJECT	OBJECT[];
>     extern NJS_MOTION	MOTION[];
>     extern NJS_MOTION	SHAPE[];

>     float	buf[10000];
>     float	ff = 0.0f;
>     	:
>     {
>         njInitShape( buf );
>         	:
>         njCnkSimpleDrawShapeMotion( OBJECT, MOTION, SHAPE, ff );

>         ff  += 0.2f;
>         if ( ff >= MOTION->nbFrame - 1 ) {
>             ff = 0.0f;
>         }
>     }
>     	:

### 備考

> - チャンクオブジェクト構造体用のモーションです。
> - モーションとシェープ(頂点アニメーション)がついただけで、描画に関してはモデル描画とまったく同様になります。

### 参照

> njCnkSimpleDrawMotion() | モーションの描画(CHUNK-SIMPLE)
> njCnkSimpleDrawObject() | CHUNKオブジェクトのSIMPLE描画

njCnkSimpleDrawShapeMotion

COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000