/** * 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(); }
void Camera::mouseLook( float dx, float dy) { // XTRACE(); if( (dx!=0) || (dy!=0)) { _cameraYaw -= defaultAngleSensitivity * dx; _cameraPitch += defaultAngleSensitivity * dy; clampCamera(); } }
/** * 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(); }
/** * 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(); }
void ElevationMap::panCamera(float dTheta, float dPhi) { _theta += dTheta; _phi += dPhi; clampCamera(); }