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

jed_gl.C

Ir a la documentación de este archivo.
00001 //===========================================================================
00002 //= Define cosas para que tk funcione en base a la libreria aux (de OpenGL).=
00003 //===========================================================================
00004 
00005 #include "jed_gl.h"
00006 #include "matriz4.h"
00007 
00008 //===========================================================================
00009 //= Constantes                                                              =
00010 //===========================================================================
00011 
00012 GLenum (*THE_key_callback)(int, GLenum);
00013 void (*THE_draw_callback)(void);
00014 void (*THE_idle_callback)(void);
00015 
00016 //===========================================================================
00017 //= Variables globales                                                      =
00018 //===========================================================================
00019 
00025 double COORDENADAS_cubo[6][4][3] = {
00026     { {-.5,  .5,  .5}, {-.5,  .5, -.5}, {-.5, -.5, -.5}, {-.5, -.5,  .5} },
00027     { { .5,  .5, -.5}, { .5,  .5,  .5}, { .5, -.5,  .5}, { .5, -.5, -.5} },
00028     { {-.5, -.5,  .5}, {-.5, -.5, -.5}, { .5, -.5, -.5}, { .5, -.5,  .5} },
00029     { {-.5,  .5, -.5}, {-.5,  .5,  .5}, { .5,  .5,  .5}, { .5,  .5, -.5} },
00030     { {-.5,  .5, -.5}, { .5,  .5, -.5}, { .5, -.5, -.5}, {-.5, -.5, -.5} },
00031     { { .5,  .5,  .5}, {-.5,  .5,  .5}, {-.5, -.5,  .5}, { .5, -.5,  .5} }
00032 };
00033 
00034 double NORMALES_cubo[6][3] = {
00035     {-1,  0,  0},
00036     { 1,  0,  0},
00037     { 0, -1,  0},
00038     { 0,  1,  0},
00039     { 0,  0, -1},
00040     { 0,  0,  1}
00041 };
00042 
00043 double TEXTURAS_cubo[6][4][2] = {
00044     { {1, 1}, {0, 1}, {0, 0}, {1, 0} },
00045     { {1, 1}, {0, 1}, {0, 0}, {1, 0} },
00046     { {1, 1}, {0, 1}, {0, 0}, {1, 0} },
00047     { {1, 1}, {0, 1}, {0, 0}, {1, 0} },
00048     { {1, 1}, {0, 1}, {0, 0}, {1, 0} },
00049     { {1, 1}, {0, 1}, {0, 0}, {1, 0} }
00050 };
00051 
00052 //===========================================================================
00053 //= Servicios publicos utilitarios                                          =
00054 //===========================================================================
00055 
00056 // OJO: Esta vaina se exporta!
00057 
00058 #ifdef GL_ENABLED
00059 
00060 GLUquadricObj *TEXTURA_glu_global = NULL;
00061 
00062 void
00063 PINTAR_VECTOR_GL(VECTOR p1, VECTOR p2, double grosor_cuerpo,
00064                  double longitud_flecha, double grosor_flecha)
00086 {
00087     //- Inicializacion -----------------------------------------------------
00088     if ( !TEXTURA_glu_global ) TEXTURA_glu_global = gluNewQuadric();
00089 
00090     //- Determine la longitud de las secciones -----------------------------
00091     double longitud_tronco, longitud_total;
00092 
00093     longitud_total = DISTANCIA_V(p1, p2);
00094     if ( longitud_flecha < longitud_total ) {
00095         longitud_tronco = longitud_total - longitud_flecha;
00096       }
00097       else {
00098         longitud_tronco = longitud_total;
00099         longitud_flecha = 0;
00100     }
00101 
00102     //- Generacion de primitivas geometricas -------------------------------
00103     MATRIZ_4x4 R;
00104     VECTOR pm, v;
00105 
00106     R.rotacion_punto_punto(p1, p2);
00107 
00108     // Genera primitivas sobre p1
00109     glPushMatrix();
00110     glTranslatef((float)p1.x, (float)p1.y, (float)p1.z);
00111     R.cargar_gl();
00112     gluCylinder(TEXTURA_glu_global,
00113         grosor_cuerpo, grosor_cuerpo, longitud_tronco, 6, 1); // Tronco
00114     glRotated(180, 1, 0, 0);
00115     gluDisk(TEXTURA_glu_global, 0, grosor_cuerpo, 6, 1);       // Tapa
00116     glPopMatrix();
00117 
00118     // Genera primitivas sobre pm o p2
00119     if ( longitud_flecha > EPSILON ) {
00120         // Pinta una esbelta punta de flecha
00121         v = p2 - p1;
00122         v.normalizar();
00123         pm = p2 - v * longitud_flecha;
00124         glPushMatrix();
00125         glTranslatef((float)pm.x, (float)pm.y, (float)pm.z);
00126         R.cargar_gl();
00127         gluCylinder(TEXTURA_glu_global,
00128             grosor_flecha, 0, longitud_flecha, 6, 1);  // Punta
00129         // Base
00130         if ( fabs(grosor_flecha - grosor_cuerpo) > EPSILON ) {
00131             if ( grosor_flecha > grosor_cuerpo ) glRotated(180, 1, 0, 0);
00132             gluDisk(TEXTURA_glu_global,grosor_cuerpo,grosor_flecha,6,1); 
00133         }
00134         glPopMatrix();
00135       }
00136       else {
00137         // Pinta una tapita para que quede todo como un cilindro
00138         glPushMatrix();
00139         glTranslatef((float)p2.x, (float)p2.y, (float)p2.z);
00140         R.cargar_gl();
00141         gluDisk(TEXTURA_glu_global,0,grosor_cuerpo,6,1); 
00142         glPopMatrix();
00143     }
00144 }
00145 #endif // GL_ENABLED
00146 
00147 void
00148 PINTAR_VECTOR_POVRAY(FILE *fd, VECTOR p1, VECTOR p2, double grosor_cuerpo,
00149                  double largo_punta, double grosor_punta)
00153 {
00154     VECTOR v = p2 - p1;
00155     VECTOR pb;
00156     double largo_flecha = v.norma();
00157 
00158     v.normalizar();
00159     pb = p1 + v * (largo_flecha - largo_punta);
00160 
00161     fprintf(fd, 
00162         "union {\n"
00163         "    cone {\n"
00164         "        <%f, %f, %f>, %f\n"
00165         "        <%f, %f, %f>, 0\n"
00166         "    }\n"
00167         "    cone {\n"
00168         "        <%f, %f, %f>, %f\n"
00169         "        <%f, %f, %f>, %f\n"
00170             "    }\n",
00171         pb.x, pb.y, pb.z, grosor_punta, p2.x, p2.y, p2.z,
00172         p1.x, p1.y, p1.z, grosor_cuerpo, pb.x, pb.y, pb.z, grosor_cuerpo
00173     );
00174 }
00175 
00176 #if PLATAFORMA==i386_WIN32_VC
00177 
00178 //===========================================================================
00179 //= Funciones                                                               =
00180 //===========================================================================
00181 
00182 void tkDisplayFunc(void (*f)(void)){ THE_draw_callback = (f); }
00183 
00184 static void CALLBACK TK_RETURN_callback(void) {THE_key_callback(TK_RETURN,0);};
00185 static void CALLBACK TK_ESCAPE_callback(void) {THE_key_callback(TK_ESCAPE,0);};
00186 static void CALLBACK TK_SPACE_callback(void) { THE_key_callback(TK_SPACE, 0);};
00187 static void CALLBACK TK_LEFT_callback(void) { THE_key_callback(TK_LEFT, 0); };
00188 static void CALLBACK TK_UP_callback(void) { THE_key_callback(TK_UP, 0); };
00189 static void CALLBACK TK_RIGHT_callback(void) { THE_key_callback(TK_RIGHT, 0);};
00190 static void CALLBACK TK_DOWN_callback(void) { THE_key_callback(TK_DOWN, 0); };
00191 static void CALLBACK TK_A_callback(void) { THE_key_callback(TK_A, 0); };
00192 static void CALLBACK TK_B_callback(void) { THE_key_callback(TK_B, 0); };
00193 static void CALLBACK TK_C_callback(void) { THE_key_callback(TK_C, 0); };
00194 static void CALLBACK TK_D_callback(void) { THE_key_callback(TK_D, 0); };
00195 static void CALLBACK TK_E_callback(void) { THE_key_callback(TK_E, 0); };
00196 static void CALLBACK TK_F_callback(void) { THE_key_callback(TK_F, 0); };
00197 static void CALLBACK TK_G_callback(void) { THE_key_callback(TK_G, 0); };
00198 static void CALLBACK TK_H_callback(void) { THE_key_callback(TK_H, 0); };
00199 static void CALLBACK TK_I_callback(void) { THE_key_callback(TK_I, 0); };
00200 static void CALLBACK TK_J_callback(void) { THE_key_callback(TK_J, 0); };
00201 static void CALLBACK TK_K_callback(void) { THE_key_callback(TK_K, 0); };
00202 static void CALLBACK TK_L_callback(void) { THE_key_callback(TK_L, 0); };
00203 static void CALLBACK TK_M_callback(void) { THE_key_callback(TK_M, 0); };
00204 static void CALLBACK TK_N_callback(void) { THE_key_callback(TK_N, 0); };
00205 static void CALLBACK TK_O_callback(void) { THE_key_callback(TK_O, 0); };
00206 static void CALLBACK TK_P_callback(void) { THE_key_callback(TK_P, 0); };
00207 static void CALLBACK TK_Q_callback(void) { THE_key_callback(TK_Q, 0); };
00208 static void CALLBACK TK_R_callback(void) { THE_key_callback(TK_R, 0); };
00209 static void CALLBACK TK_S_callback(void) { THE_key_callback(TK_S, 0); };
00210 static void CALLBACK TK_T_callback(void) { THE_key_callback(TK_T, 0); };
00211 static void CALLBACK TK_U_callback(void) { THE_key_callback(TK_U, 0); };
00212 static void CALLBACK TK_V_callback(void) { THE_key_callback(TK_V, 0); };
00213 static void CALLBACK TK_W_callback(void) { THE_key_callback(TK_W, 0); };
00214 static void CALLBACK TK_X_callback(void) { THE_key_callback(TK_X, 0); };
00215 static void CALLBACK TK_Y_callback(void) { THE_key_callback(TK_Y, 0); };
00216 static void CALLBACK TK_Z_callback(void) { THE_key_callback(TK_Z, 0); };
00217 static void CALLBACK TK_a_callback(void) { THE_key_callback(TK_a, 0); };
00218 static void CALLBACK TK_b_callback(void) { THE_key_callback(TK_b, 0); };
00219 static void CALLBACK TK_c_callback(void) { THE_key_callback(TK_c, 0); };
00220 static void CALLBACK TK_d_callback(void) { THE_key_callback(TK_d, 0); };
00221 static void CALLBACK TK_e_callback(void) { THE_key_callback(TK_e, 0); };
00222 static void CALLBACK TK_f_callback(void) { THE_key_callback(TK_f, 0); };
00223 static void CALLBACK TK_g_callback(void) { THE_key_callback(TK_g, 0); };
00224 static void CALLBACK TK_h_callback(void) { THE_key_callback(TK_h, 0); };
00225 static void CALLBACK TK_i_callback(void) { THE_key_callback(TK_i, 0); };
00226 static void CALLBACK TK_j_callback(void) { THE_key_callback(TK_j, 0); };
00227 static void CALLBACK TK_k_callback(void) { THE_key_callback(TK_k, 0); };
00228 static void CALLBACK TK_l_callback(void) { THE_key_callback(TK_l, 0); };
00229 static void CALLBACK TK_m_callback(void) { THE_key_callback(TK_m, 0); };
00230 static void CALLBACK TK_n_callback(void) { THE_key_callback(TK_n, 0); };
00231 static void CALLBACK TK_o_callback(void) { THE_key_callback(TK_o, 0); };
00232 static void CALLBACK TK_p_callback(void) { THE_key_callback(TK_p, 0); };
00233 static void CALLBACK TK_q_callback(void) { THE_key_callback(TK_q, 0); };
00234 static void CALLBACK TK_r_callback(void) { THE_key_callback(TK_r, 0); };
00235 static void CALLBACK TK_s_callback(void) { THE_key_callback(TK_s, 0); };
00236 static void CALLBACK TK_t_callback(void) { THE_key_callback(TK_t, 0); };
00237 static void CALLBACK TK_u_callback(void) { THE_key_callback(TK_u, 0); };
00238 static void CALLBACK TK_v_callback(void) { THE_key_callback(TK_v, 0); };
00239 static void CALLBACK TK_w_callback(void) { THE_key_callback(TK_w, 0); };
00240 static void CALLBACK TK_x_callback(void) { THE_key_callback(TK_x, 0); };
00241 static void CALLBACK TK_y_callback(void) { THE_key_callback(TK_y, 0); };
00242 static void CALLBACK TK_z_callback(void) { THE_key_callback(TK_z, 0); };
00243 static void CALLBACK TK_0_callback(void) { THE_key_callback(TK_0, 0); };
00244 static void CALLBACK TK_1_callback(void) { THE_key_callback(TK_1, 0); };
00245 static void CALLBACK TK_2_callback(void) { THE_key_callback(TK_2, 0); };
00246 static void CALLBACK TK_3_callback(void) { THE_key_callback(TK_3, 0); };
00247 static void CALLBACK TK_4_callback(void) { THE_key_callback(TK_4, 0); };
00248 static void CALLBACK TK_5_callback(void) { THE_key_callback(TK_5, 0); };
00249 static void CALLBACK TK_6_callback(void) { THE_key_callback(TK_6, 0); };
00250 static void CALLBACK TK_7_callback(void) { THE_key_callback(TK_7, 0); };
00251 static void CALLBACK TK_8_callback(void) { THE_key_callback(TK_8, 0); };
00252 static void CALLBACK TK_9_callback(void) { THE_key_callback(TK_9, 0); };
00253 
00254 #ifdef TK_ENABLED
00255 void
00256 tkKeyDownFunc(GLenum (*tk_key_callback)(int,GLenum))
00257 {
00258     THE_key_callback = tk_key_callback;
00259     auxKeyFunc(TK_RETURN, TK_RETURN_callback);
00260     auxKeyFunc(TK_ESCAPE, TK_ESCAPE_callback);
00261     auxKeyFunc(TK_SPACE, TK_SPACE_callback);
00262     auxKeyFunc(TK_LEFT, TK_LEFT_callback);
00263     auxKeyFunc(TK_UP, TK_UP_callback);
00264     auxKeyFunc(TK_RIGHT, TK_RIGHT_callback);
00265     auxKeyFunc(TK_DOWN, TK_DOWN_callback);
00266     auxKeyFunc(TK_A, TK_A_callback);
00267     auxKeyFunc(TK_B, TK_B_callback);
00268     auxKeyFunc(TK_C, TK_C_callback);
00269     auxKeyFunc(TK_D, TK_D_callback);
00270     auxKeyFunc(TK_E, TK_E_callback);
00271     auxKeyFunc(TK_F, TK_F_callback);
00272     auxKeyFunc(TK_G, TK_G_callback);
00273     auxKeyFunc(TK_H, TK_H_callback);
00274     auxKeyFunc(TK_I, TK_I_callback);
00275     auxKeyFunc(TK_J, TK_J_callback);
00276     auxKeyFunc(TK_K, TK_K_callback);
00277     auxKeyFunc(TK_L, TK_L_callback);
00278     auxKeyFunc(TK_M, TK_M_callback);
00279     auxKeyFunc(TK_N, TK_N_callback);
00280     auxKeyFunc(TK_O, TK_O_callback);
00281     auxKeyFunc(TK_P, TK_P_callback);
00282     auxKeyFunc(TK_Q, TK_Q_callback);
00283     auxKeyFunc(TK_R, TK_R_callback);
00284     auxKeyFunc(TK_S, TK_S_callback);
00285     auxKeyFunc(TK_T, TK_T_callback);
00286     auxKeyFunc(TK_U, TK_U_callback);
00287     auxKeyFunc(TK_V, TK_V_callback);
00288     auxKeyFunc(TK_W, TK_W_callback);
00289     auxKeyFunc(TK_X, TK_X_callback);
00290     auxKeyFunc(TK_Y, TK_Y_callback);
00291     auxKeyFunc(TK_Z, TK_Z_callback);
00292     auxKeyFunc(TK_a, TK_a_callback);
00293     auxKeyFunc(TK_b, TK_b_callback);
00294     auxKeyFunc(TK_c, TK_c_callback);
00295     auxKeyFunc(TK_d, TK_d_callback);
00296     auxKeyFunc(TK_e, TK_e_callback);
00297     auxKeyFunc(TK_f, TK_f_callback);
00298     auxKeyFunc(TK_g, TK_g_callback);
00299     auxKeyFunc(TK_h, TK_h_callback);
00300     auxKeyFunc(TK_i, TK_i_callback);
00301     auxKeyFunc(TK_j, TK_j_callback);
00302     auxKeyFunc(TK_k, TK_k_callback);
00303     auxKeyFunc(TK_l, TK_l_callback);
00304     auxKeyFunc(TK_m, TK_m_callback);
00305     auxKeyFunc(TK_n, TK_n_callback);
00306     auxKeyFunc(TK_o, TK_o_callback);
00307     auxKeyFunc(TK_p, TK_p_callback);
00308     auxKeyFunc(TK_q, TK_q_callback);
00309     auxKeyFunc(TK_r, TK_r_callback);
00310     auxKeyFunc(TK_s, TK_s_callback);
00311     auxKeyFunc(TK_t, TK_t_callback);
00312     auxKeyFunc(TK_u, TK_u_callback);
00313     auxKeyFunc(TK_v, TK_v_callback);
00314     auxKeyFunc(TK_w, TK_w_callback);
00315     auxKeyFunc(TK_x, TK_x_callback);
00316     auxKeyFunc(TK_y, TK_y_callback);
00317     auxKeyFunc(TK_z, TK_z_callback);
00318     auxKeyFunc(TK_0, TK_0_callback);
00319     auxKeyFunc(TK_1, TK_1_callback);
00320     auxKeyFunc(TK_2, TK_2_callback);
00321     auxKeyFunc(TK_3, TK_3_callback);
00322     auxKeyFunc(TK_4, TK_4_callback);
00323     auxKeyFunc(TK_5, TK_5_callback);
00324     auxKeyFunc(TK_6, TK_6_callback);
00325     auxKeyFunc(TK_7, TK_7_callback);
00326     auxKeyFunc(TK_8, TK_8_callback);
00327     auxKeyFunc(TK_9, TK_9_callback);
00328 }
00329 #endif
00330 
00331 GLenum (*THE_locatorup_callback)(int, int, GLenum);
00332 GLenum (*THE_locatordown_callback)(int, int, GLenum);
00333 GLenum (*THE_locatormove_callback)(int, int, GLenum);
00334 
00335 static void CALLBACK
00336 JED_idle()
00337 {
00338     THE_idle_callback();
00339 }
00340 
00341 static void CALLBACK
00342 JED_locatorup(AUX_EVENTREC *e)
00343 {
00344     THE_locatorup_callback(e->data[AUX_MOUSEX], e->data[AUX_MOUSEY], 
00345                                                  e->data[AUX_MOUSESTATUS]);
00346 }
00347 
00348 static void CALLBACK
00349 JED_locatordown(AUX_EVENTREC *e)
00350 {
00351     THE_locatordown_callback(e->data[AUX_MOUSEX], e->data[AUX_MOUSEY], 
00352                                                  e->data[AUX_MOUSESTATUS]);
00353 }
00354 
00355 static void CALLBACK
00356 JED_locatormove(AUX_EVENTREC *e)
00357 {
00358     THE_locatormove_callback(e->data[AUX_MOUSEX], e->data[AUX_MOUSEY], 
00359                                                  e->data[AUX_MOUSESTATUS]);
00360 }
00361 
00362 #ifdef TK_ENABLED
00363 void
00364 tkMouseUpFunc(GLenum (*locator_callback)(int, int, GLenum))
00365 {
00366     THE_locatorup_callback = locator_callback;
00367     auxMouseFunc(AUX_LEFTBUTTON, AUX_MOUSEUP, JED_locatorup);
00368     auxMouseFunc(AUX_MIDDLEBUTTON, AUX_MOUSEUP, JED_locatorup);
00369     auxMouseFunc(AUX_RIGHTBUTTON, AUX_MOUSEUP, JED_locatorup);
00370 }
00371 
00372 void
00373 tkMouseDownFunc(GLenum (*locator_callback)(int, int, GLenum))
00374 {
00375     THE_locatordown_callback = locator_callback;
00376     auxMouseFunc(AUX_LEFTBUTTON, AUX_MOUSEDOWN, JED_locatordown);
00377     auxMouseFunc(AUX_MIDDLEBUTTON, AUX_MOUSEDOWN, JED_locatordown);
00378     auxMouseFunc(AUX_RIGHTBUTTON, AUX_MOUSEDOWN, JED_locatordown);
00379 }
00380 
00381 void
00382 tkMouseMoveFunc(GLenum (*locator_callback)(int, int, GLenum))
00383 {
00384     THE_locatormove_callback = locator_callback;
00385     auxMouseFunc(AUX_LEFTBUTTON, AUX_MOUSELOC, JED_locatormove);
00386     auxMouseFunc(AUX_MIDDLEBUTTON, AUX_MOUSELOC, JED_locatormove);
00387     auxMouseFunc(AUX_RIGHTBUTTON, AUX_MOUSELOC, JED_locatormove);
00388 }
00389 
00390 
00391 void
00392 tkIdleFunc(void (*idle_callback)(void))
00393 {
00394     THE_idle_callback = idle_callback;
00395     auxIdleFunc(JED_idle);
00396 }
00397 #endif
00398 
00399 //===========================================================================
00400 
00401 #endif // PLATAFORMA == i386_WIN32_VC
00402 

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.