00001
00002 #ifndef INCLUDED_LIB3DS_MESH_H
00003 #define INCLUDED_LIB3DS_MESH_H
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef INCLUDED_LIB3DS_TYPES_H
00027 #include <lib3ds/types.h>
00028 #endif
00029
00030 #ifdef __cplusplus
00031 extern "C" {
00032 #endif
00033
00038 typedef struct Lib3dsPoint {
00039 Lib3dsVector pos;
00040 } Lib3dsPoint;
00041
00047 struct Lib3dsFace {
00048 Lib3dsUserData user;
00049 char material[64];
00050 Lib3dsWord points[3];
00051 Lib3dsWord flags;
00052 Lib3dsDword smoothing;
00053 Lib3dsVector normal;
00054 };
00055
00056
00062 typedef enum {
00063 LIB3DS_FACE_FLAG_VIS_AC = 0x1,
00064 LIB3DS_FACE_FLAG_VIS_BC = 0x2,
00065 LIB3DS_FACE_FLAG_VIS_AB = 0x4,
00066 LIB3DS_FACE_FLAG_WRAP_U = 0x8,
00067 LIB3DS_FACE_FLAG_WRAP_V = 0x10,
00068 LIB3DS_FACE_FLAG_UNK7 = 0x80,
00069 LIB3DS_FACE_FLAG_UNK10 = 0x400,
00070
00071 LIB3DS_FACE_FLAG_SELECT_3 = (1<<13),
00072 LIB3DS_FACE_FLAG_SELECT_2 = (1<<14),
00073 LIB3DS_FACE_FLAG_SELECT_1 = (1<<15),
00074 } Lib3dsFaceFlag;
00075
00080 struct Lib3dsBoxMap {
00081 char front[64];
00082 char back[64];
00083 char left[64];
00084 char right[64];
00085 char top[64];
00086 char bottom[64];
00087 };
00088
00093 typedef enum {
00094 LIB3DS_MAP_NONE =0xFFFF,
00095 LIB3DS_MAP_PLANAR =0,
00096 LIB3DS_MAP_CYLINDRICAL =1,
00097 LIB3DS_MAP_SPHERICAL =2
00098 } Lib3dsMapType;
00099
00104 struct Lib3dsMapData {
00105 Lib3dsWord maptype;
00106 Lib3dsVector pos;
00107 Lib3dsMatrix matrix;
00108 Lib3dsFloat scale;
00109 Lib3dsFloat tile[2];
00110 Lib3dsFloat planar_size[2];
00111 Lib3dsFloat cylinder_height;
00112 };
00113
00118 struct Lib3dsMesh {
00119 Lib3dsUserData user;
00120 Lib3dsMesh *next;
00121 char name[64];
00122 Lib3dsDword object_flags;
00123 Lib3dsByte color;
00124 Lib3dsMatrix matrix;
00125 Lib3dsDword points;
00126 Lib3dsPoint *pointL;
00127 Lib3dsDword flags;
00128 Lib3dsWord *flagL;
00129 Lib3dsDword texels;
00130 Lib3dsTexel *texelL;
00131 Lib3dsDword faces;
00132 Lib3dsFace *faceL;
00133 Lib3dsBoxMap box_map;
00134 Lib3dsMapData map_data;
00135 };
00136
00137 extern LIB3DSAPI Lib3dsMesh* lib3ds_mesh_new(const char *name);
00138 extern LIB3DSAPI void lib3ds_mesh_free(Lib3dsMesh *mesh);
00139 extern LIB3DSAPI Lib3dsBool lib3ds_mesh_new_point_list(Lib3dsMesh *mesh, Lib3dsDword points);
00140 extern LIB3DSAPI void lib3ds_mesh_free_point_list(Lib3dsMesh *mesh);
00141 extern LIB3DSAPI Lib3dsBool lib3ds_mesh_new_flag_list(Lib3dsMesh *mesh, Lib3dsDword flags);
00142 extern LIB3DSAPI void lib3ds_mesh_free_flag_list(Lib3dsMesh *mesh);
00143 extern LIB3DSAPI Lib3dsBool lib3ds_mesh_new_texel_list(Lib3dsMesh *mesh, Lib3dsDword texels);
00144 extern LIB3DSAPI void lib3ds_mesh_free_texel_list(Lib3dsMesh *mesh);
00145 extern LIB3DSAPI Lib3dsBool lib3ds_mesh_new_face_list(Lib3dsMesh *mesh, Lib3dsDword flags);
00146 extern LIB3DSAPI void lib3ds_mesh_free_face_list(Lib3dsMesh *mesh);
00147 extern LIB3DSAPI void lib3ds_mesh_bounding_box(Lib3dsMesh *mesh, Lib3dsVector bmin, Lib3dsVector bmax);
00148 extern LIB3DSAPI void lib3ds_mesh_calculate_normals(Lib3dsMesh *mesh, Lib3dsVector *normalL);
00149 extern LIB3DSAPI void lib3ds_mesh_dump(Lib3dsMesh *mesh);
00150 extern LIB3DSAPI Lib3dsBool lib3ds_mesh_read(Lib3dsMesh *mesh, Lib3dsIo *io);
00151 extern LIB3DSAPI Lib3dsBool lib3ds_mesh_write(Lib3dsMesh *mesh, Lib3dsIo *io);
00152
00153 #ifdef __cplusplus
00154 }
00155 #endif
00156 #endif
00157