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 の取り得る範囲は0以上10未満(9.9999)となります。
- 引数 frame を0.5とすると、0フレーム目と1フレーム目の中央のモーションを補完して描画します。
- 引数 frame が9以上10未満(9.9999)の補完は、最後のキーフレームと最初のキーフレーム間の補完となります。
引数 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 = ∠ 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軸の周りに回転