##### 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関数を呼ぶ必要があります(用例参照)。

### 用例

      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,1999