www.pudn.com > coolMEMORY.rar > AS_MD2.h


//----------------------------------------------------------------------------- 
// File: AS_MD2.h 
//----------------------------------------------------------------------------- 
 
#ifndef __AS_MD2_H__ 
#define __AS_MD2_H__ 
 
 
// Definitions: *************************************************************** 
#define MD2_MAX_TRIANGLES		4096 
#define MD2_MAX_VERTICES		2048 
#define MD2_MAX_TEXCOORDS		2048 
#define MD2_MAX_FRAMES			512 
#define MD2_MAX_SKINS			32 
#define MD2_MAX_FRAMESIZE		(MD2_MAX_VERTICES*4+128) 
typedef char AS_MD2_SKIN[64]; 
/////////////////////////////////////////////////////////////////////////////// 
 
// Structures: **************************************************************** 
typedef struct vertlist 
{ 
	int i; 
	FLOAT2 texcoord; 
} vertlist; 
 
typedef struct  
{  
   int magic;  
   int version;  
   int skinWidth;  
   int skinHeight;  
   int frameSize;  
   int numSkins;  
   int numVertices;  
   int numTexCoords;  
   int numTriangles;  
   int numGlCommands;  
   int numFrames;  
   int offsetSkins;  
   int offsetTexCoords;  
   int offsetTriangles;  
   int offsetFrames;  
   int offsetGlCommands;  
   int offsetEnd;  
} AS_MD2_HEADER; 
 
typedef struct 
{ 
   byte vertex[3]; 
   byte lightNormalIndex; 
} AS_MD2_ALIAS_TRIANGLE_VERTEX; 
 
typedef struct 
{ 
   float vertex[3]; 
   float normal[3]; 
} AS_MD2_TRIANGLE_VERTEX; 
 
typedef struct 
{ 
   short vertexIndices[3]; 
   short textureIndices[3]; 
} AS_MD2_TRIANGLE; 
 
typedef struct 
{ 
   short s, t; 
} AS_MD2_TEXTURE_COORDINATE; 
 
typedef struct 
{ 
   float scale[3]; 
   float translate[3]; 
   char name[16]; 
   AS_MD2_ALIAS_TRIANGLE_VERTEX alias_vertices[1]; 
} AS_MD2_ALIAS_FRAME; 
 
typedef struct 
{ 
   char name[16]; 
   AS_MD2_TRIANGLE_VERTEX *vertices; 
   FLOAT3 *vertex; // For faster rendering 
   FLOAT3 *normal; // For faster rendering 
} AS_MD2_FRAME; 
 
typedef struct 
{ 
   float s, t; 
   int vertexIndex; 
} AS_MD2_GLCOMMAND_VERTEX; 
 
typedef struct animation_s 
{ 
	char	nameAnimation[16]; 
	int		firstFrame; 
	int		lastFrame; 
} AS_MD2_ANIMATION; 
 
typedef struct md2_anim_s 
{ 
	int			count_anim; 
	AS_MD2_ANIMATION anim[MD2_MAX_FRAMES]; 
} AS_MD2_ANI; 
 
typedef struct 
{ 
	AS_MD2_HEADER			header; 
	AS_MD2_SKIN				*skins; 
	AS_MD2_TEXTURE_COORDINATE	*texCoords; 
	FLOAT2 *texCoord; // For faster rendering 
	AS_MD2_TRIANGLE			*triangles; 
	AS_MD2_FRAME			*frames; 
	int						*glCommandBuffer; 
	AS_MD2_ANI Ani; 
	float fBoundingBox[2][3], 
		  fBoundigBoxSize; 
 
	// Precomputed frame data for faster rendering: 
	FLOAT3 *prevertex; 
	FLOAT3 *prenormal; 
} AS_MD2_MODEL; 
/////////////////////////////////////////////////////////////////////////////// 
 
// Variables: ***************************************************************** 
/////////////////////////////////////////////////////////////////////////////// 
 
// Functions: ***************************************************************** 
extern void ASDrawMd2Frame(AS_MD2_MODEL *, int); 
extern void ASDrawMd2FrameInt(AS_MD2_MODEL *, int, int, float); 
extern void ASPrecomputeMd2FrameInt(AS_MD2_MODEL *, int, int, float); 
extern void ASDrawPrecomputedMd2Frame(AS_MD2_MODEL *); 
extern void ASFreeMd2Model(AS_MD2_MODEL *); 
extern AS_MD2_ANI ASMakeMd2Ani(AS_MD2_MODEL *); 
extern AS_MD2_MODEL *ASLoadMd2Model(char *); 
extern void AS_Md2_GetBoundingBox(AS_MD2_MODEL *, float *); 
/////////////////////////////////////////////////////////////////////////////// 
 
 
#endif // __AS_MD2__