Beispiel #1
0
void igvInterfaz::set_glutReshapeFunc(int w, int h) {
	// dimensiona el viewport al nuevo ancho y alto de la ventana
	// guardamos valores nuevos de la ventana de visualizacion
	interfaz.set_ancho_ventana(w);
	interfaz.set_alto_ventana(h);

	// establece los parámetros de la cámara y de la proyección
	interfaz.camara.aplicar();
}
Beispiel #2
0
void igvInterfaz::set_glutKeyboardFunc(unsigned char key, int x, int y) {
	switch (key) {
		case 27: // tecla de escape para SALIR
			exit(1);
			break;
		case 'v':
			interfaz.setVSync(!interfaz.vsync);
			interfaz.vsync = !interfaz.vsync;
			break;
		case 'a':
			if (interfaz.animacion) {
				interfaz.animacion = false;
				interfaz.escena->parar_anumacion_esculturas();
				interfaz.escena_secundaria->parar_anumacion_esculturas();
			}
			else interfaz.animacion = true;
			break;
		case 'l':
			interfaz.escena->setModoLadron(!interfaz.escena->isModoLadron());
			interfaz.escena->setSeleccion(-1);
			interfaz.objeto_seleccionado = -1;
			break;
	}
	glutPostRedisplay(); // renueva el contenido de la ventana de vision
}
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
}
Beispiel #4
0
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();
	}

}