
void specialKeyPressed (int character, int x, int y) {
	switch (character) {
		case GLUT_KEY_F1:
			glutPostRedisplay ();
			break;
		case GLUT_KEY_F2:
			glutPostRedisplay ();
			break;
		case GLUT_KEY_UP: {
			if (keyIsDown (VK_CONTROL)) {
				Point up = {0.0, 0.5, 0.0};
				camera->moveBy (up);
			} else if (keyIsDown (VK_ALT)) {
				//Not done (left for you)...
			} else {
				Point ahead = {0.0, 0.0, -0.5};
				camera->moveBy (ahead);
			}
			glutPostRedisplay ();
			break;}
		case GLUT_KEY_DOWN: {
			if (keyIsDown (VK_CONTROL)) {
				Point down = {0.0, -0.5, 0.0};
				camera->moveBy (down);
			} else if (keyIsDown (VK_ALT)) {
				//Not done (left for you)...
			} else {
				Point back = {0.0, 0.0, 0.5};
				camera->moveBy (back);
			}
			glutPostRedisplay ();
			break;}
		case GLUT_KEY_RIGHT:
			if (keyIsDown (VK_CONTROL)) {
				Point yRotateRight = {0.0, -10.0, 0.0};
				camera->rotateBy (yRotateRight);
			} else if (keyIsDown (VK_ALT)) {
				//Not done (left for you)...
			} else {
				Point right = {0.5, 0.0, 0.0};
				camera->moveBy (right);
			}
			glutPostRedisplay ();
			break;
		case GLUT_KEY_LEFT:
			if (keyIsDown (VK_CONTROL)) {
				Point yRotateLeft = {0.0, 10.0, 0.0};
				camera->rotateBy (yRotateLeft);
			} else if (keyIsDown (VK_ALT)) {
				//Not done (left for you)...
			} else {
				Point left = {-0.5, 0.0, 0.0};
				camera->moveBy (left);
			}
			glutPostRedisplay ();
			break;
		case GLUT_KEY_PAGE_UP:
			glutPostRedisplay ();
			break;
		case GLUT_KEY_PAGE_DOWN:
			glutPostRedisplay ();
			break;
	}
}