# Ninjaライブラリ

## モデル＆モーション構造体

## NJS_MATERIAL構造体

［定義］
  モデルのマテリアルデータを格納する構造体

［記述］

      typedef struct {
              NJS_COLOR       diffuse;        /* ディフューズ（拡散反射）色（0-255）*/
              NJS_COLOR       specular;       /* スペキュラ（鏡面反射）色（0-255）*/
              Float           exponent;       /* 指数（ハイライトの広がり）   */
              Uint32          attr_texId;     /* アトリビュートとテクスチャID
                                                 31-29:予約
                                                 0-28:テクスチャリストにおけるテクスチャ番号
                                              */
              Uint32          attrflags;      /* アトリビュートフラグ
                                                 31-29:αブレンディングパラメータ（SRC）
                                                 28-26:αブレンディングパラメータ（DST）
                                                 25   :光源無視フラグ（1の時無視）
                                                 24   :フラットシェーディング（オン・オフ）
                                                 23   :両面ポリゴン（オン・オフ）
                                                 22   :環境マッピング（オン・オフ）
                                                 21   :テクスチャ（有効・無効）
                                                 20   :α（有効・無効）
                                                 19   :スペキュラ無視（1の時無視）
                                                 18-17:フリップ制御
                                                 16-15:クランプ制御
                                                 14-13:0...Point Sampled
                                                       1...Bilinear Filter
                                                       2...Trilinear Filter
                                                 11- 8:Anisotropic Filter
                                                 7    :ミップマップレンジの調整16段階
                                                 6 - 0:未使用
                                             */
      } NJS_MATERIAL;

## NJS_MESHSET構造体

［定義］
  ポリゴン・データを格納する構造体

［記述］

      typedef struct {
      	Uint16		type_matId;	/* メッシュのタイプとマテリアルID
      					  15-14:メッシュタイプ
      					  13- 0:マテリアルID（0-4095）
      					*/
      	Uint16		nbMesh;		/* ポリゴン数・連続ポリゴン数	*/
      	Sint16		*meshes;	/* ポリゴンリスト		*/
      	Uint32		*attrs;		/* ポリゴンアトリビュート	*/
      	NJS_VECTOR	*normals;	/* ポリゴンの法線ベクトルリスト	*/
      	NJS_COLOR	*vertcolor;	/* ポリゴン頂点の色リスト	*/
      	NJS_COLOR	*vertuv;	/* ポリゴン頂点のUVリスト	*/
      } NJS_MESHSET;

## NJS_MODEL構造体

［定義］
  モデルデータ格納構造体

［記述］

      typedef struct {
      	NJS_POINT3	*points;	/* 頂点リスト		*/
      	NJS_VECTOR	*normals;	/* 法線リスト		*/
      	Sint32		nbPoint;	/* 頂点数		*/
      	NJS_MESHSET	*meshsets;	/* ポリゴンリスト	*/
      	NJS_MATERIAL	*mats;		/* マテリアルリスト	*/
      	Uint16		nbMeshset;	/* メッシュセット数	*/
      	Uint16		nbMat;		/* マテリアル数		*/
      	NJS_POINT3	center;		/* モデルの中心位置	*/
      	Float		r;		/* モデルの中心からの外接球半径	*/
      } NJS_MODEL;

## NJS_OBJECT構造体

［定義］
  オブジェクトデータ格納構造体

［記述］

      typedef struct obj {
      	Uint32		evalflags;	/* 評価方法の最適化フラグ
      					 0:NJD_EVAL_UNIT_POS
      					 1:NJD_EVAL_UNIT_ANG
      					 2:NJD_EVAL_UNIT_SCL
      					 3:NJD_EVAL_HIDE
      					 4:NJD_EVAL_BREAK
      					 5:NJD_EVAL_ZXY_ANG
      					 6:NJD_EVAL_SKIP
      					*/

      	NJS_MODEL	*model;		/* モデル構造体へのポインタ	*/
      	Float		pos[3];		/* 平行移動	*/
      	Angle		ang[3];		/* 回転		*/
      	Float		scl[3];		/* スケール	*/
      	struct obj	*child;		/* 子供オブジェクトへのポインタ	*/
      	struct obj	*sibling;	/* 兄弟オブジェクトへのポインタ	*/
      } NJS_OBJECT;

