Ninja Library - モーション関数

njCnkEasyMultiDrawShapeMotion

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

書式

void njCnkEasyMultiDrawShapeMotion( 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 の範囲と補完のされ方をまとめると次のように成ります。

 引数 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 );
    	:
    njCnkEasyMultiDrawShapeMotion( OBJECT, MOTION, SHAPE, ff );
    
    ff  += 0.2f;
    if ( ff >= MOTION->nbFrame - 1 ) {
        ff = 0.0f;
    }
}
	:

備考


参照

njCnkEasyMultiDrawMotion() モーションの描画(CHUNK-EASY MULTI)
njCnkEasyMultiDrawObject() CHUNKオブジェクトのEASY MULTI描画

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