Esempio n. 1
0
void igvInterfaz::crear_mundo(void) {
	/* Crear la escena */
	cout << "Creando escena principal..." << endl;
	escena = new Escena();
	cout << "\nCreando escena secundaria..." << endl;
	escena_secundaria = new Escena();
	cout << "--------------------------------------\nMuseo creado correctamente" << endl;
	/* Crear cámaras */
	float v[] = {5,1,2};
	float v2[] = {5,1,1};
	interfaz.camara.set(IGV_PERSPECTIVA, igvPunto3D(v2[0],v2[1],v2[2]),igvPunto3D(v[0],v[1],v[2]),igvPunto3D(0,1.0,0),
		                                45, 1.78, 0.001, 200);
	interfaz.camara_secundaria.set(IGV_PARALELA, igvPunto3D(1,1,5),igvPunto3D(1,1,1),igvPunto3D(0,1.0,0),
		                                2*-0.8, 2*0.8, 2*-0.45, 2*0.45, -3, 200);

	/* Calculo el ángulo de visión */
	float vector[] = {v[0]-v2[0], v[1]-v2[1], v[2]-v2[2]};
	float prodesc = vector[0]*-1 + vector[1]*0 + vector[2]*0;
	float modulos = sqrt(vector[0]*vector[0] + vector[1]*vector[1] + vector[2]*vector[2]) * 1;
	float coseno = prodesc / modulos;
	
	angulo_vision =  - acos(coseno) * 180/PI;

	glutSetCursor(GLUT_CURSOR_NONE);

	vsync = true;
	setVSync(vsync);
}
void igvInterfaz::crear_mundo(void) {
// crear cámaras
	interfaz.camara.set(IGV_PARALELA,
			igvPunto3D(3.0 * FACTOR_ESCALA, 2.0 * FACTOR_ESCALA,
					4.0 * FACTOR_ESCALA), igvPunto3D(0, 0, 0),
			igvPunto3D(0, 1.0, 0), -1 * 3, 1 * 3, -1 * 3, 1 * 3, -1 * 3, 200);
	camara.znear = camara.P0[2] - 1;
}
Esempio n. 3
0
void igvInterfaz::pintar_minimapa() {

	int ancho_museo = interfaz.escena->museo.getAncho(),
		alto_museo = interfaz.escena->museo.getAlto();

	/* Creamos un viewport para el mapilla */
	glViewport(interfaz.ancho_ventana-(ancho_museo*10),0, ancho_museo*10, alto_museo*10);

	/* Creamos una cámara para ver el mapa desde el frente */
	igvCamara c;
	c.set(IGV_PARALELA, igvPunto3D(0,0,1),igvPunto3D(0,0,0),igvPunto3D(0,1.0,0), -1, ancho_museo, -1, alto_museo, -3, 5);
	c.aplicar();

	/* Pintamos el mapa */
	glDisable(GL_TEXTURE_2D);
	GLfloat blanco[] = {1,1,1,1};
	GLfloat verde[] = {0,0.5,0,0.5};
	GLfloat rojo[] = {0.5,0,0,0.5};
	GLfloat amarillo[] = {1,1,0,0.5};

	glPointSize(10);
	glBegin(GL_POINTS);
		glMaterialfv(GL_FRONT,GL_EMISSION,rojo);
		glNormal3f(0,1,0);
		glVertex3f(ancho_museo-interfaz.camara.P0[0],interfaz.camara.P0[2],0);
		for (int i=0; i<ancho_museo; ++i) {
			for (int j=0; j<alto_museo; ++j) {
				if (interfaz.escena->museo(ancho_museo-1-i,j) == LIBRE || interfaz.escena->museo(ancho_museo-1-i, j) >= HAB_1) {
					glMaterialfv(GL_FRONT,GL_EMISSION,verde);
					glVertex3f(i,j,0);
				}
				else if (interfaz.escena->museo(ancho_museo-1-i, j) == PUERTA_CERRADA || interfaz.escena->museo(ancho_museo-1-i, j) == PUERTA_ABIERTA) {
					glMaterialfv(GL_FRONT,GL_EMISSION,amarillo);
					glVertex3f(i,j,0);
				}
				else {
					glMaterialfv(GL_FRONT,GL_EMISSION,blanco);
					glVertex3f(i,j,0);
				}
			}
		}
	glEnd();

}
void igvInterfaz::inicializarVistas() {
	igvInterfaz::vistas[0][0] = igvPunto3D(3, 2, 4); //perspectiva
	igvInterfaz::vistas[1][0] = igvPunto3D(0, 0, 6); //perfil
	igvInterfaz::vistas[2][0] = igvPunto3D(6, 0, 0); //alzado
	igvInterfaz::vistas[3][0] = igvPunto3D(0, 6, 0); //planta

	igvInterfaz::vistas[0][1] = igvInterfaz::vistas[1][1] =
			igvInterfaz::vistas[2][1] = igvPunto3D(0, 1, 0);
	igvInterfaz::vistas[3][1] = igvPunto3D(1, 0, 0);
}
Esempio n. 5
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();
	}

}