Пример #1
0
void Escena::proyeccionOblicua()
{
    m_proyeccion = Camara::Oblicua;
    Camara *ant = m_camara;
    m_camara = new Camara(ant->getEye(), ant->getLook(), ant->getUp(), m_proyeccion);
    delete ant;
}
Пример #2
0
void Escena::proyeccionPerspectiva()
{
    m_proyeccion = Camara::Perspectiva;
    Camara *ant = m_camara;
    m_camara = new Camara(ant->getEye(), ant->getLook(), ant->getUp(), m_proyeccion);
    delete ant;
}
Пример #3
0
void Escena::proyeccionOrtogonal()
{
    m_proyeccion = Camara::Ortogonal;
    Camara *ant = m_camara;
    m_camara = new Camara(ant->getEye(), ant->getLook(), ant->getUp(), m_proyeccion);
    delete ant;
}
Пример #4
0
void RepMapCub::dibujar(Camara& cam,Luz& l){
  sha->bind();
  ShaBasic::setProjMat(*sha,cam.getMatProy());
  ShaBasic::setViewMat(*sha,cam.getMatVista());
  ShaBasic::setViewMatInv(*sha,inverse(cam.getMatVista()));

  ShaBasic::setVecVista(*sha,cam.getOrientacion());
  ShaBasic::setVecLuz(*sha,l.pos);
  ShaTexture::setTexColor(*sha,*tex);
// cout<<"tam("<<mapa.getTamX()<<","<<mapa.getTamY()<<","<<mapa.getTamZ()<<")"<<endl;
  for(int x=cam.pos.x-20;x<cam.pos.x+20;x++){
     for(int y=cam.pos.y-20;y<cam.pos.y+20;y++){
//  for(int x=0;x<mapa.getTamX();x++){
  //   for(int y=0;y<mapa.getTamY();y++){
         for(int z=0;z<mapa.getTamZ();z++){
             if(mapa.enRango(x,y,z)){
                 Voxel& v=mapa.getVoxel(x,y,z);
                 if(v.borde){
        //               cout<<"dibujado"<<endl;
                     mat4 mat=translate(mat4(1.0),vec3(x,y,z));
        //                 mat=translate(mat4(1.0),vec3(100,10,10));
                     ShaBasic::setModelMat(*sha,mat);
                     ShaBasic::setNormalMat(*sha,transpose(inverse(mat)));
                     meshCubo->dibujar();
                 }
             }
          }
     }
    }
}
Пример #5
0
int main()
{
    int c;
    target=imread("../archivos/pozo_real_big.png",CV_32FC3);
    target.convertTo(target,CV_32FC3,1.0/255);

    fuente.initSpectrum(DEFAULT_START_LAMDA,DEFAULT_END_LAMDA,1000);
	fuente.setGausian(1,LAMDA_0,10e-9);
	muestra.initMuestra(163e-6,163e-6,7.030674847e6);
	muestra.setMuestraPlain(1,IN_VISIBILITY);
    muestra.setMuestraFromFile("../archivos/pozo.png",1,IN_DEPTH,0,0);
	if (camara.setSpectrumsFiles("../archivos/r1.dat","../archivos/g1.dat","../archivos/b1.dat")){
        return -1;
	};
    camara.initFPS(1146,1146,30,COLOR);
	interf.initInterferometro(&muestra,&fuente,&camara,camara.exposureTime());




    srand ( time(NULL) );
	ag.PoblacionAleatoria(10,nBytes); //creo una poblacion de 200 individuos, de longitud 'nBytes' cada string
	ag.FuncionEvaluacion(eval); //defino cual es la funcion que evalua cada cromosoma y devuelve el fitnes entre 0 y 1 (Es llamada automaticamante por al AG
    ag.dTasaMutacion = 0.05; //tasa de mutacion de 0 a 1
    CLASECromosoma *ap,alfa,beta;

    while(1) {
         imshow("target",target);
        c = cvWaitKey(2);
        if ((char)c==27){
            break;
        }
    }
    printf("comienza\n");
    do {
 		ag.Generacion(); //creo una nueva generacion de individuos
    	ap = ag.SeleccionarMejor();
        if (!(ag.Edad()%1)) {//cada 500 iteraciones muestre la mejor solucion
            printf ("\n[%d] ",(int)ag.Edad());
            printf ("Best: %.3f\tPob:%.3f",ap->Fitness(),ag.Fitness());
            imshow("eval",getImg(ap->Cromosoma));
        }
        c = cvWaitKey(2);
        if ((char)c==27){
            break;
        }
    } while (ap->Fitness()<0.9 && (ag.Edad()<10000)); //condicion de parada el fitness de la mejor solucion
    printf ("\n\tGen: %d",(int)ag.Edad()); //imprimo la edad de la poblacion: numero de iteraciones totales ejecutadas (generaciones)
    for (;;) {
        c = cvWaitKey(2);
        if ((char)c==27){
            break;
        }
    }
    return 0;
}
Пример #6
0
int main(){ 
    
    sf::RenderWindow window(sf::VideoMode(1066, 600), "Presidentum!"); 
     sf::Event event;
    sf::Texture texture;
    if(!texture.loadFromFile("resources/background.jpg")){
        std::cerr<<"error al cargar el background";
        exit(0);
    }
    sf::Sprite sprite;
    sprite.setTexture(texture);
    std::cout<<"sprite cargado"<<std::endl;
    window.setVerticalSyncEnabled(true); //Para evitar cortes en los refrescos
    window.setFramerateLimit(60);	//Establecemos maximo real de procesamiento (aunque trabajamos con 60)
    Jugador* player = new Jugador(200, 340, 2, true);//le pasamos la posicion X e Y donde se colocará el sprite. 
                                                    //El tercer parametro es que personaje es, solo puede ser hasta el 4. 1.Pablo 2.Albert 3.Rajoy 4.Pedro
                                                    //El cuarto parametro es para saber si está activado el personaje en el array de personajes ya que solo un personaje se puede mostrar.
    //player->leerXML();//PREGUNTA    ¿es mejor que la matriz deonde se guardan los datos del psrite sheet sea global de la clase Juego o que cada jugador tenga su propia matriz aunque sea la misma?

    Mapa *mapa = new Mapa();
    mapa->leerMapa(1);
    Camara* camara = new Camara(window.getSize().x, window.getSize().y, kVel, *mapa);
    Enemigo* enemigo = new Enemigo(500, 340, 2, true, true);
    
   
    while(window.isOpen()){
    
        window.clear(sf::Color::White);
        
        mapa->dibujaA(window);
        
        player->draw(window);
        
        enemigo->draw(window);
        enemigo->update();
        
        player->handle(event, window, mapa, camara);
        //enemigo->handle(event, window, mapa, camara);
        
    
        
        while (window.pollEvent(event)){  
            switch(event.type){     
                case sf::Event::Closed:
                    window.close();
                    break;       
            }
        }
    camara->draw(window);
    window.display();
        
    }
    
    return 0;
    
}
Пример #7
0
void RepEnt::dibujar(Entidad* ent,Camara& cam,Luz& l){
  sha->bind();
  ShaBasic::setProjMat(*sha,cam.getMatProy());
  ShaBasic::setViewMat(*sha,cam.getMatVista());
  ShaBasic::setViewMatInv(*sha,inverse(cam.getMatVista()));
  ShaBasic::setModelMat(*sha,ent->getMatModelo());
  ShaBasic::setNormalMat(*sha,transpose(inverse(ent->getMatModelo())));
  ShaBasic::setVecVista(*sha,cam.getOrientacion());
  ShaBasic::setVecLuz(*sha,l.pos);
  if(tex.get()!=nullptr)
      ShaTexture::setTexColor(*sha,*tex);
  mesh->dibujar();
 // cout<<"dibujando"<<endl;

};
void displayCube(Camara &cam, Transformacion marco){
//Dibuja la foto de un Cubo con la cam y la pone en t

	Transformacion t = marco * cam.getview();

	glColor3f(0,0,1);

	Cubo c;
	c.drawWith(t);
}
void displayAxis(Camara &cam, Transformacion marco){
//Fotografía con la camara c y muestra en el marco

	Punto o = cam.shot(OR).transform(marco);
	Punto x = cam.shot(EX).transform(marco);
	Punto y = cam.shot(EY).transform(marco);
	Punto z = cam.shot(EZ).transform(marco);

	Flecha((x-o), Color::ROJO ).drawAt(o);
	Flecha((y-o), Color::VERDE).drawAt(o);
	Flecha((z-o), Color::AZUL ).drawAt(o);

	float x_color[] ={1.0,0.0,0.0,1.0};
	glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,x_color);
	Flecha((x-o)*3,Color::ROJO).drawAt(o);
	float y_color[] ={0.0,1.0,0.0,1.0};
	glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,y_color);
	Flecha((y-o)*3,Color::VERDE).drawAt(o);
	float z_color[] ={0.0,0.0,1.0,1.0};
	glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,z_color);
	Flecha((z-o)*3,Color::AZUL).drawAt(o);
}
Пример #10
0
Mat getImg(unsigned char *string){
	float gains[4];
	float copt;

    muestra.resDepth=LAMDA_0*crDecodificar16(string+2*0,0,10);
	muestra.resVisibility=1;//crDecodificar16(string+2*1,0,1);
    gains[0]=crDecodificar16(string+2*2,0,3);
    gains[1]=crDecodificar16(string+2*3,0,3);
    gains[2]=crDecodificar16(string+2*4,0,3);
    gains[3]=crDecodificar16(string+2*5,0,3);

    camara.gain=gains[0];
    camara.setChannelGain(gains[1],gains[2],gains[3]);
    interf.inclinacionX=crDecodificar16(string+2*6,-5e-6,5e-6);
    interf.inclinacionY=crDecodificar16(string+2*7,-5e-6,5e-6);
    copt=0;//;crDecodificar16(string+2*8,-10e-6,10e-6);
    interf.getInterferograma(copt);
    return interf.valores;

}
Пример #11
0
//Operadores
int Camara::operator== (Camara src){
/*
    int w =(param._width==src.width());
    int h =(param._height==src.height());
    int r =(param._roi==src.roi());
    int f =(param._fps==src.fps());
    int et=(param._exposureTime==src.exposureTime());
    int t =(param._tipo==src.tipo());
    int ft=(param._frameType==src.frameType());
    int tt=(param._transportTime==src.transportTime());
    int st=(param._shutterTime==src.shutterTime());
    int ff=(param._fromFiles==src.fromFiles());
    int fr=(param._redFile==src.redFile());
    int fg=(param._greenFile==src.greenFile());
    int fb=(param._blueFile==src.blueFile());
    int fw=(param._whiteFile==src.whiteFile());
    return (w && h && r && f && et && t && ft && tt && st && ff && fr && fg && fb && fw);
*/
    return (param==src.getParametros());
}
void displayTeapot(Camara &cam, Transformacion marco){
//Dibuja la foto de un Cubo con la cam y la pone en t

	// Transformacion de la camara
	Transformacion rotcam;
	Transformacion rotationx, rotationy;
	Punto newAT = AT;
	rotationx.rotX(rotationX);
	rotationy.rotY(rotationY);

	newAT = newAT.transform(rotationx);
	newAT = newAT.transform(rotationy);
	
	Punto vert = Punto(0.0, 1.0, 0.0);
	vert.transform(rotcam);

	canon.at(newAT);
	canon.lookAt(OR);
	canon.setVertical(vert.asVector());

	Punto newFR = FR;
	newFR = newFR.transform(rotationy);
	frontal.at(newFR);
	frontal.lookAt(OR);

	Punto newPE = PE;
	newPE = newPE.transform(rotationy);
	perfil.at(newPE);
	perfil.lookAt(OR);

	Punto newCE = CE;
	newCE = newCE.transform(rotationy);
	cenital.setVertical(newCE.asVector());
	
	rotationx.reset();
	rotationy.reset();


	Transformacion t = marco * cam.getview();
	
	//Dibujo de la tetera
	Transformacion rot; 
	rot.rotX(-90);
	Transformacion mov;
	mov.translation(Real4(0.0, -1.0, 0.0));

	
	for(int k=0;k<32;k++){
		S[k].getPoints(NVERT, sb);
		S[k].getTangents(NVERT, tgU, tgV);
		S[k].getNormals(NVERT, n);
	
		for(int i=0;i<NVERT*NVERT;i++){	
			sb[i] = sb[i].transform(rot).transform(mov);
			sb[i] =	cam.shot(sb[i]).transform(marco);	
		
			float sup_color[] = {0.5, 0.5, 0.5, 1.0}; //Gris
			glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sup_color);
		}

		if(inalambrico){
			for(int i=0;i<NVERT-1;i++){
				for(int j=0;j<NVERT-1;j++){			
					glBegin(GL_QUADS);
					glNormal3f(n[NVERT*i+j].x(),n[NVERT*i+j].y(),n[NVERT*i+j].z());
					glVertex3f(sb[NVERT*i+j].x(),sb[NVERT*i+j].y(),sb[NVERT*i+j].z());

					glNormal3f(n[NVERT*(i+1)+j].x(),n[NVERT*(i+1)+j].y(),n[NVERT*(i+1)+j].z());
					glVertex3f(sb[NVERT*(i+1)+j].x(),sb[NVERT*(i+1)+j].y(),sb[NVERT*(i+1)+j].z());

					glNormal3f(n[NVERT*(i+1)+(j+1)].x(),n[NVERT*(i+1)+(j+1)].y(),n[NVERT*(i+1)+(j+1)].z());
					glVertex3f(sb[NVERT*(i+1)+(j+1)].x(),sb[NVERT*(i+1)+(j+1)].y(),sb[NVERT*(i+1)+(j+1)].z());

					glNormal3f(n[NVERT*i+(j+1)].x(),n[NVERT*i+(j+1)].y(),n[NVERT*i+(j+1)].z());
					glVertex3f(sb[NVERT*i+(j+1)].x(),sb[NVERT*i+(j+1)].y(),sb[NVERT*i+(j+1)].z());

					glEnd();
				};	
			};
		}
		else{
			for(int i=0;i<NVERT;i++){
				glBegin(GL_LINE_STRIP);
					for(int j=0;j<NVERT;j++){
						glVertex3f( (GLfloat)((sb[i*NVERT+j]).x()),
									(GLfloat)((sb[i*NVERT+j]).y()),
									(GLfloat)((sb[i*NVERT+j]).z()));
					}
				glEnd();
			}
 			for(int i=0;i<NVERT;i++){
				glBegin(GL_LINE_STRIP);
					for(int j=0;j<NVERT;j++){
						glVertex3f( (GLfloat)((sb[i+j*NVERT]).x()),
									(GLfloat)((sb[i+j*NVERT]).y()),
									(GLfloat)((sb[i+j*NVERT]).z()));
					}
				glEnd();
			}	
		}
	}
}
Пример #13
0
void key(unsigned char key, int x, int y){
	bool need_redisplay = true;
	switch (key) {
		case 27:  /* Escape key */
			//continue_in_main_loop = false; // (**)
			//Freeglut's sentence for stopping glut's main loop (*)
			glutLeaveMainLoop (); 
		break;		 			 
		// ----------------
		
		 // linea de debug::: 	cout<< angleX << " "<< angleY << " " <<angleZ << " ";
		case 't': 
			escena->obRotate(5,0);
			break;
		case 'y': 
			escena->obRotate(-5,0);
			break;
		// ----------------
		case 'g':
			escena->obRotate(5,1);
			break;
		case 'h': 
			escena->obRotate(-5,1);
			break;
		// ----------------
		case 'b': 
			escena->obRotate(5,-1);
			break;
		case ',': 
			escena->obRotate(-5,-1);
			break;
		// ----------------
			
		// ------ Roll
		case 'u':
			acumRoll += 0.09;
			camera.roll(acumRoll);
			break;
		case 'i':
			acumRoll += -0.09;
			camera.roll(acumRoll);
			break;
		// ------ Yaw
		case 'j':
			acumYaw += 0.01;
			acumRoll = 0;
			acumPitch = 0;
			camera.yaw(acumYaw);
			break;
		case 'k':
			acumYaw += -0.01;
			acumRoll = 0;
			acumPitch = 0;
			camera.yaw(acumYaw);
			break;
		// ------ Pitch
		case 'n':
			acumPitch += 0.01;
			acumRoll = 0;
			acumYaw = 0;
			camera.pitch(acumPitch);
			break;
		case 'm':
			acumPitch += -0.01;
			acumRoll = 0;
			acumYaw = 0;
			camera.pitch(acumPitch);
			break;
		// ------ Recorrido X
		case 'e':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.recorridoEje(10.0,0.0,0.0);
			break;
		case 'r':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.recorridoEje(-10.0,0.0,0.0);
			break;
		// ------ Recorrido Y
		case 'd':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.recorridoEje(0.0,10.0,0.0);
			break;
		case 'f':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.recorridoEje(0.0,-10.0,0.0);
			break;
		// ------ Recorrido Z
		case 'c':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.recorridoEje(0.0,0.0,10.0);
			break;
		case 'v':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.recorridoEje(0.0,0.0,-10.0);
			break;
		// ------ Desplazar X
		case 'q':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.desplazar(2.0,0.0,0.0);
			break;
		case 'w':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.desplazar(-2.0,0.0,0.0);
			break;
		// ------ Desplazar Y
		case 'a':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.desplazar(0.0,2.0,0.0);
			break;
		case 's':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.desplazar(0.0,-2.0,0.0);
			break;
		// ------ Desplazar Z
		case 'z':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.desplazar(0.0,0.0,2.0);
			break;
		case 'x':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.desplazar(0.0,0.0,-2.0);
			break;
		// ------ Ortogonal
		case 'o':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.ortogonal(xLeft,xRight,yBot,yTop,N,F);
			break;
		// ------ Perspectiva
		case 'p':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.perspectiva(xLeft,xRight,yBot,yTop,N,F);
			break;
		// ------ Oblicua
		case 'l':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.oblicua(aux.clone(),xLeft,xRight,yBot,yTop,N,F);
			break;
		// ------ Gira X
		case '1':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.giraX(0.1);
			break;
		// ------ Gira Y
 		case '2':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.giraY(0.1);
			break;
		// ------ Gira Z
		case '3':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.giraZ(0.1);
			break;
		// ------ Vista Lateral
		case '4':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.lateral();
			break;
		// ------ Vista Frontal
		case '5':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.frontal();
			break;
		// ------ Vista Cenital
		case '6':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.cenital();
			break;
		// ------ Vista Esquina
		case '7':
			acumRoll = 0;
			acumPitch = 0;
			acumYaw = 0;
			camera.esquina();
			break;
		default:
			need_redisplay = false;
			cout<<key<<endl;
			break;
	}
	if (need_redisplay)
		glutPostRedisplay();
}
Пример #14
0
int main(){

    //clock_t begin,end;
	Mat img ;
	int c;
    Spectrum fuente;
    fuente.initSpectrum(1e-9,1001e-9,1001);
    //fuente.initSpectrum(DEFAULT_START_LAMDA,DEFAULT_END_LAMDA,10000);
    //fuente.setPlain(0.5e-9,1000e-9,2);        //Fuente plana todo el espectro
    double lamda=546e-9;
	fuente.setGausian(20,lamda,1e-9);       //Fuente Lab con Filtro Expectral
	//fuente.setDelta(200,lamda,0);       //Fuente Lab con Filtro Expectral
	//fuente.setDelta(10,632.8e-9,0);           //Laser He-Ne
	//fuente.setBlackbody(3000,1.18);


	Camara camara;
	Muestra muestra;
	//camara.initCamara(30,1/30,COLOR);

	//Pozo
/*
	muestra.initMuestra(163e-6,163e-6,7.030674847e6);
	muestra.setMuestraFromFile("../archivos/pozo.png",2.75e-6,IN_DEPTH,0,0);
	muestra.setMuestraPlain(1,IN_VISIBILITY);

*/
//Plano
	muestra.initMuestra(5e-3,5.e-3,100e3);
	muestra.setMuestraPlain(0,IN_DEPTH);
	muestra.setMuestraPlain(1,IN_VISIBILITY);


//	camara.initFPS(1146,1146,30,COLOR); //Pozo
	camara.initFPS(300,300,60,COLOR); //Plano
	if (camara.setSpectrumsFiles("../archivos/r1.dat","../archivos/g1.dat","../archivos/b1.dat")){
        return -1;
	};
    //camara.gain=2;
    camara.setChannelGain(1.5,1,1.392);


/*----------------------INICIO SOLO IMAGEN------------------------------*/
    //float fps=camara.fps();
    float exposureTime=camara.exposureTime();
	float timeStep=exposureTime/EXPOSURE_STEP;
    float notExposureTime=camara.getNotIntegrationTime();


	Interferometro interf;
	interf.initInterferometro(&muestra,&fuente,&camara,timeStep);
    interf.inclinacionX=1e-6;
    interf.inclinacionY=0e-6;
    float step=(lamda/2);
    float copt=0;
    namedWindow("simulador",CV_WINDOW_NORMAL | CV_WINDOW_KEEPRATIO |CV_GUI_EXPANDED);
    bool dibuja=true;
    //interf.getInterferograma(copt);
    //imshow( "simulador", interf.valores);
    Mat imgw;
    string filename;
    Ruido ruido;


    float rAmp=(00.0*M_PI/180.0)*(lamda/2.0)/(M_PI*2.0);
    //ruido.initRuido("../archivos/ruido2.txt",rAmp,1);
//    float rFreq=1;
    Mat im[5];
    Mat num,den,cosa;
    int imagen=0;
    float alpha;
    float fase;
    bool toma=false;
    int pasos=36;
    int veces=2;
    int p,v;
    float pi,dp;
    dp=10;
    pi=10;
    p=0;
    v=0;
    bool corre=false;
    bool video=false;
    char filename2[50];

    double tstep=interf.timeStep();
    double t=tstep;
    double tiempo=tstep;
    double ta=0;
    double r;
    int j=0;
   // bool exporta=false;
    while(1){

        c = cvWaitKey(2);
        if (c!=-1){

            cout << "c = "<<(int)((char)c)<<endl;
            switch ((char)c){
                case 81: //Izquierda
                    interf.inclinacionX-=step;
                    dibuja=true;
                  //  cout <<"incl(X,Y) = ("<<interf.inclinacionX << " , "<< interf.inclinacionY <<")"<<endl;
                    break;
                case 82: //Arriba
                    interf.inclinacionY+=step;
                    dibuja=true;
                    //cout <<"incl(X,Y) = ("<<interf.inclinacionX << " , "<< interf.inclinacionY <<")"<<endl;
                    break;
                case 83: //derecha
                    interf.inclinacionX+=step;
                    dibuja=true;
                    //cout <<"incl(X,Y) = ("<<interf.inclinacionX << " , "<< interf.inclinacionY <<")"<<endl;
                    break;
                case 84: //abajo
                    interf.inclinacionY-=step;
                    dibuja=true;
                    //cout <<"incl(X,Y) = ("<<interf.inclinacionX << " , "<< interf.inclinacionY <<")"<<endl;
                    break;
                case -85: //+
                    step+=1e-9;
                    cout<<"Step = "<<step<<endl;
                    break;
                case -83: //-
                    step-=1e-9;
                    cout<<"Step = "<<step<<endl;
                    break;
                case 114:   //R
                    step=10e-9;
                    dibuja=true;
                    interf.inclinacionX=6.1e-7;
                    interf.inclinacionY=-1.775e-6;
                    muestra.resDepth=3.375e-6;
                    camara.gain=4;
                    camara.offset=-0.1;
                    copt=-2.75e-7;
                    rAmp=9e-8;
                    //cout<<"Step = "<<step<<endl;
                    break;
        //Depth
                case 103:   //G
                    muestra.resDepth+=step;
                    dibuja=true;
                    break;
                case 98:    //B
                    muestra.resDepth-=step;
                    dibuja=true;
                    break;
        //Ganancia
                case 102:   //F
                    camara.gain+=0.1;
                    dibuja=true;
                    break;
                case 118:    //V
                    camara.gain-=0.1;
                    dibuja=true;
                    break;

        //Camino Optico
                case 97:   //A
                    copt+=step;
                    dibuja=true;
                    break;
                case 122:    //Z
                    copt-=step;
                    dibuja=true;
                    break;

        //Amp Ruido
                case 109:   //M
                    rAmp+=step;
                    dibuja=true;
                    break;
                case 110:    //N
                    rAmp-=step;
                    dibuja=true;
                    break;
        //Camara Offset
                case 46: //.
                    camara.offset+=0.05;
                    dibuja=true;
                    break;
                case 44: //,
                    camara.offset-=0.05;
                    dibuja=true;
                    break;

                case 115:

                    cout<<endl<<"Ingrese el nombre del archivo"<<endl;
                    cin>>filename;
                    interf.valores.convertTo(imgw,CV_16UC3,65535);

                    if(imwrite(filename,imgw)){
                        cout <<"Guardado satisfactorio"<<endl;
                    } else {
                        cout <<"Ha ocurrido un error al guardar"<<endl;
                    }
                    break;
                case 32: //espacio
                    corre=true;
                    cout<<endl<<"Ingrese el nombre del archivo de texto"<<endl;
                    cin>>filename;
                    break;

                case 10: //ENTER
                    video=!video;
                    break;
                default:
                    break;
            }
            if ((char)c==27 || (char)c==113){
                break;
            }

        }
        if (corre){
            if (v<veces){

                alpha=p*dp+pi;
                fase=(alpha*M_PI/180)*(lamda/2)/(M_PI*2);
                copt=(imagen-2)*fase;
                toma=true;
                dibuja=true;
                sprintf(filename2,"%s%.2f-%d-%d.txt",filename.c_str(),alpha,v,0);
            } else {
                p++;
                v=0;
            }
            if (p>=pasos){
                corre=false;
            }






        }

        if (dibuja || video){
            dibuja=false;



            while (1){
                r=ruido.getUnif(rAmp);
                if (t<exposureTime){
                    //r=ruido.getRuido(tiempo);//,rAmp,rFreq);

                    interf.integra(r,(t-ta)/tstep);
                    ta=t;
                    tiempo+=tstep;
                    t+=tstep;
                } else if(t>=exposureTime) {
                    //r=ruido.getRuido(tiempo-(t-exposureTime));//,rAmp,rFreq);
                    interf.integra(r,(exposureTime-ta)/tstep);
                    interf.getInterferograma(copt);
                    imshow( "simulador", interf.valores);

                    if (t>=(exposureTime+notExposureTime)){
                        tiempo=tiempo;
                        t=t-(exposureTime+notExposureTime);
                        ta=0;

                    } else {
                        float tnof=notExposureTime-(t-exposureTime);
                        int skipsteps=1+(int)(tnof/tstep);
                        tiempo+=tstep*skipsteps;
                        t=tstep*skipsteps-tnof;
                        ta=0;
                    }

                    j++;


                    if (toma){
                        if (imagen>=5){
                            num=im[4]-im[0];
                            den=2*(im[3]-im[1]);
                            cosa=num/den;
                            imagen=0;
                            FILE * pFile;
                            pFile = fopen (filename2,"w");
                            if (pFile!=NULL) {
                                float val[3];
                                for (int w=0;w<num.cols;w++){
                                    for (int h=0;h<num.rows;h++){
                                        val[0]=get2D32F(num,w,h,1);
                                        val[1]=get2D32F(den,w,h,1);
                                        val[2]=get2D32F(cosa,w,h,1);
                                        fprintf(pFile,"%.3f\t%.3f\t%.3f\n",val[0],val[1],val[2]);
                                    }
                                }
                                fclose (pFile);

                            } else {
                                cout << "Unable to open file";
                            }
                            v++;

                        } else {
                            interf.valores.copyTo(im[imagen]);
                            //interf.valores.convertTo(im[imagen],CV_8UC3,255);
                            imagen++;
                        }
                        toma=false;
                    }
                    break;

                }


            }
            cout<<"j = "<< j <<endl;
           // interf.getInterferograma(copt);
           // imshow( "simulador", interf.valores);
            cout<<endl<<"Listo"<<endl;
            cout<<"Gain: "<<camara.gain<<endl;
            cout<<"Offset: "<<camara.offset<<endl;
            cout<<"Incl X: "<<interf.inclinacionX<<endl;
            cout<<"Incl Y: "<<interf.inclinacionY<<endl;
            cout<<"Res Depth: "<<muestra.resDepth<<endl;
            cout<<"Camino Óptico: "<<copt<<endl;
            cout<<"Amplitud Ruido: "<<r<<endl;
            cout<<endl;
        }

    }
Пример #15
0
void key(unsigned char key, int x, int y){
	float angleLamp;

	bool need_redisplay = true;
	switch (key) {
		case 27:  /* Escape key */
			//continue_in_main_loop = false; // (**)
			//Freeglut's sentence for stopping glut's main loop (*)
			glutLeaveMainLoop (); 
			break;	

		/*case 'a': //Eje X
			angleX += 1.0;
			break;
		case 'z': //Eje X
			angleX -= 1.0;
			break;

		case 's': //Eje Y
			angleY += 1.0;
			break;
		case 'x': //Eje Y
			angleY -= 1.0;
			break;

		case 'd': //Eje Z
			angleZ += 1.0;
			break;
		case 'c': //Eje Z
			angleZ -= 1.0;
			break;*/
		case 'u': //roll
			camera.roll(0.09); //0.09 radianes = 5 grados
			break;
		case 'i':
			camera.roll(-0.09);
			break;

		case 'j': //yaw
			camera.yaw(0.01);
			break;
		case 'k':
			camera.yaw(-0.01);
			break;

		case 'n': //pitch
			camera.pitch(0.01);
			break;
		case 'm':
			camera.pitch(-0.01);
			break;

		case 'e': //Along axis X
			recorridoX = 10.0;
			recorridoY = 0.0;
			recorridoZ = 0.0;
			camera.recorridoEje(recorridoX, recorridoY, recorridoZ);
			break;
		case 'r':
			recorridoX = -10.0;
			recorridoY = 0.0;
			recorridoZ = 0.0;
			camera.recorridoEje(recorridoX, recorridoY, recorridoZ);
			break;

		case 'd': //Along axis Y
			recorridoY = 10.0;
			recorridoX = 0.0;
			recorridoZ = 0.0;
			camera.recorridoEje(recorridoX, recorridoY, recorridoZ);
			break;
		case 'f':
			recorridoY = -10.0;
			recorridoX = 0.0;
			recorridoZ = 0.0;
			camera.recorridoEje(recorridoX, recorridoY, recorridoZ);
			break;

		case 'c': //Along axis Z
			recorridoZ = 10.0;
			recorridoX = 0.0;
			recorridoY = 0.0;
			camera.recorridoEje(recorridoX, recorridoY, recorridoZ);
			break;
		case 'v':
			recorridoZ = -10.0;
			recorridoX = 0.0;
			recorridoY = 0.0;
			camera.recorridoEje(recorridoX, recorridoY, recorridoZ);
			break;

		case 's': //Desplazar
			desplazaY = 2.0; 
			camera.desplazar(0.0, desplazaY, 0.0);
			break;
		case 'x':
			desplazaY = -2.0;
			camera.desplazar(0.0, desplazaY, 0.0);
			break;

		case '1': //Gira X
			//angleGiraX += 0.1;
			camera.giraX(0.1);
			break;

		case '2': //Gira Y
			//angleGiraY += 0.1;
			camera.giraY(0.1);
			break;

		case '3': //Gira Z
			//angleGiraZ += 0.1;
			camera.giraZ(0.1);
			break;

		case '4': //Lateral
			camera.lateral();
			break;

		case '5': //Frontal
			camera.frontal();
			break;

		case '6': //Cenital
			camera.cenital();
			break;

		case '7': //Esquina
			camera.esquina();
			break;

		case 'o': //Ortogonal
			glMatrixMode(GL_PROJECTION);
			glLoadIdentity();
			glOrtho(xLeft, xRight, yBot, yTop, N, F);
			break;
		case 'p': //Perspectiva
			glMatrixMode(GL_PROJECTION);
			glLoadIdentity();
			gluPerspective(45, 1, N, F);
			break;
		case 'l': //Oblicua
			glMatrixMode(GL_PROJECTION);
			glLoadIdentity();
			
			d.normaliza();

			if(d.getZ() != 0.0 && (d.getX() != 0 || d.getY() != 0 || d.getZ() != 1)){
				GLfloat m[16] = {	
						1, 0, 0, 0,
						0, 1, 0, 0,
						0, 0, 1, 0,
						0, 0, 0, 1
					};
				m[8] = -(d.getX()) / d.getZ();
				m[9] = -(d.getY()) / d.getZ();
				m[12] = -N * (d.getX() / d.getZ());
				m[13] = -N * (d.getY() / d.getZ());

				glOrtho(xLeft, xRight, yBot, yTop, N, F);
				glMultMatrixf(m);
			}
			break;

		case 'y': //Trasladar escena
			escena->traslacionEscena(1, 0, 0);
			break;
		case 'h':
			escena->traslacionEscena(-1, 0, 0);
			break;

		case 'g': //Escalacion escena
			escena->escalacionEscena(1, 2, 1);
			break;
		case 'b':
			escena->escalacionEscena(1, 0.5, 1);
			break;

		case '8': //Rotacion escena
			escena->rotacionEscena(2,0,1,0);
			break;
		case '9':
			escena->rotacionEscena(-2,0,1,0);
			break;

		case 't': //Encender/apagar luz ambiente global
			if(globalOn){
				globalOn = false;
				glDisable(GL_LIGHT0);
				glDisable(GL_LIGHT1);
				glDisable(GL_LIGHT2);
				GLfloat amb[] = {0.0,0.0,0.0,1.0};
				glLightModelfv(GL_LIGHT_MODEL_AMBIENT, amb);
			} else {
				globalOn = true;
				glEnable(GL_LIGHT0);
				glEnable(GL_LIGHT1);
				glEnable(GL_LIGHT2);
				GLfloat amb[] = {0.2,0.2,0.2,1.0};
				glLightModelfv(GL_LIGHT_MODEL_AMBIENT, amb);
			}
			break;

		case 'a': //Escalar lámpara
			escena->getHijo(15)->getTAfin()->escalacion(1, 1.1, 1);
			escena->getHijo(15)->getTAfin()->traslacion(0, -1, 0);
			lampHeight *= 1.1;
			angleLamp = calculateLampAngle(0.5, lampHeight);
			glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, angleLamp);
			break;
		case 'z':
			escena->getHijo(15)->getTAfin()->escalacion(1, 0.9, 1);
			escena->getHijo(15)->getTAfin()->traslacion(0, 1, 0);
			lampHeight *= 0.9;
			angleLamp = calculateLampAngle(0.5, lampHeight);
			glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, angleLamp);
			break;

		case 'q': //Encender/apagar lámpara
			if(lamparaOn){
				lamparaOn = false;
				glDisable(GL_LIGHT1);
			} else {
				lamparaOn = true;
				glEnable(GL_LIGHT1);
			}
			break;

		case 'w': // Activar/desactivar luz remota del este
			if(luzRemotaOn){
				luzRemotaOn = false;
				glDisable(GL_LIGHT2);
			} else {
				luzRemotaOn = true;
				glEnable(GL_LIGHT2);
			}
			break;
		
		case '0': // Activar/desactivar niebla
			if(nieblaOn){
				nieblaOn = false;
				glDisable(GL_FOG);
			} else {
				nieblaOn = true;
				glEnable(GL_FOG);
			}
			break;

		default:
			need_redisplay = false;
			break;
	}

	if (need_redisplay)
		glutPostRedisplay();
}