示例#1
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();
}