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

mesh.h

Ir a la documentación de este archivo.
00001 //===========================================================================
00002 //= mesh.h                                               Septiembre de 1998 =
00003 //=-------------------------------------------------------------------------=
00004 //= Modulo de representacion y despliegue de geometrias 3D en mallas de     =
00005 //= triangulos. Este modulo contiene la implementacion de la clase MESH y   =
00006 //= esta dividido en las siguientes secciones:                              =
00007 //=   - Inicio                                                              =
00008 //=       Macros, descructora y constructora                                =
00009 //=   - Servicios de construccion de TAD's internos                         =
00010 //=       angle, calcule_normales_vertice, cree_lista_de_referencias & init =
00011 //=   - Operaciones que precalculan datos                                   =
00012 //=       crear_trozos_gl & crear_tiras                                     =
00013 //=   - Operaciones de visualizacion                                        =
00014 //=       crear_trozos_gl, crear_tiras, pintar_*_gl & compilar_lista_GL     =
00015 //=   - Operaciones que permiten importar datos desde otras clases          =
00016 //=       encontrar_material, calcule_normal_triangulo, anx_vertex,         =
00017 //=       anx_triangle & anx_material                                       =
00018 //=-------------------------------------------------------------------------=
00019 //= Basado en el proyecto "3D Studio to OpenGL File Converter" de David     =
00020 //= Farrell, fdavid@cyberramp.net                                           =
00021 //= Modificado y extendido por Oscar Chavarro     oscarchavarro@hotmail.com =
00022 //===========================================================================
00023 
00024 #ifndef __MESH__
00025 #define __MESH__
00026 
00027 #include "jed_defs.h"  // Incluir antes que nada, en ese modulo se definen 
00028                        // aspectos importantes para la portabilidad del sistema
00029 #include "toolkits/geom/geometria.h"
00030 #include "arreglo.h"
00031 
00032 #define VERTEXBLOCKSIZE 1024
00033 
00034 class MESH;
00035 
00036 /* Notese que TRIANGULITO, TRIANGLENODE y TROZO_GL son clases 
00037 privadas para uso esclusivo de MESH */
00038 
00039 class TRIANGULITO {
00040   private:
00041     GLuint p0, p1, p2;   // Indices a un arreglo de VERTICE_GL's
00042     GLfloat nx, ny, nz;  // Normal para este triangulo
00043   public:
00044     friend class MESH;
00045 };
00046 
00047 class TRIANGLENODE {               // LList used to keep track of which
00048   private:
00049     TRIANGULITO *triangle;            // triangles touch which vertices. Links
00050     TRIANGLENODE *sig;                // the vertices back to the triangles.
00051   public:
00052     friend class MESH;
00053 };
00054 
00055 class TROZO_GL {
00056   private:
00057     MATERIAL material;
00058     ARREGLO <TRIANGULITO> arr_triangulos;
00059     TRIANGULO_GL *triangulos_gl;
00060     char texturename[50];                  // Nombre del archivo de textura
00061     IMAGEN_RGB *Imagen;
00062     BOOLEAN inicializado;
00063     ARREGLO<GLuint> indices_vertices_tiras;// Tiene todos los puntos de todas las tiras
00064                                            // son indices al arreglo de vertices
00065     ARREGLO<GLuint> inicios_tiras;         // Indices en vertices_tiras con los inicios de
00066     ARREGLO<GLuint> longitudes_tiras;      // cada una y las longitudes
00067 
00068     void init(char *patron);
00069   public:
00070     TROZO_GL();
00071     friend class MESH;
00072 };
00073 
00074 class MESH : public GEOMETRIA {
00075   private:
00076     //- Esquema de representacion del MESH ---------------------------------
00077     ARREGLO <VERTICE_GL> arr_vertices; // El arreglo de vertices
00078     ARREGLO <TROZO_GL> arr_trozos_gl;  // Arreglo de secciones 
00079     ARREGLO <GLubyte> arr_colores;     // Colores por vertice (?)
00080     // Arreglo de listas de triangulos de incidencia. Usada para en calculo de 
00081     // normales de vertices.  La i-esima posicion es una lista de triangulos
00082     // que contiene todos los triangulos que inciden en el i-esimo vertice.
00083     ARREGLO<TRIANGLENODE *> listas_de_referencias; 
00084 
00085     VERTICE_GL vertice_promedio;    // Variables de estado del modelo
00086     GLfloat cos_threshold;          // Umbral para la particion de vertices
00087     double escala;                  // Escala geometrica global
00088 
00089     IMAGEN *imagen;                 // Textura
00090     char *_nombre_de_archivo;       // Archivo original si el modelo fue leido
00091     VECTOR _min;
00092     VECTOR _max;
00093     long int ultima_tira;           // Usado en anx_tira();
00094     BOOLEAN _invertir_orden;        // Usado en anx_triangle();
00095 
00096     //- Configuraciones de visualizacion -----------------------------------
00097     BOOLEAN con_lista_gl;           // Activacion de optimizacion OpenGL
00098     BOOLEAN calcular_normales;      // ?
00099     BOOLEAN centrar_modelo;         // Se resta el vertice_promedio...
00100     BOOLEAN preservar_bordes;       // ?
00101     BOOLEAN normales_de_triangulo;  // ?
00102     BOOLEAN modo_tiras_de_triangulos; // Utiliza stripe para generarse!
00103     BOOLEAN preprocesada;           // Flags de configuracion
00104     BOOLEAN con_minmax;  
00105   #ifdef GL_ENABLED
00106     int id_lista_opengl;  // Para acelerar OpenGL, solo aplica si con_lista_gl
00107     BOOLEAN preprocesada_gl;  // ?
00108   #endif
00109 
00110     //- Elementos de depuracion visual -------------------------------------
00111     BOOLEAN pintar_normales; // Si es TRUE representa con lineas las normales
00112     BOOLEAN *Arr_control;    // Permite especificar los trozos_gl a pintar
00113     BOOLEAN pintar_debug_vertices; // Representacion resaltada de un vertice
00114     long int index_debug_vertice;  // Vertice activo para ser resaltado
00115     BOOLEAN pintar_debug_triangulos;
00116     long int index_debug_triangulo;
00117     BOOLEAN material_global; // Cambia el uso del color
00118     BOOLEAN mostrar_tiras;   // Cambia el uso del color
00119 
00120     //--- Operaciones que precalculan datos ---
00121     void crear_trozos_gl(void);
00122     void crear_tiras(void);
00123 
00124     //--- Operaciones constructoras ---
00125     GLfloat angulo_de_vertice(TRIANGULITO *, GLuint);
00126     void calcule_normales_vertice(void);
00127     void cree_lista_de_referencias(void);
00128     void anexar_trozo_obj(char *linea);
00129 
00130     //--- Operaciones que permiten importar datos desde otras clases ---
00131     int encontrar_material(char *);
00132     BOOLEAN calcule_normal_triangulo(TRIANGULITO *Triangulo);
00133 
00134     //- Operaciones de visualizacion --------
00135     void pintar_triangulos_gl(CALIDAD_VISUAL *Calidad);
00136     void pintar_triangulos_tira_gl(CALIDAD_VISUAL *Calidad);
00137     void pintar_triangulosv_gl(CALIDAD_VISUAL *Calidad);
00138     void pintar_triangulosv_tira_gl(CALIDAD_VISUAL *Calidad);
00139     void compilar_lista_gl(int lista_gl, CALIDAD_VISUAL *Calidad);
00140     void nucleo_pintar_gl(CALIDAD_VISUAL *Calidad);
00141     void pintar_debug_vertice(long int i);    // Depuracion visual
00142     void pintar_debug_triangulo(long int i);  // Depuracion visual
00143 
00144   public:
00145     //- Interfaz generica de geometrias AQUYNZA ----------------------------
00146     MESH(int threshold, BOOLEAN strips, BOOLEAN center_model, double scale);
00147     virtual ~MESH();
00148 
00149     void anexar_textura(IMAGEN *img);
00150     int clasificar_punto(VECTOR p);
00151     void minmax(VECTOR *min, VECTOR *max);
00152 #ifdef GL_ENABLED
00153     void
00154     pintar_gl(CALIDAD_VISUAL *Calidad, MATERIAL* Material, CAMARA *Camara);
00155 #endif
00156     void pintar_povray(FILE *fd);
00157     void pintar_aqz(FILE *fd);
00158 
00159     //- Interfaz particular de la clase MESH -------------------------------
00160     void init(void);
00161     void promediar_normales_vertice(void);
00162     void anx_vertex(VERTICE_GL);           // Constructora
00163     void anx_indice_tira(long int i);      // Constructora
00164     void anx_tira(void);                   // Constructora
00165     void anx_color(GLubyte r, GLubyte g, GLubyte b);
00166     void anx_triangle(TRIANGULO_GL, char *nombre_material); // Constructora
00167     void anx_material(COLOR, COLOR, COLOR, char *, char *, int);
00168     void set_escala(double e);
00169     void set_nombre_de_archivo(char *c);
00170     void set_invertir_orden(BOOLEAN o);
00171     void get_vertices(VERTICE_GL **V, long int *n);
00172     BOOLEAN importar_obj(char *archivo, double *Escala_optima);
00173     BOOLEAN exportar_obj(FILE *fd, int i);
00174 
00175     //- Particular a MESH: Ayudas a la depuracion visual --------------------
00176     void set_pintado_normales(BOOLEAN c);   // Representacion de normales 
00177     long int num_vertices(void);            // Indica el numero de vertices
00178     void set_debug_vertices(BOOLEAN c);     // Representacion de vertices
00179     void set_debug_vertices_index(long int i); // Representacion de vertices
00180     long int num_triangulos(void);          // Indica el numero de triangulos
00181     void set_debug_triangulos(BOOLEAN c);
00182     void set_debug_triangulos_index(long int i);
00183     int  num_grupos(void);                  // Indica el numero de trozos_gl
00184     void controlar(BOOLEAN *arr_control);   // Control de trozos_gl a pintar
00185     void imprimir(BOOLEAN full_report = TRUE); // Para entender la estructura 
00186     void set_material_global(BOOLEAN m);    // Cambia el uso del color
00187     void set_debug_tiras(BOOLEAN t);        // Cambia el uso del color
00188 };
00189 
00190 #endif  // __MESH__
00191 
00192 //===========================================================================
00193 //= EOF                                                                     =
00194 //===========================================================================
00195 

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.