C:/jkyprian/devel/lib3ds/lib3ds/mesh.h

00001 /* -*- c -*- */
00002 #ifndef INCLUDED_LIB3DS_MESH_H
00003 #define INCLUDED_LIB3DS_MESH_H
00004 /*
00005  * The 3D Studio File Format Library
00006  * Copyright (C) 1996-2007 by Jan Eric Kyprianidis <www.kyprianidis.com>
00007  * All rights reserved.
00008  *
00009  * This program is  free  software;  you can redistribute it and/or modify it
00010  * under the terms of the  GNU Lesser General Public License  as published by 
00011  * the  Free Software Foundation;  either version 2.1 of the License,  or (at 
00012  * your option) any later version.
00013  *
00014  * This  program  is  distributed in  the  hope that it will  be useful,  but
00015  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
00016  * or  FITNESS FOR A  PARTICULAR PURPOSE.  See the  GNU Lesser General Public  
00017  * License for more details.
00018  *
00019  * You should  have received  a copy of the GNU Lesser General Public License
00020  * along with  this program;  if not, write to the  Free Software Foundation,
00021  * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00022  *
00023  * $Id: mesh.h,v 1.20 2007/06/20 17:04:08 jeh Exp $
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,        /* Bit 5-8: Unused ? */
00069   LIB3DS_FACE_FLAG_UNK10 = 0x400,      /* Bit 9-10: Random ? */
00070                                        /* Bit 11-12: Unused ? */
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;        /*< Arbitrary user data */
00120     Lib3dsMesh *next;
00121     char name[64];                      /*< Mesh name. Don't use more than 8 characters  */
00122     Lib3dsDword object_flags; /*< @see Lib3dsObjectFlags */ 
00123     Lib3dsByte color;
00124     Lib3dsMatrix matrix;        /*< Transformation matrix for mesh data */
00125     Lib3dsDword points;             /*< Number of points in point list */
00126     Lib3dsPoint *pointL;            /*< Point list */
00127     Lib3dsDword flags;              /*< Number of flags in per-point flags list */
00128     Lib3dsWord *flagL;              /*< Per-point flags list */
00129     Lib3dsDword texels;             /*< Number of U-V texture coordinates */
00130     Lib3dsTexel *texelL;            /*< U-V texture coordinates */
00131     Lib3dsDword faces;          /*< Number of faces in face list */
00132     Lib3dsFace *faceL;              /*< Face list */
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 

Hosted by
SourceForge.net Logo
Generated at Wed Jun 20 18:51:36 2007 by Doxygen 1.5.2