# Ninjaライブラリ

## マトリクス構造体

## NJS_TEX構造体

［定義］
  テクスチャUV座標構造体

［記述］

      typedef struct {
              Sint16  u;      /* テクスチャU座標      */
              Sint16  v;      /* テクスチャV座標      */
      } NJS_TEX;

## NJS_BGRA構造体

［定義］
  ARGB成分を個別にバイト設定する構造体

［記述］

      typedef struct {
              Uint8   b;      /* B成分 0 - 255        */
              Uint8   g;      /* G成分 0 - 255        */
              Uint8   r;      /* R成分 0 - 255        */
              Uint8   a;      /* A成分 0 - 255        */
      } NJS_BGRA;

## NJS_COLOR共用体

［定義］
  カラー、テクスチャUVを定義する共用体

［記述］

      typedef union {
              Uint32          color;  /* パックカラー値               */
              NJS_TEX         tex;    /* テクスチャUV値               */
              NJS_BGRA        argb;   /* ARGB成分別設定カラー値       */
      } NJS_COLOR;

## NJS_ARGB構造体

［定義］
  ARGB成分を個別に浮動小数点で設定する構造体

［記述］

      typedef struct {
              Float   a;      /* A成分 0.f - 1.f */
              Float   r;      /* R成分 0.f - 1.f */
              Float   g;      /* G成分 0.f - 1.f */
              Float   b;      /* B成分 0.f - 1.f */
      } NJS_ARGB;

## NJS_POINT2I構造体

［定義］
  符号付き16ビットでX,Y座標値を設定する構造体

［記述］

      typedef struct {
      	Sint16	x;	/* X座標（横）*/
      	Sint16	y;	/* Y座標（縦）*/
      } NJS_POINT2I;

## NJS_POINT2構造体

［定義］
  浮動小数点でX,Y座標値を設定する構造体

［記述］

      typedef struct {
      	Float	x;	/* X座標（横）*/
      	Float	y;	/* Y座標（縦）*/
      } NJS_POINT2;

## NJS_POINT3, NJS_VECTOR構造体

［定義］
  浮動小数点でX,Y,Z座標値を設定する構造体

［記述］

      typedef struct {
      	Float   x;	/* X座標 */
      	Float   y;	/* Y座標 */
      	Float   z;	/* Z座標 */
      } NJS_POINT3, NJS_VECTOR;

## NJS_POINT2COL構造体

［定義］
  2Dドロー系の頂点データを定義する構造体

［記述］

      typedef struct {
      	NJS_POINT2	*p;	/* 頂点データのポインタ 	*/
      	NJS_COLOR	*col;	/* 頂点カラーデータのポインタ	*/
      	NJS_COLOR	*tex;	/* テクスチャUVデータのポインタ	*/
      	Uint32		num;	/* 頂点数 			*/
      } NJS_POINT2COL;

## NJS_POINT3COL構造体

［定義］
  3Dドロー系の頂点データを定義する構造体

［記述］

      typedef struct {
      	NJS_POINT3	*p;	/* 頂点データのポインタ 	*/
      	NJS_COLOR	*col;	/* 頂点カラーデータのポインタ	*/
      	NJS_COLOR	*tex;	/* テクスチャUVデータのポインタ */
      	Uint32		num;	/* 頂点数 			*/
      } NJS_POINT3COL;

## NJS_LINE構造体

［定義］
  直線のコリジョンを設定する構造体

［記述］

      typedef struct {
      	Float	px,py,pz;	/* 頂点座標 */
      	Float	vx,vy,vz;	/* ベクトル */
      } NJS_LINE;

## NJS_PLANE構造体

［定義］
  平面のコリジョンを設定する構造体

［記述］

      typedef struct {
      	Float	px,py,pz;	/* 頂点座標 */
      	Float	vx,vy,vz;	/* ベクトル */
      } NJS_PLANE;

## NJS_PVECTOR構造体

［定義］
  頂点とベクトルを設定する構造体

［記述］

      typedef struct {
      	Float	px,py,pz;	/* 頂点座標 */
      	Float	vx,vy,vz;	/* ベクトル */
      } NJS_PVECTOR;

## NJS_SPHERE構造体

［定義］
  球型のコリジョンを定義する構造体

［記述］

      typedef struct{
      	NJS_POINT3	c;	/* 中心座標 	*/
      	Float		r;	/* 半径		*/
      } NJS_SPHERE;

## NJS_CAPSULE構造体

［定義］
  カプセル型のコリジョンを定義する構造体

［記述］

      typedef struct{
      	NJS_POINT3	c1;	/* 中心座標1 	*/
      	NJS_POINT3	c2;	/* 中心座標2 	*/
      	Float		r;	/* 半径 	*/
      } NJS_CAPSULE;

## NJS_BOX構造体

［定義］
  立方体型のコリジョンを定義する構造体

［記述］

      typedef struct{
      	NJS_POINT3	v[8];	/* 頂点座標 	*/
      } NJS_BOX;

## NJS_VIEW構造体

［定義］
  ビューを設定する構造体

［記述］

      typedef struct {
      	NJS_MATRIX	m;		/* ビューマトリックス 	*/
      	Float   	px,py,pz;	/* 視点の位置座標 初期値(0.f,0.f,0.f) */
      	Float   	vx,vy,vz;	/* 視線の向きベクトル 初期値(0.f,0.f,-1.f) */
      	Angle   	roll;		/* 視線の傾き 初期値 0 	*/
      	Float   	apx,apy,apz;	/* Viwe関数のAbsolute系の視点の位置座標 初期値(0.f,0.f,0.f) */
      	Float   	avx,avy,avz;	/* Viwe関数のAbsolute系の視線の向きベクトル初期値(0.f,0.f,-1.f) */
      	Angle   	aroll;		/* Viwe関数のAbsolute系の視線の傾き 初期値 0 */
      } NJS_VIEW;

## NJS_SCREEN構造体

［定義］
  3Dのスクリーンを定義する構造体

［記述］

      typedef struct {
      	Float   dist;		/* スクリーンの原点からの距離 	*/
      	Float   w,h;		/* スクリーン幅、高さ 		*/
      	Float   cx,cy;		/* スクリーン中心座標 		*/
      } NJS_SCREEN;

## NJS_MATRIX型

［定義］
  マトリクスの型を定義します。

［記述］

      typedef Float   NJS_MATRIX[16];