## NJS_MKEY_F構造体

［定義］
  キー・データ格納用構造体

［記述］

      typedef struct {
      	Uint32	keyframe;	/* キーフレーム		*/
      	Float	key[3];		/* 浮動小数点型のデータ
      				   使用データ：移動・スケール・ベクトル等
      				*/
      } NJS_MKEY_F;

## NJS_MKEY_A構造体

［定義］
  キー・データ格納用構造体

［記述］

      typedef struct {
      	Uint32	keyframe;	/* キーフレーム		*/
      	Angle	key[3];		/* アングル型のデータ
      				   使用データ：回転等
      				*/
      } NJS_MKEY_A;

## NJS_MKEY_P構造体

［定義］
  キー・データ格納用構造体

［記述］

      typedef struct
      {
      	Uint32	keyframe;	/* キーフレーム		*/
      	void	*key;		/* ポインタ型のデータ
      				   使用データ：シェープ等
      				*/
      } NJS_MKEY_P;

## NJS_MKEY_F1構造体

［定義］
  キー・データ格納用構造体

［記述］

      typedef struct {
      	Uint32	keyframe;	/* キーフレーム		*/
      	Float	key;		/* 浮動小数点型のデータ
      				   使用データ：ライト・インテンシティ等
      				*/
      } NJS_MKEY_F1;

## NJS_MKEY_F2構造体

［定義］
  キー・データ格納用構造体

［記述］

      typedef struct {
      	Uint32	keyframe;	/* キーフレーム		*/
      	Float	key[2];		/* 浮動小数点型のデータ
      				   使用データ：点光源用距離減衰データ等
      				*/
      } NJS_MKEY_F2;

## NJS_MKEY_SPOT構造体

［定義］
  キー・データ格納用構造体

［記述］

      typedef struct {
      	Uint32	keyframe;	/* キーフレーム		*/
      	Float	nrang;		/* スポットライトの減衰の始まる距離	*/
      	Float	frang;		/* スポットライトの効果がなくなる距離	*/
      	Angle	iang;		/* スポットライトが最大強度である角度	*/
      	Angle	oang;		/* スポットライトの効果がなくなる角度
      				   使用データ：スポットライト・固有データのみ
      				*/
      } NJS_MKEY_SPOT;

## NJS_MKEY_UI32構造体

［定義］
  キー・データ格納用構造体

［記述］

      typedef struct {
      	Uint32	keyframe;	/* キーフレーム		*/
      	Uint32	key;		/* unsigned long型のデータ
      				   使用データ：ライト・カラーデータ等
      				*/
      } NJS_MKEY_UI32;

## NJS_MKEY_SI32, NJS_MKEY_A1構造体

［定義］
  キー・データ格納用構造体

［記述］

      typedef struct {
      	Uint32	keyframe;	/* キーフレーム		*/
      	Sint32	key;		/* signed long型のデータ	*/
      				   使用データ：カメラ・ロールデータ等
      				*/
      } NJS_MKEY_SI32, NJS_MKEY_A1;

## NJS_MDATA1構造体

［定義］
  要素数ごとの管理構造体

［記述］

      typedef struct {
      	void	*p[1];		/* NJS_MKEY型のポインタ配列	*/
      	Uint32	nb[1];		/* キー数の配列
      				   p[i]の示すポインタとキー数
      				   nb[i]が対応
      				*/
      } NJS_MDATA1;

## NJS_MDATA2構造体

［定義］
  要素数ごとの管理構造体

［記述］

      typedef struct {
      	void	*p[2];		/* NJS_MKEY型のポインタ配列	*/
      	Uint32	nb[2];		/* キー数の配列
      				   p[i]の示すポインタとキー数
      				   nb[i]が対応
      				*/
      } NJS_MDATA2;

## NJS_MDATA3構造体

［定義］
  要素数ごとの管理構造体

