Ejemplo n.º 1
0
/**
 * Más acciones de teclas
 */
void specialFunc(int key, int x, int y) {
	switch(key) {
		case GLUT_KEY_LEFT:	//giro  a la izquierda
			camYaw += 1.0;
			clampCamera();
			//cout << camYaw << " " << cos(camYaw/180.0*M_PI) << " " << sin(camYaw/180.0*M_PI) << endl;
			break;
			
		case GLUT_KEY_RIGHT: // giro a la derecha.
			camYaw -= 1.0;
			clampCamera();
			//cout << camYaw << " " << cos(camYaw/180.0*M_PI) << " " << sin(camYaw/180.0*M_PI) << endl;
			break;
			
		case GLUT_KEY_UP:	// mover hacia arriba.
			if(!andando)
				camY += 2.0;
			break;
			
			case GLUT_KEY_DOWN:	// mover hacia abajo
			if(!andando)
				camY -= 2.0;
			break;
	}
    glutPostRedisplay();
}
Ejemplo n.º 2
0
void Camera::mouseLook( float dx, float dy)
{
//    XTRACE();
    if( (dx!=0) || (dy!=0))
    {
	_cameraYaw -= defaultAngleSensitivity * dx;
	_cameraPitch += defaultAngleSensitivity * dy;
	clampCamera();
    }
}
Ejemplo n.º 3
0
/**
 * Más movimiento del ratón
 */
void allMotionFunc( int x, int y ) {
	int deltaX, deltaY;
	
	if( !isInMouseDrag )
		return;
	deltaX = x - viewPortCenterX;
	deltaY = y - viewPortCenterY;
	if( deltaX == 0 && deltaY == 0 )
		return;
	glutWarpPointer( viewPortCenterX, viewPortCenterY );
	camYaw -= DEF_angleSensitivity * deltaX;
	camPitch -= DEF_angleSensitivity * deltaY * ( 1.0 );
	clampCamera();
	glutPostRedisplay();
}
Ejemplo n.º 4
0
/**
 * Acciones de las teclas
 */
static void keyboard(unsigned char key, int x, int y) {
	
	switch (key) {
			
		case 'w':	// Movimiento hacia adelante
		case 'W':
			if(andando){
				setAlturaPj();
			}
			dollyCamera( DEF_dollyStepSize, 0.0 );
			break;
			
			case 's':	// Movimiento hacia atras
			case 'S':
			if(andando){
				setAlturaPj();
			}
			dollyCamera( DEF_dollyStepSize, 180.0 );
			break;
			
			case 'a':	// Strafe hacia la izquierda
			case 'A':
			if(andando){
				setAlturaPj();
			}
			dollyCamera( DEF_dollyStepSize, 90.0 );
			break;
			
			case 'd':	// Strafe derecha
			case 'D':
			if(andando){
				setAlturaPj();
			}
			dollyCamera( DEF_dollyStepSize, 270.0 );
			break;
			
			case 'f':	// Fullscreen
			case 'F':
			if(fullscreen){
				fullscreen = 0;
			}else{
				fullscreen = 1;
			}
			if(fullscreen){
				glutFullScreen();
			}else{
				glutReshapeWindow(800,600);
			}
			break;
			
			case 'z':	//Mirar abajo
			camPitch -= 1.0;
			clampCamera();
			break;
			
			case 'Z':	// Mirar arriba
			camPitch += 1.0;
			clampCamera();
			break;
			
			
			case ' ': // Cambia modos de visualizado
			switch(modoRender){
				case glLINE:
					modoRender = glPOINT;
					real_renderMode = GL_POINT;
					break;
				case glPOINT:
					modoRender = glFLAT;
					real_renderMode = GL_FILL;
					glShadeModel(GL_FLAT);
					break;
				case glFLAT:
					modoRender = glSMOOTH;
					real_renderMode = GL_FILL;
					glShadeModel(GL_SMOOTH);
					break;
				case glSMOOTH:
					modoRender = glLINE;
					real_renderMode = GL_LINE;
					break;
				default: break;
			}
			break;
			
			
			case 27:	//Esc salir
			glutIdleFunc(NULL);
			exit(0);
			break;
			
			case '+': case '.': // Zoom in
			if(zoomFactor > 0.1)
				zoomFactor -= 0.1;
			break;
			
			case '-': case ',': // Zoom out
			if(zoomFactor < 2.4)
				zoomFactor += 0.1;
			break;
			
			case '0': // Zoom reset
			zoomFactor = 1.0;
			break;
			
			case '1': // Avanzar 1 hora
			horas++;
			actualizaSol(true);
			break;
			
			case '2': // Retroceder 1 hora
			horas--;
			if (horas == -1)
				horas = 23;
			actualizaSol(true);
			break;
			
			case 'p': case 'P': // Cambia entre andar y flotar
			andando = !andando;
			if(andando){
				setAlturaPj();
			}
			break;
			
			case 'o': case 'O': // Activar paso del tiempo
			animar = !animar;
			break;
			
			case 't':// Aumentar la velocidad del tiempo
			velocidad *= 2;
			if (velocidad > 500 ) velocidad = 512;
			cout << "v: " << velocidad << endl;
			break;
			
			case 'T':// Disminuir la velocidad del tiempo
			velocidad /= 2;
			if (velocidad < .125 ) velocidad = .125;
			break;	

			case 'M': // Deformación positiva
				realizarDeformacion(1);
			break;	

			case 'm': // Deformación negativa
				realizarDeformacion(-1);
			break;

			case 'x': case 'X': // Animación cámara
				animarCamara = !animarCamara;
				estadoAnimCamara = INICIO_SUAVE;
			break;
			
			default: break;
	}
	glutPostRedisplay();
}
Ejemplo n.º 5
0
void ElevationMap::panCamera(float dTheta, float dPhi)
{
    _theta += dTheta;
    _phi += dPhi;
    clampCamera();
}