void igvInterfaz::set_glutDisplayFunc() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // borra la ventana y el z-buffer // se establece el viewport //ponemos los parámetros para el viewport int x0, y0, ancho, alto; if (modoPanoramico) { x0 = 0; y0 = (interfaz.get_alto_ventana() - interfaz.get_ancho_ventana() * 9 / 16) / 2; ancho = interfaz.get_ancho_ventana(); alto = interfaz.get_ancho_ventana() * 9 / 16; } else { x0 = y0 = 0; ancho = interfaz.get_alto_ventana(); alto = interfaz.get_alto_ventana(); } //establecemos los viewports que correspondan if (numViewports == 1) glViewport(x0, y0, ancho, alto); else if (numViewports == 4) { glViewport(x0, y0, ancho / 2, alto / 2); interfaz.camara.set(vistas[2][0], interfaz.camara.r, vistas[2][1]); interfaz.camara.aplicar(); interfaz.escena.visualizar(); glViewport(x0, y0 + alto / 2, ancho / 2, alto / 2); interfaz.camara.set(vistas[0][0], interfaz.camara.r, vistas[0][1]); interfaz.camara.aplicar(); interfaz.escena.visualizar(); glViewport(x0 + ancho / 2, y0 + alto / 2, ancho / 2, alto / 2); interfaz.camara.set(vistas[3][0], interfaz.camara.r, vistas[3][1]); interfaz.camara.aplicar(); interfaz.escena.visualizar(); glViewport(x0 + ancho / 2, y0, ancho / 2, alto / 2); interfaz.camara.set(vistas[1][0], interfaz.camara.r, vistas[1][1]); interfaz.camara.aplicar(); } //visualiza la escena interfaz.escena.visualizar(); // refresca la ventana glutSwapBuffers(); // se utiliza, en vez de glFlush(), para evitar el parpadeo }
void igvInterfaz::set_glutDisplayFunc() { GLuint lista_impactos[1024]; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // borra la ventana y el z-buffer if (interfaz.objeto_seleccionado == -1) { glDisable(GL_LIGHT0); glDisable(GL_LIGHT1); glDisable(GL_LIGHT2); glDisable(GL_LIGHT3); glDisable(GL_LIGHT4); glDisable(GL_LIGHT5); glDisable(GL_LIGHT6); glDisable(GL_LIGHT7); interfaz.pintar_minimapa(); } glViewport(0, 0, interfaz.get_ancho_ventana(), interfaz.get_alto_ventana()); if (interfaz.modo == IGV_SELECCIONAR) interfaz.inicia_seleccion(1024,lista_impactos); if (interfaz.escena->getSeleccion() >= 0) { interfaz.camara_secundaria.aplicar(); /* Escultura */ if (interfaz.objeto_seleccionado >= 0 && interfaz.objeto_seleccionado < 10000) { cout << interfaz.objeto_seleccionado << endl; igvFuenteLuz luz_fija(GL_LIGHT0, igvPunto3D(1,1,3), igvColor(1,1,1,1), igvColor(1,1,1,1), igvColor(1,1,1,1), 1, 0, 0, igvPunto3D(0,0,-1), 90, 5); luz_fija.encender(); luz_fija.aplicar(); interfaz.escena_secundaria->pintar_escultura(interfaz.escena->getSeleccion(), 1,1,1); } /* Cuadro */ else if (interfaz.objeto_seleccionado >= 10000 && interfaz.objeto_seleccionado < 20000) { igvFuenteLuz luz_fija(GL_LIGHT0, igvPunto3D(1,1,3), igvColor(1,1,1,1), igvColor(1,1,1,1), igvColor(1,1,1,1), 1, 0, 0, igvPunto3D(0,0,-1), 90, 5); luz_fija.encender(); luz_fija.aplicar(); interfaz.escena_secundaria->pintar_cuadro(interfaz.escena->getSeleccion()%10000, 1,1,1, 0,0,1); } /* Botón */ else if (interfaz.objeto_seleccionado >= 20000 && interfaz.objeto_seleccionado < 30000) { interfaz.escena->setModoLadron(!interfaz.escena->isModoLadron()); interfaz.escena->setSeleccion(-1); interfaz.objeto_seleccionado = -1; interfaz.set_glutDisplayFunc(); } /* Puerta */ else { interfaz.puerta_activa = interfaz.objeto_seleccionado%10000; interfaz.abriendo_puerta = !interfaz.abriendo_puerta; interfaz.escena->setSeleccion(-1); interfaz.objeto_seleccionado = -1; interfaz.set_glutDisplayFunc(); } } else { interfaz.camara.aplicar(); interfaz.escena->visualizar(); } if (interfaz.modo == IGV_SELECCIONAR) interfaz.finaliza_seleccion(1024,lista_impactos); else { /* Pintar el punto de mira */ glViewport(interfaz.ancho_ventana/2-10, interfaz.alto_ventana/2-10, 20, 20); igvCamara c; c.set(IGV_PARALELA, igvPunto3D(0,0,1),igvPunto3D(0,0,-1),igvPunto3D(0,1,0), -1,1.5, -1,1.5, -3, 3); c.aplicar(); GLfloat verde[]={0,1,0,1.0}; glMaterialfv(GL_FRONT, GL_EMISSION, verde); glBegin(GL_LINES); glVertex3f(-1,0,0); glVertex3f(1,0,0); glVertex3f(0,-1,0); glVertex3f(0,1,0); glEnd(); glutSwapBuffers(); } }