［記述］

      typedef struct {
      	void	*p[3];		/* NJS_MKEY型のポインタ配列	*/
      	Uint32	nb[3];		/* キー数の配列
      				   p[i]の示すポインタとキー数
      				   nb[i]が対応
      				*/
      } NJS_MDATA3;

## NJS_MDATA4構造体

［定義］
  要素数ごとの管理構造体

［記述］

      typedef struct {
      	void	*p[4];		/* NJS_MKEY型のポインタ配列	*/
      	Uint32	nb[4];		/* キー数の配列
      				   p[i]の示すポインタとキー数
      				   nb[i]が対応
      				*/
      } NJS_MDATA4;

## NJS_MDATA5構造体

［定義］
  要素数ごとの管理構造体

［記述］

      typedef struct {
      	void	*p[5];		/* NJS_MKEY型のポインタ配列	*/
      	Uint32	nb[5];		/* キー数の配列		*/
      				   p[i]の示すポインタとキー数
      				   nb[i]が対応
      				*/
      } NJS_MDATA5;

## NJS_MOTION構造体

［定義］
  １モーションデータを管理する構造体

［記述］

      typedef struct {
      	void	*mdata;		/* NJS_MDATA型のポインタ配列
      				   通常オブジェクトツリー分の配列をもつ
      				*/
      	Uint32	nbFrame;	/* フレーム数	*/
      	Uint16	type;		/* モーションのタイプ
      				   0:NJD_MTYPE_POS_0
      				   1:NJD_MTYPE_ANG_1
      				   2:NJD_MTYPE_SCL_2
      				   3:NJD_MTYPE_VEC_3
      				   4:NJD_MTYPE_VERT_4
      				   5:NJD_MTYPE_NORM_5
      				   6:NJD_MTYPE_TARGET_3
      				   7:NJD_MTYPE_ROLL_6
      				   8:NJD_MTYPE_ANGLE_7
      				   9:NJD_MTYPE_RGB_8
      				  10:NJD_MTYPE_INTENSITY_9
      				  11:NJD_MTYPE_SPOT_10
      				  12:NJD_MTYPE_POINT_10
      				*/
      	Uint16	inp_fn;		/* 要素数および補間方法
      				   0-3:要素数
      				   6-7:補間方法（00：線形、01：スプライン)
      				*/
      } NJS_MOTION;

## NJS_ACTION構造体

［定義］
  オブジェクトとモーションのデータを統括した構造体
  （通常、ベーシック・モデルのみに適用されます）

［記述］

      typedef struct {
      	NJS_OBJECT	*object;	/* オブジェクト・ツリーの先頭ポインタ */
      	NJS_MOTION	*motion;	/* モーションリストのポインタ	*/
      } NJS_ACTION;

## NJS_MOTION_LINK構造体

［定義］
  リンクさせる２つのモーションおよびフレームを格納する構造体

［記述］

      typedef struct{
      	NJS_MOTION	*motion[2];    	/* モーションリストポインタ配列	*/
      	Float		frame[2];	/* リンク・フレーム配列
      					   motion[i]の示すモーションリストのポインタと
      					   リンクするフレームframe[i]が対応							   i = 0：リンク元
      					   i = 1：リンク先
      					*/
      } NJS_MOTION_LINK;

## NJS_ACTION_LINK構造体

［定義］
  オブジェクトとモーションリンクのデータを統括した構造体
  （通常、ベーシック・モデルのみに適用されます）

［記述］

      typedef struct{
      	NJS_OBJECT	*object;	/* オブジェクト・ツリーの先頭ポインタ */
      	NJS_MOTION_LINK	*motionlink;	/* モーションリンクポインタ	*/
      } NJS_ACTION_LINK;

## NJS_MOTION_DATA構造体

［定義］
  モーション関数で計算されたカレント・フレームのデータ格納構造体

［記述］

      typedef struct {
      	Float	*pos;		/* 移動データ配列の先頭ポインタ		*/
      	Angle	*ang;		/* 回転データ配列の先頭ポインタ		*/
      	Float	*scl;		/* スケールデータ配列の先頭ポインタ	*/
      } NJS_MOTION_DATA;