示例#1
0
///
/// \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);
}
示例#2
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;
    }
}
示例#3
0
// 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;
}
示例#4
0
文件: xldemo.c 项目: Aye1/RVProject
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;
	}
}
示例#5
0
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;
}
示例#6
0
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);
		}
	}
}