00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __MESH__
00025 #define __MESH__
00026
00027 #include "jed_defs.h"
00028
00029 #include "toolkits/geom/geometria.h"
00030 #include "arreglo.h"
00031
00032 #define VERTEXBLOCKSIZE 1024
00033
00034 class MESH;
00035
00036
00037
00038
00039 class TRIANGULITO {
00040 private:
00041 GLuint p0, p1, p2;
00042 GLfloat nx, ny, nz;
00043 public:
00044 friend class MESH;
00045 };
00046
00047 class TRIANGLENODE {
00048 private:
00049 TRIANGULITO *triangle;
00050 TRIANGLENODE *sig;
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];
00061 IMAGEN_RGB *Imagen;
00062 BOOLEAN inicializado;
00063 ARREGLO<GLuint> indices_vertices_tiras;
00064
00065 ARREGLO<GLuint> inicios_tiras;
00066 ARREGLO<GLuint> longitudes_tiras;
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
00077 ARREGLO <VERTICE_GL> arr_vertices;
00078 ARREGLO <TROZO_GL> arr_trozos_gl;
00079 ARREGLO <GLubyte> arr_colores;
00080
00081
00082
00083 ARREGLO<TRIANGLENODE *> listas_de_referencias;
00084
00085 VERTICE_GL vertice_promedio;
00086 GLfloat cos_threshold;
00087 double escala;
00088
00089 IMAGEN *imagen;
00090 char *_nombre_de_archivo;
00091 VECTOR _min;
00092 VECTOR _max;
00093 long int ultima_tira;
00094 BOOLEAN _invertir_orden;
00095
00096
00097 BOOLEAN con_lista_gl;
00098 BOOLEAN calcular_normales;
00099 BOOLEAN centrar_modelo;
00100 BOOLEAN preservar_bordes;
00101 BOOLEAN normales_de_triangulo;
00102 BOOLEAN modo_tiras_de_triangulos;
00103 BOOLEAN preprocesada;
00104 BOOLEAN con_minmax;
00105 #ifdef GL_ENABLED
00106 int id_lista_opengl;
00107 BOOLEAN preprocesada_gl;
00108 #endif
00109
00110
00111 BOOLEAN pintar_normales;
00112 BOOLEAN *Arr_control;
00113 BOOLEAN pintar_debug_vertices;
00114 long int index_debug_vertice;
00115 BOOLEAN pintar_debug_triangulos;
00116 long int index_debug_triangulo;
00117 BOOLEAN material_global;
00118 BOOLEAN mostrar_tiras;
00119
00120
00121 void crear_trozos_gl(void);
00122 void crear_tiras(void);
00123
00124
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
00131 int encontrar_material(char *);
00132 BOOLEAN calcule_normal_triangulo(TRIANGULITO *Triangulo);
00133
00134
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);
00142 void pintar_debug_triangulo(long int i);
00143
00144 public:
00145
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
00160 void init(void);
00161 void promediar_normales_vertice(void);
00162 void anx_vertex(VERTICE_GL);
00163 void anx_indice_tira(long int i);
00164 void anx_tira(void);
00165 void anx_color(GLubyte r, GLubyte g, GLubyte b);
00166 void anx_triangle(TRIANGULO_GL, char *nombre_material);
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
00176 void set_pintado_normales(BOOLEAN c);
00177 long int num_vertices(void);
00178 void set_debug_vertices(BOOLEAN c);
00179 void set_debug_vertices_index(long int i);
00180 long int num_triangulos(void);
00181 void set_debug_triangulos(BOOLEAN c);
00182 void set_debug_triangulos_index(long int i);
00183 int num_grupos(void);
00184 void controlar(BOOLEAN *arr_control);
00185 void imprimir(BOOLEAN full_report = TRUE);
00186 void set_material_global(BOOLEAN m);
00187 void set_debug_tiras(BOOLEAN t);
00188 };
00189
00190 #endif // __MESH__
00191
00192
00193
00194
00195