/** * Mouse active motion callback (when button is pressed) */ void MouseMotionCallback(int x, int y) { if (gPreviousMouseX >= 0 && gPreviousMouseY >= 0) { //compute delta float deltaX = x-gPreviousMouseX; float deltaY = y-gPreviousMouseY; gPreviousMouseX = x; gPreviousMouseY = y; float zoomSensitivity = 0.2f; float rotateSensitivity = 0.5f; //orbit or zoom if (gMouseButton == GLUT_LEFT_BUTTON) { AdjustCameraAzimuthBy(-deltaX*rotateSensitivity); AdjustCameraElevationBy(-deltaY*rotateSensitivity); } else if (gMouseButton == GLUT_RIGHT_BUTTON) { STVector3 zoom(0,0,deltaX); AdjustCameraTranslationBy(zoom * zoomSensitivity); } } else { gPreviousMouseX = x; gPreviousMouseY = y; } }
void SpecialKeyCallback(int key, int x, int y) { switch(key) { case GLUT_KEY_LEFT: AdjustCameraTranslationBy(STVector3(-0.2,0,0)); break; case GLUT_KEY_RIGHT: AdjustCameraTranslationBy(STVector3(0.2,0,0)); break; case GLUT_KEY_DOWN: AdjustCameraTranslationBy(STVector3(0,-0.2,0)); break; case GLUT_KEY_UP: AdjustCameraTranslationBy(STVector3(0,0.2,0)); break; default: break; } glutPostRedisplay(); }