/*
 *
 *
 *
 */


#if !defined(__kmtrfrm_h)
#define __kmtrfrm_h

typedef float kmg2DVector[2];
typedef float kmgVector[4];
typedef float kmgColor[4];

typedef struct _tagKMGMATRIX
{
	/* for Vertex Data */
	float		_11, _21, _31, _41;
	float		_12, _22, _32, _42;
	float		_13, _23, _33, _43;
	float		_14, _24, _34, _44;

	/* for Light Data */
	float		L11, L21, L31, L41;
	float		L12, L22, L32, L42;
	float		L13, L23, L33, L43;
	float		L14, L24, L34, L44;
} KMGMATRIX, *LPKMGMATRIX;

#define KMG_COLOR_A 0
#define KMG_COLOR_R 1
#define KMG_COLOR_G 2
#define KMG_COLOR_B 3

#define KMG_X 0
#define KMG_Y 1
#define KMG_Z 2

typedef struct _tagKMGVERTEX
{
	KMDWORD	ParamWord;

	float	fX;					/* 座標 */
	float	fY;
	float	fZ;

	float	NormX;				/* 法線ベクトル */
	float	NormY;
	float	NormZ;
	float	MaterialColor[4];	/* Material Color */

	float	OffsetColor[4];		/* Offset Color */
	float	fU;					/* Texture Vector */
	float	fV;

} KMGVERTEX, *LPKMGVERTEX;

typedef struct _tagKMGLIGHT
{
	KMDWORD	Mode;						/* 光源の種類、特性など */

	kmgColor AmbientColor;				/* 環境光 */

	/* Parallel Light Parameter */
	kmgVector ParallelLightDir;			/* 平行光源の方向 */
	kmgColor  ParallelLightColor;		/* 平行光源の色	  */
	float	  ParallelLightIntensity;	/* 平行光源の強さ */

	/* Point Light Parameter */
	kmgVector PointLightPosition;		/* 点光源の位置 */
	kmgColor  PointLightColor;			/* 点光源の色	*/
	float	  PointLightIntensity;		/* 点光源の強さ */

	/* Cone Light Parameter(Not been implimented yet!) */
	kmgVector ConeLightPosition;		/* コーンライトの位置	  */
	kmgColor  ConeLightColor;			/* コーンライトの色		  */
	kmgVector ConeLightDir;				/* コーンライトの中心方向 */
	float	  ConeLightAngle;			/* コーンライトの広がり	  */
	float	  ConeLightIntensity;		/* コーンライトの強さ	  */

} KMGLIGHT, *LPKMGLIGHT;

#define PI	3.1415926535f

#define X_AXIS 0
#define Y_AXIS 1
#define Z_AXIS 2

#define	KMG_LIGHT_PARALLEL		0x00001
#define	KMG_LIGHT_POINT			0x00002
#define	KMG_LIGHT_CONE			0x00004
#define	KMG_LIGHT_LINEAR		0x00008		/* 点,コーンライトの減衰率を直線にする */
											/* ※ 通常は 距離の二乗分の１		   */

/* Function Prototypes */

void kmgSetIdentity(void );
void kmgScale(kmgVector sca_vec);
void kmgTranslate(kmgVector tran_vec);
void kmgRotate(float angle, int axis);
void kmgSetScreen(float orgx, float orgy, float sdx, float sdy, float scling);
void kmgDraw(LPKMGLIGHT pkmgLight,int iNLight, PKMVERTEXBUFFDESC pVertexBufferDesc, KMGVERTEX *Vertices, int numVertex);

#endif /* __kmtrfrm_h */
