##### Ninjaライブラリ - モーション関数

# njCnkGetShape

ノード・モーション情報関数(移動)

### 書式

  Int njCnkGetShape( *cnkobj, *buffer, spline_flag )
  NJS_CNK_OBJECT *cnkobj
  Float *buffer
  Int spline_flag

### 引数

  *cnkobj | オブジェクト
  *buffer | 頂点リストの格納されるバッファ(ただし、モデルの頂点リストの最大サイズ)
  spline_flag | スプライン属性フラグ(0：リニア、1：スプライン)

### 戻値

  1 | 指定されたノードの頂点リスト情報がバッファに格納された
  0 | 指定されたノードに頂点リスト情報が無いので未格納

### 解説

  ノード毎のチャンクモデルの頂点リスト情報を与えられた引数に格納します。 バッファは、引数がNULLの時にはnjInitShape()関数で指定されたバッファを使用します。 使用前には、njCnkSetCurrentShape()関数を呼ぶ必要があります(用例参照)。

### 用例

      #include <Shinobi.h>
      #define OBJECT  object_sample
      #define MOTION  motion_sample
      #define MDATA3  ((NJS_MDATA3 *) MOTION->mdata)
      #define LINEAR  0
      #define SPLINE  1
      extern NJS_MOTION MOTION[];
      extern NJS_OBJECT OBJECT[];
      Float ff = 0.f;
      Int spline_flg = SPLINE;
      /*このmdataはオブジェクト情報取得のため*/
      NJS_MDATA3 *mdata;
      	：
      Sint32 njUserMain(void)
      {
       	：
       mdata = MDATA3;
       njSetCurrentMotion(MOTION, ff );
       njCnkSetCurrentShape(shape, NJD_CV_VN, ff );
       PushPopMotion( OBJECT );
       ff+=0.2f;
       if( ff >= (MOTION->nbFrame-1) ) ff=0.f;
       	：
      }
      void
      PushPopMotion( NJS_CNK_OBJECT *cnkobj )
      {
          Float	pos[3], scl[3];
          Angle	ang[3];
          Sint32	*vlist;

          do {
              njPushMatrix( NULL );

              if (mdata->p[0] != NULL) {
          	    njGetMotionTranslate( pos, spline_flg );
              } else {
          	    pos[0] = cnkobj->pos[0];
          	    pos[1] = cnkobj->pos[1];
          	    pos[2] = cnkobj->pos[2];
              }

              if (mdata->p[1] != NULL) {
          	    njGetMotionRotate( ang, spline_flg );
              } else {
          	    ang[0] = cnkobj->ang[0];
          	    ang[1] = cnkobj->ang[1];
          	    ang[2] = cnkobj->ang[2];
              }

              if (mdata->p[2] != NULL) {
          	    njGetMotionScale( scl, spline_flg );
              } else {
          	    scl[0] = cnkobj->scl[0];
          	    scl[1] = cnkobj->scl[1];
          	    scl[2] = cnkobj->scl[2];
              }

              njTranslate( NULL, pos[0], pos[1], pos[2] );
              njRotateZXY( NULL, ang[0], ang[1], ang[2] );
              njScale( NULL, scl[0], scl[1], scl[2] );
              njSetNextMotionNode();
              mdata++;
              if ( cnkobj->model != NULL )
      	    vlist = cnkobj->model->vlist;

              if ( !(cnkobj->evalflags & NJD_EVAL_SHAPE_SKIP)) {
          	    if (njCnkGetShape(cnkobj, NULL, spline_flg))
      		cnkobj->model->vlist = (Sint32*)sbuf;
              }

              if( (cnkobj->model != NULL)
      		&& (!(cnkobj->evalflags & NJD_EVAL_HIDE)) ) {
          	    njCnkEasyDrawModel( cnkobj->model );
          	    cnkobj->model->vlist = vlist;
              }

              if( cnkobj->child != NULL )
          	    PushPopMotion( (NJS_CNK_OBJECT*)cnkobj->child );

              njPopMatrix( 1 );

              cnkobj = cnkobj->sibling;
          } while( cnkobj != NULL );
      }
      	：

### 備考

  この関数は、チャンクモデルの親子階層をたどる(プッシュ・ポップ)中で 使用するための関数です。

### 参照

  njCnkSetCurrentShape()

njCnkGetShape

COPYRIGHT © SEGA ENTERPRISES, LTD., 1998