object | オブジェクト構造体へのポインタ |
motionlink | モーションリンク構造体へのポインタ |
shapelink | モーションリンク構造体へのポインタ(頂点アニメーション) |
frameフレーム番号(0から1まで) |
モーションリンク構造体中のフレームはリンク元とリンク先のモーション・フレームで、 引数のフレームが0の時にリンク元のフレーム、1の時にリンク先のフレームの モーションにあり、その他(0<ff<1)はリンク先とリンク元のフレームを補完します。 シェープ(頂点アニメーション)についても同様です。
頂点アニメーションの対応している頂点型は下記のとおりです。
頂点 | NJD_CV,NJD_CV_D8 |
頂点・法線 | NJD_CV_VN,NJD_CV_VN_D8 |
スプライン補間はモーション時の頂点のみでモーション間はリニアとなります。 ただし、ベーシックモデルではスプライン補間されます。
#include <Shinobi.h> #define OBJECT object_sample #define MOTION1 motion_sample1 /* NAMファイル内に記載 */ #define MOTION2 motion_sample2 /* NAMファイル内に記載 */ #define SHAPE1 shape_sample1 /* NASファイル内に記載 */ #define SHAPE2 shape_sample2 /* NASファイル内に記載 */ #define STEPS 60 : #define VERTEX_NUM 600 /* maximum model's verteices */ #define TYPE_VN 6 /* vertex(3) + normal(3) */ #define HEADER_NUM 2 #define NUM (VERTEX_NUM * TYPE_VN + HEADER_NUM) 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 sbuf[NUM * 3]; : njInitShape(sbuf); : motionlink.motion[0] = MOTION1;/*リンク元*/ motionlink.motion[1] = MOTION2;/*リンク先*/ shapelink.motion[0] = SHAPE1;/*リンク元*/ shapelink.motion[1] = SHAPE2;/*リンク先*/ /*MOTION1の最後のフレームからMOTION2の1.5フレームを補間*/ motionlink.frame[0] = shapelink.frame[0] = MOTION1->nbFrame-1; motionlink.frame[1] = shapelink.frame[1] = 1.5; : njCnkSimpleDrawShapeMotionLink( OBJECT, &motionlink, &shapelink, ff/STEPS ); /* フレームは0−1を指定 */ ff+=0.2f; if( ff >= STEPS - 1 ) ff=0.f; :