#include #include #include "rtsQuaternion.h" #include "rtsCamera.h" float d_angle = 0.05; rtsCamera rts_glut_camera; unsigned int mouse_x; unsigned int mouse_y; int mouse_button; //user display function pointer void (*UserDisplay)(void); /*void KeyboardFunction(unsigned char key, int x, int y) { if(key == 27) exit(0); }*/ /*void SpecialKeys(int key, int x, int y) { rtsQuaternion new_rotation; if(key == GLUT_KEY_UP) rts_glut_camera.OrbitFocus(0, d_angle); if(key == GLUT_KEY_DOWN) rts_glut_camera.OrbitFocus(0, -d_angle); if(key == GLUT_KEY_LEFT) rts_glut_camera.OrbitFocus(d_angle, 0.0); if(key == GLUT_KEY_RIGHT) rts_glut_camera.OrbitFocus(-d_angle, 0.0); }*/ void MouseDrag(int x, int y) { int dx = x - mouse_x; int dy = y - mouse_y; if(mouse_button == GLUT_LEFT_BUTTON) rts_glut_camera.OrbitFocus(-dx*0.01, dy*0.01); else if(mouse_button == GLUT_MIDDLE_BUTTON) rts_glut_camera.Zoom(dy*rts_glut_camera.getFOV()/60.0); mouse_x = x; mouse_y = y; } void MouseMove(int x, int y) { mouse_x = x; mouse_y = y; } void MouseClick(int button, int state, int x, int y) { if(state == GLUT_DOWN) mouse_button = button; } void IdleFunction() { glutPostRedisplay(); } void RenderCamera() { //set viewport glMatrixMode(GL_PROJECTION); glLoadIdentity(); glViewport(0, 0, glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT)); //compute the aspect ratio float aspect_ratio = (float)glutGet(GLUT_WINDOW_WIDTH)/(float)glutGet(GLUT_WINDOW_HEIGHT); gluPerspective(rts_glut_camera.getFOV(), aspect_ratio, 0.01, 10.0); //render the camera glMatrixMode(GL_MODELVIEW); glLoadIdentity(); point3D camera_position = rts_glut_camera.getPosition(); vector3D camera_up = rts_glut_camera.getUp(); gluLookAt(camera_position.x, camera_position.y, camera_position.z, 0.0, 0.0, 0.0, camera_up.x, camera_up.y, camera_up.z); } void rts_glutInitialize(const char* WindowName, int width = 1024, int height = 768) { char *myargv [1]; int myargc=1; myargv [0]=strdup ("AppName"); glutInit(&myargc, myargv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowSize(width, height); glutInitWindowPosition(200,0); glutCreateWindow(WindowName); //initialize GLEW GLenum err = glewInit(); if(err != GLEW_OK) fprintf(stderr, "Error: %s\n", glewGetErrorString(err)); if (!glewIsSupported("GL_VERSION_2_0")) { printf("OpenGL 2.0 not supported\n"); //exit(1); } glEnable(GL_DEPTH_TEST); glClearColor(1.0, 1.0, 1.0, 0.0); rts_glut_camera.setPosition(0.0, 0.0, -1.0); rts_glut_camera.setFOV(60); rts_glut_camera.LookAt(0.0, 0.0, 0.0, 0.0, 1.0, 0.0); } void DisplayFunction() { RenderCamera(); UserDisplay(); glutSwapBuffers(); } void rts_glutStart(void (*display_func)(void)) { //glutSpecialFunc(SpecialKeys); //glutKeyboardFunc(KeyboardFunction); glutDisplayFunc(DisplayFunction); glutMotionFunc(MouseDrag); glutMouseFunc(MouseClick); glutPassiveMotionFunc(MouseMove); UserDisplay = display_func; glutIdleFunc(IdleFunction); //glutReshapeFunc(ReshapeFunction); //glutMouseFunc(MouseFunction); //glutMotionFunc(MotionFunction); glutMainLoop(); }