iqm.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #ifndef __IQM_H__
  2. #define __IQM_H__
  3. #define IQM_MAGIC "INTERQUAKEMODEL"
  4. #define IQM_VERSION 2
  5. struct iqmheader
  6. {
  7. char magic[16];
  8. unsigned int version;
  9. unsigned int filesize;
  10. unsigned int flags;
  11. unsigned int num_text, ofs_text;
  12. unsigned int num_meshes, ofs_meshes;
  13. unsigned int num_vertexarrays, num_vertexes, ofs_vertexarrays;
  14. unsigned int num_triangles, ofs_triangles, ofs_adjacency;
  15. unsigned int num_joints, ofs_joints;
  16. unsigned int num_poses, ofs_poses;
  17. unsigned int num_anims, ofs_anims;
  18. unsigned int num_frames, num_framechannels, ofs_frames, ofs_bounds;
  19. unsigned int num_comment, ofs_comment;
  20. unsigned int num_extensions, ofs_extensions;
  21. };
  22. struct iqmmesh
  23. {
  24. unsigned int name;
  25. unsigned int material;
  26. unsigned int first_vertex, num_vertexes;
  27. unsigned int first_triangle, num_triangles;
  28. };
  29. enum
  30. {
  31. IQM_POSITION = 0,
  32. IQM_TEXCOORD = 1,
  33. IQM_NORMAL = 2,
  34. IQM_TANGENT = 3,
  35. IQM_BLENDINDEXES = 4,
  36. IQM_BLENDWEIGHTS = 5,
  37. IQM_COLOR = 6,
  38. IQM_CUSTOM = 0x10
  39. };
  40. enum
  41. {
  42. IQM_BYTE = 0,
  43. IQM_UBYTE = 1,
  44. IQM_SHORT = 2,
  45. IQM_USHORT = 3,
  46. IQM_INT = 4,
  47. IQM_UINT = 5,
  48. IQM_HALF = 6,
  49. IQM_FLOAT = 7,
  50. IQM_DOUBLE = 8
  51. };
  52. struct iqmtriangle
  53. {
  54. unsigned int vertex[3];
  55. };
  56. struct iqmadjacency
  57. {
  58. unsigned int triangle[3];
  59. };
  60. struct iqmjointv1
  61. {
  62. unsigned int name;
  63. int parent;
  64. float translate[3], rotate[3], scale[3];
  65. };
  66. struct iqmjoint
  67. {
  68. unsigned int name;
  69. int parent;
  70. float translate[3], rotate[4], scale[3];
  71. };
  72. struct iqmposev1
  73. {
  74. int parent;
  75. unsigned int mask;
  76. float channeloffset[9];
  77. float channelscale[9];
  78. };
  79. struct iqmpose
  80. {
  81. int parent;
  82. unsigned int mask;
  83. float channeloffset[10];
  84. float channelscale[10];
  85. };
  86. struct iqmanim
  87. {
  88. unsigned int name;
  89. unsigned int first_frame, num_frames;
  90. float framerate;
  91. unsigned int flags;
  92. };
  93. enum
  94. {
  95. IQM_LOOP = 1<<0
  96. };
  97. struct iqmvertexarray
  98. {
  99. unsigned int type;
  100. unsigned int flags;
  101. unsigned int format;
  102. unsigned int size;
  103. unsigned int offset;
  104. };
  105. struct iqmbounds
  106. {
  107. float bbmin[3], bbmax[3];
  108. float xyradius, radius;
  109. };
  110. struct iqmextension
  111. {
  112. unsigned int name;
  113. unsigned int num_data, ofs_data;
  114. unsigned int ofs_extensions; // pointer to next extension
  115. };
  116. #endif