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

> 引数 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 );
>     }

### 備考

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

### 参照

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

njGetCameraMotion

COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000