1 #ifndef __MODEL_IQM_H__
2 #define __MODEL_IQM_H__
3 
4 typedef struct iqmheader_s
5 {
6 	char id[16];
7 	unsigned int version;
8 	unsigned int filesize;
9 	unsigned int flags;
10 	unsigned int num_text, ofs_text;
11 	unsigned int num_meshes, ofs_meshes;
12 	unsigned int num_vertexarrays, num_vertexes, ofs_vertexarrays;
13 	unsigned int num_triangles, ofs_triangles, ofs_neighbors;
14 	unsigned int num_joints, ofs_joints;
15 	unsigned int num_poses, ofs_poses;
16 	unsigned int num_anims, ofs_anims;
17 	unsigned int num_frames, num_framechannels, ofs_frames, ofs_bounds;
18 	unsigned int num_comment, ofs_comment;
19 	unsigned int num_extensions, ofs_extensions;
20 }
21 iqmheader_t;
22 
23 typedef struct iqmmesh_s
24 {
25 	unsigned int name;
26 	unsigned int material;
27 	unsigned int first_vertex, num_vertexes;
28 	unsigned int first_triangle, num_triangles;
29 }
30 iqmmesh_t;
31 
32 #define IQM_POSITION	    0
33 #define IQM_TEXCOORD        1
34 #define IQM_NORMAL          2
35 #define IQM_TANGENT         3
36 #define IQM_BLENDINDEXES    4
37 #define IQM_BLENDWEIGHTS    5
38 #define IQM_COLOR	        6
39 #define IQM_CUSTOM          0x10
40 
41 #define IQM_BYTE    0
42 #define IQM_UBYTE   1
43 #define IQM_SHORT   2
44 #define IQM_USHORT  3
45 #define IQM_INT	    4
46 #define IQM_UINT    5
47 #define IQM_HALF    6
48 #define IQM_FLOAT   7
49 #define IQM_DOUBLE  8
50 
51 // animflags
52 #define IQM_LOOP 1
53 
54 typedef struct iqmtriangle_s
55 {
56 	unsigned int vertex[3];
57 }
58 iqmtriangle_t;
59 
60 typedef struct iqmjoint1_s
61 {
62 	unsigned int name;
63 	signed int parent;
64 	float origin[3], rotation[3], scale[3];
65 }
66 iqmjoint1_t;
67 
68 typedef struct iqmjoint_s
69 {
70 	unsigned int name;
71 	signed int parent;
72 	float origin[3], rotation[4], scale[3];
73 }
74 iqmjoint_t;
75 
76 typedef struct iqmpose1_s
77 {
78 	signed int parent;
79 	unsigned int channelmask;
80 	float channeloffset[9], channelscale[9];
81 }
82 iqmpose1_t;
83 
84 typedef struct iqmpose_s
85 {
86 	signed int parent;
87 	unsigned int channelmask;
88 	float channeloffset[10], channelscale[10];
89 }
90 iqmpose_t;
91 
92 typedef struct iqmanim_s
93 {
94 	unsigned int name;
95 	unsigned int first_frame, num_frames;
96 	float framerate;
97 	unsigned int flags;
98 }
99 iqmanim_t;
100 
101 typedef struct iqmvertexarray_s
102 {
103 	unsigned int type;
104 	unsigned int flags;
105 	unsigned int format;
106 	unsigned int size;
107 	unsigned int offset;
108 }
109 iqmvertexarray_t;
110 
111 typedef struct iqmextension_s
112 {
113     unsigned int name;
114     unsigned int num_data, ofs_data;
115     unsigned int ofs_extensions; // pointer to next extension
116 }
117 iqmextension_t;
118 
119 typedef struct iqmbounds_s
120 {
121 	float mins[3], maxs[3];
122 	float xyradius, radius;
123 }
124 iqmbounds_t;
125 
126 #endif
127 
128