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