Página principal | Jerarquía de la clase | Lista alfabética | Lista de componentes | Lista de archivos | Miembros de las clases | Archivos de los miembros | Páginas relacionadas

3dsload.h

Ir a la documentación de este archivo.
00001 //===========================================================================
00002 //= 3dsload.h                                            Septiembre de 1998 =
00003 //=-------------------------------------------------------------------------=
00004 //= Sistema de lectura de archivos binarios en formato Autodesk-3DS.        =
00005 //=-------------------------------------------------------------------------=
00006 //= ADVERTENCIA: ESTE SOFTWARE NO ESTA CONCEBIDO NI DISENNADO PARA EL USO   =
00007 //= EN EQUIPO DE CONTROL EN LINEA EN ENTORNOS PELIGROSOS QUE REQUIERAN UN   =
00008 //= DESEMPENNO LIBRE DE FALLAS, COMO LA OPERACION DE PLANTAS NUCLEARES,     = 
00009 //= SISTEMAS DE NAVEGACION O COMUNICACION EN AVIONES, TRAFICO AEREO,        =
00010 //= EQUIPO MEDICO DEL CUAL DEPENDAN VIDAS HUMANAS O SISTEMAS DE ARMAMENTO,  =
00011 //= EN LOS CUALES UNA FALLA EN EL SOFTWARE PUEDA IMPLICAR DIRECTAMENTE LA   =
00012 //= MUERTE, DANNOS PERSONALES O DANNOS FISICOS Y/O AMBIENTALES GRAVES       =
00013 //= ("ACTIVIDADES DE ALGO RIESGO").                                         =
00014 //=-------------------------------------------------------------------------=
00015 //= Codigo original:                                                        =
00016 //=  3D Studio object reader by David Farrell, fdavid@cyberramp.net         =
00017 //= Modificado por Oscar J. Chavarro G.            oscarchavarro@hotmail.co =
00018 //===========================================================================
00019 
00020 #ifndef __3DSLOAD__
00021 #define __3DSLOAD__
00022 
00023 #include "jed_defs.h"
00024 #include "color.h"
00025 #include "toolkits/geom/mesh.h"
00026 #include "arreglo.h"
00027 
00028 #define MAXNAMESIZE 50
00029 
00030 //===========================================================================
00031 //= Un archivo 3DS esta compuesto de "trozos" (chunks), cada uno de los     =
00032 //= cuales posee un encabezado de 6 bytes, que posee lo siguiente:          =
00033 //=  - Los primeros 2 bytes (WORD) son un identificador (tipo de trozo)     =
00034 //=  - Los siguientes 4 bytes (DWORD) son el tamanno del trozo (sin contar  =
00035 //=    el encabezado).  Notese que este tamanno puede usarse como un        =
00036 //=    desplazamiento al siguiente trozo.                                   =
00037 //= Los valores de la sigiente enumeracion son los tipos de identificador.  =
00038 //= Notese que la especificacion 3DS define una jerarquia de trozos, por lo =
00039 //= que cada tipo tiene un "nivel" y un "padre". (notese la identacion)     =
00040 //===========================================================================
00041 
00042 enum ENUM_CHUNKS_3DS {
00043     //- 1. El unico trozo de nivel 0 es MAIN, que tiene 2 hijos... ----------
00044     CHUNK3DS_MAIN /* Mis hijos son OBJMESH y KEYFRAMER */           = 0x4D4D,
00045     
00046     //- 2. HIJOS DE OBJMESH -------------------------------------------------
00047     /* Faltan: 0100 1100 1201 1300 1400 1450 1500 2200 2201 2210 2300 3000 
00048                3d3e 0002 4111 4165*/
00049     CHUNK3DS_OBJMESH                                                = 0x3D3D,
00050       CHUNK3DS_BKGCOLOR                                             = 0x1200,
00051       CHUNK3DS_AMBCOLOR                                             = 0x2100,
00052       CHUNK3DS_OBJBLOCK                                             = 0x4000,
00053         CHUNK3DS_TRIMESH                                            = 0x4100,
00054           CHUNK3DS_VERTLIST                                         = 0x4110,
00055           CHUNK3DS_FACELIST                                         = 0x4120,
00056             CHUNK3DS_FACEMAT                                        = 0x4130,
00057             CHUNK3DS_SMOOLIST                                       = 0x4150,
00058           CHUNK3DS_MAPLIST                                          = 0x4140,
00059           CHUNK3DS_TRMATRIX                                         = 0x4160,
00060         CHUNK3DS_LIGHT                                              = 0x4600,
00061           CHUNK3DS_SPOTLIGHT                                        = 0x4610,
00062         CHUNK3DS_CAMERA                                             = 0x4700,
00063       CHUNK3DS_MATERIAL                                             = 0xAFFF,
00064         CHUNK3DS_MATNAME                                            = 0xA000,
00065         CHUNK3DS_SHININESS                                          = 0xA040,
00066         CHUNK3DS_SHINE_STRENGTH                                     = 0xA041,
00067         CHUNK3DS_DOUBLESIDED                                        = 0xA081,
00068         CHUNK3DS_TRANSPARENCY                                       = 0xA050,
00069         CHUNK3DS_AMOUNT                                             = 0x0030,
00070         CHUNK3DS_AMBIENT                                            = 0xA010,
00071         CHUNK3DS_DIFFUSE                                            = 0xA020,
00072         CHUNK3DS_SPECULAR                                           = 0xA030,
00073         CHUNK3DS_TEXTURE                                            = 0xA200,
00074         CHUNK3DS_BUMPMAP                                            = 0xA230,
00075         CHUNK3DS_MAPFILENAME                                        = 0xA300,
00076         CHUNK3DS_MAPOPTIONS                                         = 0xA351,
00077 
00078     //- 3. HIJOS DE KEYFRAMER -----------------------------------------------
00079     CHUNK3DS_KEYFRAMER                                              = 0xB000,
00080       CHUNK3DS_FRAMES                                               = 0xB008,
00081 
00082     //- 4. TIPOS BASICOS Y GENERICOS (de nivel i) ---------------------------
00083     CHUNK3DS_RGB1                                                   = 0x0010,
00084     CHUNK3DS_RGB2                                                   = 0x0011,
00085     CHUNK3DS_RGB3  /* OJO! */                                       = 0x0012,
00086 
00087     // OTROS (Determinados empiricamente)
00088     CHUNK3DS_JEDILINK                                               = 0x0002
00089 };
00090 
00091 class MESH_3DS;
00092 class ESCENA_3DS;
00093 
00094 class TEXTURE_DATA {
00095   public:
00096     char texturename[MAXNAMESIZE];
00097     WORD options;
00098 };
00099 
00100 class VERTLIST_DATA {
00101   private:
00102     FLOAT32 x;
00103     FLOAT32 y;
00104     FLOAT32 z;
00105   public:
00106     friend class MESH_3DS;
00107     friend void importar_3DS(ESCENA_3DS *Scene,MESH *Geometria,BOOLEAN *b,
00108         double *Escala_optima);
00109 };
00110 
00111 class FACELIST_DATA {
00112   private:
00113     WORD p0,p1,p2;
00114     WORD flags;
00115   public:
00116     friend class MESH_3DS;
00117     friend void importar_3DS(ESCENA_3DS *Scene,MESH *Geometria,BOOLEAN *b,
00118         double *Escala_optima);
00119 };
00120 
00121 class MAPLIST_DATA {
00122   private:
00123     FLOAT32 u;
00124     FLOAT32 v;
00125   public:
00126     friend class MESH_3DS;
00127     friend void importar_3DS(ESCENA_3DS *Scene,MESH *Geometria,BOOLEAN *b,
00128         double *Escala_optima);
00129 };
00130 
00131 class MATERIAL_3DS {
00132   public:
00133     char name[MAXNAMESIZE];
00134     COLOR ambient;
00135     COLOR diffuse;
00136     COLOR specular;
00137     WORD mat_type;
00138     int doublesided;
00139     TEXTURE_DATA texture;
00140     int offset;
00141     FLOAT32 alpha;
00142 };
00143 
00144 class MATERIAL_ARR {
00145   private:
00146     char name[MAXNAMESIZE];
00147     unsigned int NumFaces;
00148     UWORD *faces;                   // Changed from word to uword 
00149   public:
00150     friend class MESH_3DS;
00151     friend class ESCENA_3DS;
00152     friend void importar_3DS(ESCENA_3DS *Scene,MESH *Geometria,BOOLEAN *b,
00153         double *Escala_optima);
00154 };
00155 
00156 // Object and scene structures
00157 class MESH_3DS {
00158   private:
00159     //-----------------------------------------------------------------------
00160     FILE *fd;
00161     char name[MAXNAMESIZE];  // object name, zero terminated
00162     int NumFaces;            // number of faces in face list
00163     int vertices_tam;        // number of vertices in vertex list
00164     int NumMaps;             // number of mapping coordinates in map list
00165     BOOLEAN con_matriz;      // TRUE if transformation matrix is loaded
00166     FACELIST_DATA *facelist; // array of face indices
00167     VERTLIST_DATA *vertices_arr; // array of vertices
00168     MAPLIST_DATA  *maplist;  // array of texture coordinates
00169     FLOAT32 TraMatrix[3*4];  // 3*3 rotation matrix, 3*1 translation matrix
00170     int offset;              // Our starting index into outgl's vertex list
00171     MATERIAL_ARR *anx_data(void);
00172 
00173     int jed_tam;         // number of binding materials
00174     MATERIAL_ARR *jed_arr;  // Binds faces to materials
00175     //ARREGLO <MATERIAL_ARR> arr_jed;  // Binds faces to materials    
00176 
00177     //-----------------------------------------------------------------------
00178     void leer_trozo_VERTLIST(void);
00179     WORD leer_trozo_FACELIST(void);
00180     void leer_trozo_MAPLIST(void);
00181     void leer_trozo_TRMATRIX(void);
00182     void leer_trozo_FACEMAT(void);
00183     void asignar_material_por_defecto(WORD nf);
00184 
00185     friend class ESCENA_3DS;
00186     friend void importar_3DS(ESCENA_3DS *Scene,MESH *Geometria,BOOLEAN *b,
00187         double *Escala_optima);
00188 
00189   public:
00190     MESH_3DS();
00191 };
00192 
00193 class ESCENA_3DS {
00194   private:
00195     //-----------------------------------------------------------------------
00196     // Representacion de la informacion almacenada en un archivo 3DS
00197     ARREGLO <MESH_3DS> arr_mesh;
00198     ARREGLO <MATERIAL_3DS> arr_material;
00199 
00200     BOOLEAN flag_caras_dobles;       // Configuraciones que deberia tener en
00201     BOOLEAN flag_alpha_blending;     // cuenta el usuario de esta clase para
00202     BOOLEAN flag_material_por_defecto; // mostrar los datos de la mejor manera
00203 
00204     BOOLEAN _muerta;                 // Informacion adicional AQUYNZA
00205     char *_nombre_de_archivo;
00206     FILE *fd;
00207 
00208     //-----------------------------------------------------------------------
00209     void leer_trozo_MAIN(DWORD p);                            // Nivel 0
00210     void leer_trozo_OBJMESH(DWORD p);                         // Nivel 1
00211     void leer_trozo_OBJBLOCK(DWORD p);                        // Nivel 2
00212     void leer_trozo_MATERIAL(DWORD p);
00213     void leer_trozo_TRIMESH(DWORD p, char *name);             // Nivel 3
00214     void leer_trozo_SHADING(DWORD p, COLOR *rgb);  
00215     void leer_trozo_MATNAME(DWORD p, MATERIAL_3DS *mat);
00216     void leer_trozo_DOUBLESIDED(int *material_doublesided);
00217     void leer_trozo_TRANSPARENCY(DWORD p, FLOAT32 *alpha);
00218     void leer_trozo_TEXTURE(DWORD p, TEXTURE_DATA *texture);
00219     void leer_trozo_RGBByte(COLOR *rgb);                      // Nivel 4
00220     void leer_trozo_RGBFloat(COLOR *rgb); 
00221     void leer_trozo_AMOUNT(WORD *amount);
00222     void leer_trozo_MAPFILENAME(DWORD p, TEXTURE_DATA *texture);
00223 
00224     MESH_3DS *anx_mesh(void);
00225     MATERIAL_3DS *anx_material(void);
00226 
00227   public:
00228     //-----------------------------------------------------------------------
00229     ESCENA_3DS(char *archivo);
00230     ~ESCENA_3DS();
00231     BOOLEAN leer(FILE *_fd);
00232     BOOLEAN muerta(void);
00233 
00234     //-----------------------------------------------------------------------
00235     friend ESCENA_3DS *HRead3dsScene(DWORD size);
00236     friend void importar_3DS(ESCENA_3DS *Scene,MESH *Geometria,BOOLEAN *b,
00237         double *Escala_optima);
00238 };
00239 
00240 extern void importar_3DS(ESCENA_3DS *Scene,MESH *Geometria,BOOLEAN *b,
00241                          double *Escala_optima);
00242 
00243 #endif // __3DSLOAD__
00244 
00245 //===========================================================================
00246 //= EOF                                                                     =
00247 //===========================================================================
00248 

Este archivo HTML ha sido generado automáticamente a partir del código fuente AQUYNZA. NO LO EDITE. Para mayor información contacte al autor.