void myInit() { ballModel.loadFromFile("models/balls.tri"); TRIobj=&ballModel; glEnable(GL_DEPTH_TEST); glClearColor(0,0,0,1.0); glewInit(); if(glewIsSupported("GL_VERSION_2_0")) printf("Ready for OpenGL 2.0\n"); else { printf("GLSL not supported\n"); exit(1); } //typedef bool (*PFNWGLSWAPINTERVALFARPROC)(int); //PFNWGLSWAPINTERVALFARPROC wglSwapIntervalEXT = 0; //wglSwapIntervalEXT = (PFNWGLSWAPINTERVALFARPROC)wglGetProcAddress("wglSwapIntervalEXT"); //wglSwapIntervalEXT(1); shaderInit(); changeShader(currentShader); materialInit(); lightInit(); timeNow=timeOld=glutGet(GLUT_ELAPSED_TIME); }
void loadModel() { glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); model.loadFromFile("models/teapot.tri"); mode = 1;//translation printf("Current mode: translation\n"); useWorldCoordinate = true; printf("Using world coordinate\n"); initClipping(); model.initTransform(); camera.initTransform(); }
void myKeyboard(unsigned char key, int x, int y) { switch(key) { /** Optional: implement some keyboard function here */ case 27: exit(0); break; // change mode case '1': case '2': case '3': case '4': case '5': case '6': case '7': mode = (int)(key - '0'); printf("Current mode: %d\n", mode); break; case '8': mode = 8; doClipping = (!doClipping) ? true : false; printf("%s\n", (doClipping) ? "Enable clipping" : "Disable clipping"); break; case '9': useWorldCoordinate = (!useWorldCoordinate) ? true : false; printf("%s\n", (useWorldCoordinate) ? "Using world coordinates" : "Not using world coordinates"); model.initTransform(); camera.initTransform(); //initObjTransform(); //initCamTransform(); break; case '0': printf("RESET!!!\n"); loadModel(); break; // transformation case 'd': if(mode == 1) //model.translate.x += 10; model.updateTranslate(10, 0, 0); else if(mode == 2) model.updateRotationy(3.0, 1.0, 0.0, 0.0); else if(mode == 3) //model.scale.x += 0.1; model.updateScale(1.1, 1, 1); else if(mode == 5) { camera.position.x += 5; camera.lookAt.x += 5; } else if(mode == 6) camera.updateRotationy(-3.0, 1.0, 0.0, 0.0); break; case 'q': if(mode == 1) //model.translate.y += 10; model.updateTranslate(0, 10, 0); else if(mode == 2) model.updateRotationz(3.0, 0.0, 1.0, 0.0); else if(mode == 3) //model.scale.y += 0.1; model.updateScale(1, 1.1, 1); else if(mode == 5) { camera.position.y += 5; camera.lookAt.y += 5; } else if(mode == 6) camera.updateRotationz(-3.0, 0.0, 1.0, 0.0); break; case 's': if(mode == 1) //model.translate.z += 10; model.updateTranslate(0, 0, 10); else if(mode == 2) model.updateRotationx(3.0, 0.0, 0.0, 1.0); else if(mode == 3) //model.scale.z += 0.1; model.updateScale(1, 1, 1.1); else if(mode == 5) { camera.position.z += 5; camera.lookAt.z += 5; } else if(mode == 6) camera.updateRotationx(-3.0, 0.0, 0.0, 1.0); break; case 'a': if(mode == 1) //model.translate.x -= 10; model.updateTranslate(-10, 0, 0); else if(mode == 2) model.updateRotationy(-3.0, 1.0, 0.0, 0.0); else if(mode == 3) //model.scale.x -= 0.1; model.updateScale(0.9, 1, 1); else if(mode == 5) { camera.position.x -= 5; camera.lookAt.x -= 5; } else if(mode == 6) camera.updateRotationy(3.0, 1.0, 0.0, 0.0); break; case 'e': if(mode == 1) //model.translate.y -= 10; model.updateTranslate(0, -10, 0); else if(mode == 2) model.updateRotationz(-3.0, 0.0, 1.0, 0.0); else if(mode == 3) //model.scale.y -= 0.1; model.updateScale(1, 0.9, 1); else if(mode == 5) { camera.position.y -= 5; camera.lookAt.y -= 5; } else if(mode == 6) camera.updateRotationz(3.0, 0.0, 1.0, 0.0); break; case 'w': if(mode == 1) //model.translate.z -= 10; model.updateTranslate(0, 0, -10); else if(mode == 2) model.updateRotationx(-3.0, 0.0, 0.0, 1.0); else if(mode == 3) //model.scale.z -= 0.1; model.updateScale(1, 1, 0.9); else if(mode == 5) { camera.position.z -= 5; camera.lookAt.z -= 5; } else if(mode == 6) camera.updateRotationx(3.0, 0.0, 0.0, 1.0); break; // zoom in/out case 'z': if(mode == 5) camera.lookAtDist -= 5; camera.updateRevolution(0, 0, 0, 0); break; case 'x': if(mode == 5) camera.lookAtDist += 5; camera.updateRevolution(0, 0, 0, 0); break; // shear / camera rotation around VRP case 't': if(mode == 4) model.updateShear(1.0, 0, 1); else if(mode == 7) camera.updateRevolution(((int)camera.revAngle[0] + 3) % 360, 1, 0, 0); else if(mode == 8 && doClipping) xMin += 10; break; case 'y': if(mode == 4) model.updateShear(-1.0, 0, 1); else if(mode == 7) camera.updateRevolution(((int)camera.revAngle[0] - 3) % 360, 1, 0, 0); else if(mode == 8 && doClipping) xMin -= 10; break; case 'T': if(mode == 4) model.updateShear(1.0, 0, 2); else if(mode == 8 && doClipping) xMax += 10; break; case 'Y': if(mode == 4) model.updateShear(-1.0, 0, 2); else if(mode == 8 && doClipping) xMax -= 10; break; case 'g': if(mode == 4) model.updateShear(1.0, 1, 0); else if(mode == 7) camera.updateRevolution(((int)camera.revAngle[1] + 3) % 360, 0, 1, 0); else if(mode == 8 && doClipping) yMin += 10; break; case 'h': if(mode == 4) model.updateShear(-1.0, 1, 0); else if(mode == 7) camera.updateRevolution(((int)camera.revAngle[1] - 3) % 360, 0, 1, 0); else if(mode == 8 && doClipping) yMin -= 10; break; case 'G': if(mode == 4) model.updateShear(1.0, 1, 2); else if(mode == 8 && doClipping) yMax += 10; break; case 'H': if(mode == 4) model.updateShear(-1.0, 1, 2); else if(mode == 8 && doClipping) yMax -= 10; break; case 'b': if(mode == 4) model.updateShear(1.0, 2, 0); else if(mode == 7) camera.updateRevolution(((int)camera.revAngle[2] + 3) % 360, 0, 0, 1); else if(mode == 8 && doClipping) zMin += 10; break; case 'n': if(mode == 4) model.updateShear(-1.0, 2, 0); else if(mode == 7) camera.updateRevolution(((int)camera.revAngle[2] - 3) % 360, 0, 0, 1); else if(mode == 8 && doClipping) zMin -= 10; break; case 'B': if(mode == 4) model.updateShear(1.0, 2, 1); else if(mode == 8 && doClipping) zMax += 10; break; case 'N': if(mode == 4) model.updateShear(-1.0, 2, 1); else if(mode == 8 && doClipping) zMax -= 10; break; // change model case ',': model.loadFromFile("models/Gym.tri"); break; case '.': model.loadFromFile("models/Fighter.tri"); break; case '/': model.loadFromFile("models/Csie.tri"); break; case ';': model.loadFromFile("models/Easter.tri"); break; case '\'': model.loadFromFile("models/Car_road.tri"); break; } }