]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_iqm.h
experimental IQM model format support
[xonotic/darkplaces.git] / model_iqm.h
diff --git a/model_iqm.h b/model_iqm.h
new file mode 100644 (file)
index 0000000..89701e8
--- /dev/null
@@ -0,0 +1,101 @@
+#ifndef __MODEL_IQM_H__
+#define __MODEL_IQM_H__
+
+typedef struct iqmheader_s
+{
+       char id[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_neighbors;
+       unsigned int num_joints, ofs_joints, ofs_inversebasepose;
+       unsigned int num_poses, ofs_poses;
+       unsigned int num_anims, ofs_anims;
+       unsigned int num_frames, num_framechannels, ofs_frames;
+       unsigned int num_comment, ofs_comment;
+       unsigned int num_extensions, ofs_extensions;
+} 
+iqmheader_t;
+
+typedef struct iqmmesh_s
+{
+       unsigned int name;
+       unsigned int material;
+       unsigned int first_vertex, num_vertexes;
+       unsigned int first_triangle, num_triangles;
+}
+iqmmesh_t;
+
+#define IQM_POSITION       0
+#define IQM_TEXCOORD        1
+#define IQM_NORMAL          2
+#define IQM_TANGENT         3
+#define IQM_BLENDINDEXES    4
+#define IQM_BLENDWEIGHTS    5
+#define IQM_COLOR              6
+#define IQM_CUSTOM          0x10
+
+#define IQM_BYTE    0
+#define IQM_UBYTE   1
+#define IQM_SHORT   2
+#define IQM_USHORT  3
+#define IQM_INT            4
+#define IQM_UINT    5
+#define IQM_HALF    6
+#define IQM_FLOAT   7
+#define IQM_DOUBLE  8
+
+typedef struct iqmtriangle_s
+{
+       unsigned int vertex[3];
+}
+iqmtriangle_t;
+
+typedef struct iqmjoint_s
+{
+       unsigned int name;
+       signed int parent;
+       float origin[3], rotation[3];
+}
+iqmjoint_t;
+
+typedef struct iqmpose_s
+{
+       signed int parent;
+       unsigned int channelmask;
+       float channeloffset[6], channelscale[6];
+}
+iqmpose_t;
+
+typedef struct iqmanim_s
+{
+       unsigned int name;
+       unsigned int first_frame, num_frames;
+       unsigned int framerate;
+       unsigned int flags;
+}
+iqmanim_t;
+
+typedef struct iqmvertexarray_s
+{
+       unsigned int type;
+       unsigned int flags;
+       unsigned int format;
+       unsigned int size;
+       unsigned int offset;
+}
+iqmvertexarray_t;
+
+typedef struct iqmextension_s
+{
+    unsigned int name;
+    unsigned int num_data, ofs_data;
+    unsigned int ofs_extensions; // pointer to next extension
+}
+iqmextension_t;
+
+#endif
+