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; }
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; }
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; }
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(); } } } } } }
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; }
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; }
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); }
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; }
//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(); } } } }
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(); }
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; } }
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(); }