/* =========================================================================== Copyright (C) 2000-2013 Darklegion Development Copyright (C) 2015-2019 GrangerHub This file is part of Tremulous. Tremulous 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 3 of the License, or (at your option) any later version. Tremulous 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 Tremulous; if not, see =========================================================================== */ #ifndef __IQM_H__ #define __IQM_H__ #define IQM_MAGIC "INTERQUAKEMODEL" #define IQM_VERSION 2 #define IQM_MAX_JOINTS 128 typedef struct iqmheader { char magic[16]; unsigned int version; unsigned int filesize; unsigned int flags; unsigned int num_text, ofs_text; unsigned int num_meshes, ofs_meshes; unsigned int num_vertexarrays, num_vertexes, ofs_vertexarrays; unsigned int num_triangles, ofs_triangles, ofs_adjacency; unsigned int num_joints, ofs_joints; unsigned int num_poses, ofs_poses; unsigned int num_anims, ofs_anims; unsigned int num_frames, num_framechannels, ofs_frames, ofs_bounds; unsigned int num_comment, ofs_comment; unsigned int num_extensions, ofs_extensions; } iqmHeader_t; typedef struct iqmmesh { unsigned int name; unsigned int material; unsigned int first_vertex, num_vertexes; unsigned int first_triangle, num_triangles; } iqmMesh_t; enum { IQM_POSITION = 0, IQM_TEXCOORD = 1, IQM_NORMAL = 2, IQM_TANGENT = 3, IQM_BLENDINDEXES = 4, IQM_BLENDWEIGHTS = 5, IQM_COLOR = 6, IQM_CUSTOM = 0x10 }; enum { IQM_BYTE = 0, IQM_UBYTE = 1, IQM_SHORT = 2, IQM_USHORT = 3, IQM_INT = 4, IQM_UINT = 5, IQM_HALF = 6, IQM_FLOAT = 7, IQM_DOUBLE = 8, }; typedef struct iqmtriangle { unsigned int vertex[3]; } iqmTriangle_t; typedef struct iqmjoint { unsigned int name; int parent; float translate[3], rotate[4], scale[3]; } iqmJoint_t; typedef struct iqmpose { int parent; unsigned int mask; float channeloffset[10]; float channelscale[10]; } iqmPose_t; typedef struct iqmanim { unsigned int name; unsigned int first_frame, num_frames; float framerate; unsigned int flags; } iqmAnim_t; enum { IQM_LOOP = 1<<0 }; typedef struct iqmvertexarray { unsigned int type; unsigned int flags; unsigned int format; unsigned int size; unsigned int offset; } iqmVertexArray_t; typedef struct iqmbounds { float bbmin[3], bbmax[3]; float xyradius, radius; } iqmBounds_t; #endif