/* gl_md3.h * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ extern char loadname[32]; extern vec3_t lightcolor; #define MD3_XYZ_SCALE (1.0/64) #define MD3_MAX_TRIANGLES 3 #define MD3_IDP3 4 #define MD3_3DS 16 typedef struct { byte v[3]; // scaled byte to fit in frame mins/maxs byte lightnormalindex; } md3trivertx_t; //**** md3 disk format ****// typedef struct { short vec[MD3_MAX_TRIANGLES]; // The vertex for this face (scale down by 64.0f) short normal; // This stores some crazy normal values (not sure...) } md3vert_t; typedef struct { char name[MAX_QPATH]; int index; // This stores the indices into the vertex and texture coordinate arrays } md3shader_t; typedef struct { float s; float t; } md3st_t; typedef struct { int tri[MD3_MAX_TRIANGLES]; } md3tri_t; typedef struct { char id[MD3_IDP3]; char name[MAX_QPATH]; int flags; //not used int num_surf_frames; int num_surf_shaders; int num_surf_verts; int num_surf_tris; int tris_offs; int shader_offs; int tc_offs; int vert_offs; int end_offs; } md3surface_t; typedef struct { char name[MAX_QPATH]; vec3_t pos; vec3_t rot[MD3_MAX_TRIANGLES]; } md3tag_t; typedef struct { vec3_t mins; vec3_t maxs; vec3_t pos; float radius; char name[MD3_3DS]; md3trivertx_t verts[1]; //variable sized } md3frame_t; typedef struct { char id[MD3_IDP3]; char filename[MAX_QPATH]; int version; int flags; //not used int num_frames; int num_tags; int num_surfaces; int num_skins; //not used, older format thing? int frame_offs; //offset to frame int tag_offs; //offset to tags int surface_offs; //offset to surfaces } md3header_t; //**** md3 memory format ****// //different size typedef struct { vec3_t vec; // The vertex for this face (scale down by 64.0f) vec3_t normal; // This stores some crazy normal values (not sure...) } md3vert_mem_t; //same typedef struct { float s; float t; } md3st_mem_t; //same typedef struct { int tri[MD3_MAX_TRIANGLES]; } md3tri_mem_t; //extra typedef struct { char name[MAX_QPATH]; int index; //not used int texnum; } md3shader_mem_t; //diffrent typedef struct md3surface_mem_s { char id[MD3_IDP3]; //should be IDP3 char name[MAX_QPATH]; //name of this surface int flags; //not used yet int num_surf_frames; //number of frames in this surface int num_surf_shaders; //number of shaders in this surface int num_surf_verts; //number of vertices in this surface int num_surf_tris; //number of triangles in this surface //offsets to the verious parts int offs_shaders; int offs_tris; int offs_tc; int offs_verts; int offs_end; } md3surface_mem_t; //same - not used yet typedef struct { char name[MAX_QPATH]; vec3_t pos; vec3_t rot[MD3_MAX_TRIANGLES]; } md3tag_mem_t; //same typedef struct { vec3_t mins; vec3_t maxs; vec3_t pos; float radius; char name[MD3_3DS]; // The modeler used to create the model (I.E. "3DS Max") md3trivertx_t verts[1]; //variable sized } md3frame_mem_t; //same typedef struct { char id[MD3_IDP3]; //should be IDP3 char filename[MAX_QPATH]; //the name inside md3 int version; //should be 15 int flags; //not used (will be for particle trails etc) int num_frames; //number of frames in file int num_tags; //number of tags int num_surfaces; //number of surfaces int num_skins; //old model format leftovers, not used //convert these to new offsets int offs_frames; //offset to frame int offs_tags; //offset to tags int offs_surfaces; //offset to surfaces } md3header_mem_t; extern void R_DrawQ3Model(entity_t *e); extern void Mod_LoadQ3Model(model_t *mod, void *buffer);