Ninja Library - モーション関数

njGetCameraMotion

カメラモーションのモーション後のデータの取得

書式

void njGetCameraMotion( camera, motion, data, frame )
const NJS_CAMERA *camera
const NJS_MOTION *motion
NJS_CMOTION_DATA *data
Float frame

引数

camera   カメラ構造体へのポインタ
motion   カメラ用のモーション構造体へのポインタ
data   補完後のカメラ情報を取得するための構造体へのポインタ
frame   フレーム番号(0〜モーションフレーム数(motion->nbFrame)未満)

戻り値

なし

解説

カメラのモーションをモーションデータにしたがって実行し、引数 data で指定された構造体に 示されている領域にモーション後のカメラ情報を返します。

通常、本関数の cmaera 引数には、NACファイル(またはNJCファイル)中の NJS_CAMERA 構造体、 motion 引数には、カメラモーション用の NAMファイル(またはNJMファイル)中の NJS_MOTION 構造体 を指定します。

引数の camera 構造体は、モーションデータ中にキーフレームデータ列が存在しない場合のデフォルト値 として使用されます。従って読み込まれるだけで書き込みは行われません。

引数の data で示される NJS_CMOTION_DATA 構造体に直接値が格納されるのではありません。 予め NJS_CMOTION_DATA 構造体のメンバにモーション後のカメラ情報を返して欲しい領域へのポインタ を格納しておくと、本関数はその領域へ補完後のカメラ情報を返します。

 データ構造体のメンバ   意味   領域の型 
 data->pos   カメラの位置を返す領域へのポインタ   Float pos[3] 
 data->vect   カメラの中心軸の方向ベクトルを返す領域へのポインタ   Float vec[3] 
 data->roll   カメラの中心軸周りの回転角度(Roll角)を返す領域へのポインタ   Angle roll 
 data->ang   画角を返す領域へのポインタ   Angle ang 

引数 frame で示される位置の位置データ、及び姿勢データを、モーションデータのキーフレーム間を補間して 作成します。

例: フレーム数(motion->nbFrame)が10のモーションの場合

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

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


用例

#include <Ninja.h>

//  Equivalent source code of njCameraMotion
void njCameraMotion( const NJS_CAMERA *camera, const NJS_MOTION *motion, Float frame )
{
    Float             pos[3];
    Float             vec[3];
    Angle             roll;
    Angle             ang;
    NJS_CMOTION_DATA  data;
    static NJS_VECTOR up	= { 0.0f, 1.0f, 0.0f };
    
    data.pos	= pos;
    data.vect	= vec;
    data.roll	= &roll;
    data.ang	= &ang;
    
    njGetCameraMotion( camera, motion, &data, frame );
    
    njSetPerspective( ang );
    
    vec[0]	+= pos[0];
    vec[1]	+= pos[1];
    vec[2]	+= pos[2];
    njCameraExLookAt( (NJS_POINT3 *)pos, (NJS_POINT3 *)vec, &up );
    njRotateZCameraEx( roll );
}

備考


本関数は0番スロットのモーション情報構造体を使用します。
本関数を呼び出すとカレントモーション情報構造体は0番スロットに設定されます。

参照

njCameraMotion() カメラモーションの実行
njCameraAction() カメラモーションの実行(アクション構造体対応)
njGetMotionNodeData() 現在のモーションパラメータにおいてのカレントノードの姿勢情報の取得
njGetMotionLinkNodeData() 現在のモーションリンクパラメータにおいてのカレントノードの姿勢情報の取得
njSetPerspective() 水平方向の画角の設定
njCameraExLookAt() カメラの位置と姿勢を設定
njRotateZCameraEx() カメラ座標系を現在のカメラ座標系のZ軸の周りに回転

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