/// /// \brief GlFrame::wheelEvent /// Translates along Z axis with mouse wheel /// \param event /// void GlFrame::wheelEvent( QWheelEvent* event ) { if(event->delta() > 0) translateCamera(-m_moveSpeed * m_timeSinceLastFrame, 0); else translateCamera(m_moveSpeed * m_timeSinceLastFrame, 0); }
/// /// \brief GlFrame::keyPressEvent /// Key Event handler, for translation and rotation /// ZS : move along Z /// QD : move along X /// RF : move along Y /// /// Arrow keys : rotate camera /// /// \param event /// void GlFrame::keyPressEvent( QKeyEvent* event ) { switch( event->key()) { case Qt::Key_Left: rotateCamera( m_rotateSpeed * m_timeSinceLastFrame, 0 ); break; case Qt::Key_Right: rotateCamera( -m_rotateSpeed * m_timeSinceLastFrame, 0); break; case Qt::Key_Up: rotateCamera( 0, m_rotateSpeed * m_timeSinceLastFrame ); break; case Qt::Key_Down: rotateCamera( 0, -m_rotateSpeed * m_timeSinceLastFrame); break; case Qt::Key_D: translateCamera(0, m_moveSpeed * m_timeSinceLastFrame); break; case Qt::Key_Q: translateCamera(0, -m_moveSpeed * m_timeSinceLastFrame); break; case Qt::Key_Z: translateCamera(m_moveSpeed * m_timeSinceLastFrame, 0); break; case Qt::Key_S: translateCamera(-m_moveSpeed * m_timeSinceLastFrame, 0); break; case Qt::Key_R: m_Camera->translateY(m_moveSpeed * m_timeSinceLastFrame); break; case Qt::Key_F: m_Camera->translateY(-m_moveSpeed * m_timeSinceLastFrame); break; } }
// returns true iff the key had some effect bool Camera::controlSpec(int key) { switch (key) { case GLUT_KEY_UP: translateCamera(0, 0.1, 0); break; case GLUT_KEY_DOWN: translateCamera(0, -0.1, 0); break; case GLUT_KEY_LEFT: translateCamera(-0.1, 0, 0); break; case GLUT_KEY_RIGHT: translateCamera(0.1, 0, 0); break; default: return false; } return true; }
static void special(int key, int x, int y) { switch (key) { case GLUT_KEY_UP: /* move forward */ translateCamera(0.15f); break; case GLUT_KEY_DOWN: /* move backward */ translateCamera(-0.15f); break; case GLUT_KEY_RIGHT: /* rotate to the right */ rotateCamera(5.0f); break; case GLUT_KEY_LEFT: /* rotate to the left */ rotateCamera(-5.0f); break; } }
bool Camera::control(unsigned char key) { switch (key) { case 'I': translateCamera(0, 0, moveSpeed); break; case 'i': translateCamera(0, 0, -moveSpeed); break; case 't': rotateCamera(-turnSpeed, 1.0, 0.0, 0.0); break; case 'T': rotateCamera(turnSpeed, 1.0, 0.0, 0.0); break; case 'a': rotateCamera(-turnSpeed, 0.0, 1.0, 0.0); break; case 'A': rotateCamera(turnSpeed, 0.0, 1.0, 0.0); break; case 'c': rotateCamera(-turnSpeed, 0.0, 0.0, 1.0); break; case 'C': rotateCamera(turnSpeed, 0.0, 0.0, 1.0); break; default: return false; } return true; }
void Viewer::key(int key, int scancode, int action, int mods) { if(action == GLFW_PRESS || action == GLFW_REPEAT) { if (key == GLFW_KEY_UP) polarView(distance,azimut,elevation+5,twist); else if (key == GLFW_KEY_DOWN) polarView(distance,azimut,elevation-5,twist); else if (key == GLFW_KEY_LEFT) polarView(distance,azimut-5,elevation,twist); else if (key == GLFW_KEY_RIGHT) polarView(distance,azimut+5,elevation,twist); } /* w ==> switch draw_mode : wireframe <-> triangles */ if(action == GLFW_PRESS && key == GLFW_KEY_Z) { if(draw_mode == DRAW_MODE::WIREFRAME) draw_mode = DRAW_MODE::TRIANGLES; else if(draw_mode == DRAW_MODE::TRIANGLES) draw_mode = DRAW_MODE::WIREFRAME; } /* s ==> switch smooth mode : smooth <-> no smooth */ if(action == GLFW_PRESS && key == GLFW_KEY_S) { if(smooth_mode == SMOOTH_MODE::SMOOTH) smooth_mode = SMOOTH_MODE::NO_SMOOTH; else smooth_mode = SMOOTH_MODE::SMOOTH; } /* l ==> siwth lighting mode : constant <-> gouraud */ if(action == GLFW_PRESS && key == GLFW_KEY_L) { if(lighting_mode == LIGHTING_MODE::CONSTANT) { lighting_mode = LIGHTING_MODE::GOURAUD; glShadeModel(GL_SMOOTH); std::cout << "switch to gouraud illumination" << std::endl; }else { lighting_mode = LIGHTING_MODE::CONSTANT; glShadeModel(GL_FLAT); std::cout << "switch to constant illumination model" << std::endl; } } /* n ==> switch draw normals on/off */ if(action == GLFW_PRESS && key == GLFW_KEY_N) { draw_normals = !draw_normals; } /* keypad 5,2,1,3 ==> control camera translation */ if(action == GLFW_PRESS|| action == GLFW_REPEAT) { if(key == GLFW_KEY_KP_5) { translateCamera(0.0,1.0,0.0); }else if(key == GLFW_KEY_KP_2) { translateCamera(0.0,-1.0,0.0); }else if(key == GLFW_KEY_KP_1) { translateCamera(-1.0,0.0,0.0); }else if(key == GLFW_KEY_KP_3) { translateCamera(1.0,0.0,0.0); } } }