＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

　中間出力モデル「KM3」フォーマットについて

　Ver.1.00	1999.7.26	K.Takabe
　$Id: km3_fmt.txt,v 1.1.1.3 2002/11/19 11:41:42 Yoshizawa1 Exp $

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝


＜.KMDからの変更点＞

・座標関連が全てfloat型になった。
・頂点＆法線のインデックスを１６ビットに拡張したため、最大頂点数は６万まで。
・頂点及び法線のvwにはシングルウェイトエンベロープ用の重みが入っている。
・テクスチャＩＤではなく、テクスチャ名の文字列とそれを差すオフセットの配列
　で指定するように変更。



＜オブジェクト中で使用する属性フラグ（今のところ半透明以外は使用していない）＞

	/*
		パーツ単位での属性フラグ
	*/
enum {
	DG_TYPE_FT4 = 0x0000,		/* フラット（禁止）		*/
	DG_TYPE_GT4 = 0x0001,		/* グーロー（必須）		*/
	DG_TYPE_TRANS = 0x0002,		/* 半透明化			*/
	DG_TYPE_NOSHADE = 0x0004,	/* 光源なし			*/
	DG_TYPE_RAISED = 0x0100,	/* 優先アップ			*/
	DG_TYPE_SUNKEN = 0x0200,	/* 優先ダウン			*/
	DG_TYPE_TWOSIDE = 0x0400,	/* 両面あり			*/
	DG_TYPE_TWOCLIP = 0x0800,	/* （予約）			*/
} ;



＜モデルデータ構造＞

モデルファイルは以下のような順番でデータが格納されている。

 [ファイルヘッダ]
 [オブジェクト情報データ]×総オブジェクト数
 [頂点データ]
 [法線データ]
 [ＵＶデータ]
 [テクスチャ名テーブル]
  .
  .
  .

＜各データセクションのフォーマットについて＞

[ファイルヘッダフォーマット]
	unsigned int	n_models ;			/* オブジェクト数 */
	unsigned int	n_x_models ;		/* オブジェクト数（拡張ユニット込） */
	float			lx, ly, lz ;		/* 全体バウンディングボックス（最小値） */
	float			ux, uy, uz ;		/* 全体バウンディングボックス（最大値） */


[オブジェクト情報データフォーマット]
	unsigned int	type ;			/* 属性フラグ */
	unsigned int	n_prims ;		/* ポリゴン数 */
	float			lx, ly, lz ;	/* バウンディングボックス（最小値） */
	float			ux, uy, uz ;	/* バウンディングボックス（最大値） */
	float			tx, ty, tz ;	/* ユニットの相対座標 */
	int				parent ;		/* 親ユニット番号 */
	int				extend ;		/* 拡張ユニット番号 */
	/*
		頂点データ
	*/
	unsigned int	n_verts ;		/* 頂点数 */
	unsigned int	verts ;			/* 頂点座標配列へのオフセット（n_verts） */
	unsigned int	vid ;			/* 頂点ＩＤ配列へのオフセット（n_prims * 4） */
	/*
		法線データ
	*/
	unsigned int	n_norms ;		/* 法線数 */
	unsigned int	norms ;			/* 法線方向配列へのオフセット（n_norms） */
	unsigned int	nid ;			/* 法線ＩＤ配列へのオフセット（n_prims * 4） */
	/*
		テクスチャデータ
	*/
	unsigned int	uvs ;			/* ＵＶ座標配列へのオフセット（n_prims * 4） */
	unsigned int	tex_name ;		/* テクスチャ名オフセット配列へのオフセット（n_prims） */
	/*
		ＲＧＢデータ（通常は NULL）
	*/
	unsinged int	rgbs ;			/* ＲＧＢ配列へのオフセット（n_prims * 4） */


[頂点座標配列フォーマット]
	float			vx ;			/* Ｘ座標 */
	float			vy ;			/* Ｙ座標 */
	float			vz ;			/* Ｚ座標 */
	float			vw ;			/* シングルウェイトエンベロープ用重み(0.0～1.0まで) */
									/* 通常は1.0、エンベロープで親モデルに100%付く時0.0になる */

[頂点ＩＤ配列フォーマット]
	unsigned short	index_num0 ;	/* 頂点のインデックスナンバー（最大65535まで） */	
	unsigned short	index_num1 ;	/* 時計回りの順番で格納される */	
	unsigned short	index_num2 ;	/* ３角形ポリゴンの時には３番目と４番目は同じ値になる */	
	unsigned short	index_num3 ;	/*  */	


[法線座標配列フォーマット]
	float			vx ;			/* Ｘ座標 */
	float			vy ;			/* Ｙ座標 */
	float			vz ;			/* Ｚ座標 */
	float			vw ;			/* シングルウェイトエンベロープ用重み(0.0～1.0まで) */
									/* 通常は1.0、エンベロープで親モデルに100%付く時0.0になる */
									/* （無理していれる必要もないかも・・・） */


[法線ＩＤ配列フォーマット]
	unsigned short	index_num0 ;	/* 頂点のインデックスナンバー（最大65535まで） */	
	unsigned short	index_num1 ;	/* 時計回りの順番で格納される */	
	unsigned short	index_num2 ;	/* ３角形ポリゴンの時には３番目と４番目は同じ値になる */	
	unsigned short	index_num3 ;	/*  */	


[ＵＶ座標配列フォーマット]
	float			u ;				/* テクスチャ座標Ｕ */
	float			v ;				/* テクスチャ座標Ｖ */


[テクスチャ名オフセット配列フォーマット]
	unsigned int	file_name ;		/* テクスチャ名へのオフセット値 */


[テクスチャ名フォーマット]
	char			filename[] ;	/* テクスチャ名のASCIIZ文字列（\0で終わる文字列） */

