Download document (10.35 MB) - Escuela Superior de Informática ...

Download document (10.35 MB) - Escuela Superior de Informática ... Download document (10.35 MB) - Escuela Superior de Informática ...

11.07.2015 Views

152 Capítulo D. Código fuente233 int i;234 int frameactual;235236 if (ficheroMARCAS!=NULL) {237238 /* Localizamos los widgets que vamos a usar... */239 hscale_frame = glade_xml_get_widget (gxml, "hscale_frame");240 frameactual = (int) gtk_range_get_value (GTK_RANGE (hscale_frame));241242 glClearColor( .0f, .0f, .0f, 1.0f );243244 glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );245246 /* Ajustamos la matriz del mundo */247 calculaVistaModelo();248249 // Pintamos la caja250 dibujaCaja();251252253 if(posicion3D == VISTA_BRAZOS)254 {255 // Pintamos las marcas256 glEnable(GL_LIGHTING);257 for (i=0; i

D.2. Código fuente de los módulos más relevantes. 153293 }294 }295296 /*******************************************************************297 * Funcion: iniciar_gl298 * Descripcion: Inicializa los parametros relacionados con el widget299 * de OpenGL300 * Entradas: widget --> Puntero al widget GtkGlExt301 * data --> Puntero con los datos de los como parametros302 * Salidas: Ninguna.303 ********************************************************************/304 void iniciar_gl (GtkWidget *widget, gpointer data) {305306 caracter = 0;307 GdkGLContext *glcontext = gtk_widget_get_gl_context (widget);308 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget);309310 static GLfloat light0_ambient[] = {0.2f, 0.2f, 0.2f, 1.0f};311 static GLfloat light0_diffuse[] = {.8f, .8f, 0.8f, 1.0f};312 static GLfloat light0_position[] = {1.0f, 1.0f, 1.0f, 0.0f};313314 /* Comienza la parte de OpenGL... */315 if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)){316 g_print ("*** ERROR: Problem with init GL\n");317 return;318 }319320 glEnable(GL_LIGHTING);321 glEnable(GL_LIGHT0);322323 glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient);324 glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);325 glLightfv(GL_LIGHT0, GL_POSITION, light0_position);326327 /* Activamos el zbuffer */328 glEnable(GL_DEPTH_TEST);329 glDepthFunc(GL_LEQUAL); /* Tipo de test de profundidad */330 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);331332 glEnable(GL_COLOR_MATERIAL);333 glColorMaterial (GL_FRONT, GL_AMBIENT_AND_DIFFUSE);334335 gdk_gl_drawable_gl_end (gldrawable);336 }337338 /*******************************************************************339 * Funcion: reescalar_gl340 * Descripcion: Manejador del evento de reescalado del Widget341 * Entradas: widget --> Puntero al widget GtkGlExt342 * event --> Puntero con caracteristicas del evento343 * data --> Puntero con los datos de los parametros344 * Salidas: Devuelve TRUE si no se produjo error.345 *******************************************************************/346 gboolean reescalar_gl (GtkWidget *widget, GdkEventConfigure *event,347 gpointer data)348 {349 GdkGLContext *glcontext = gtk_widget_get_gl_context (widget);350 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget);351352 gdk_gl_drawable_gl_begin (gldrawable, glcontext);

D.2. Código fuente <strong>de</strong> los módulos más relevantes. 153293 }294 }295296 /*******************************************************************297 * Funcion: iniciar_gl298 * Descripcion: Inicializa los parametros relacionados con el widget299 * <strong>de</strong> OpenGL300 * Entradas: widget --> Puntero al widget GtkGlExt301 * data --> Puntero con los datos <strong>de</strong> los como parametros302 * Salidas: Ninguna.303 ********************************************************************/304 void iniciar_gl (GtkWidget *widget, gpointer data) {305306 caracter = 0;307 GdkGLContext *glcontext = gtk_widget_get_gl_context (widget);308 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget);309310 static GLfloat light0_ambient[] = {0.2f, 0.2f, 0.2f, 1.0f};311 static GLfloat light0_diffuse[] = {.8f, .8f, 0.8f, 1.0f};312 static GLfloat light0_position[] = {1.0f, 1.0f, 1.0f, 0.0f};313314 /* Comienza la parte <strong>de</strong> OpenGL... */315 if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)){316 g_print ("*** ERROR: Problem with init GL\n");317 return;318 }319320 glEnable(GL_LIGHTING);321 glEnable(GL_LIGHT0);322323 glLightfv(GL_LIGHT0, GL_A<strong>MB</strong>IENT, light0_ambient);324 glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);325 glLightfv(GL_LIGHT0, GL_POSITION, light0_position);326327 /* Activamos el zbuffer */328 glEnable(GL_DEPTH_TEST);329 glDepthFunc(GL_LEQUAL); /* Tipo <strong>de</strong> test <strong>de</strong> profundidad */330 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);331332 glEnable(GL_COLOR_MATERIAL);333 glColorMaterial (GL_FRONT, GL_A<strong>MB</strong>IENT_AND_DIFFUSE);334335 gdk_gl_drawable_gl_end (gldrawable);336 }337338 /*******************************************************************339 * Funcion: reescalar_gl340 * Descripcion: Manejador <strong>de</strong>l evento <strong>de</strong> reescalado <strong>de</strong>l Widget341 * Entradas: widget --> Puntero al widget GtkGlExt342 * event --> Puntero con caracteristicas <strong>de</strong>l evento343 * data --> Puntero con los datos <strong>de</strong> los parametros344 * Salidas: Devuelve TRUE si no se produjo error.345 *******************************************************************/346 gboolean reescalar_gl (GtkWidget *widget, GdkEventConfigure *event,347 gpointer data)348 {349 GdkGLContext *glcontext = gtk_widget_get_gl_context (widget);350 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget);351352 gdk_gl_drawable_gl_begin (gldrawable, glcontext);

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!