// // Example code for OpenGL programming // #include #include #include int nFPS = 60; float fRotateAngle = 0.f; void init(void) { // init your data, setup OpenGL environment here glClearColor(0.3,0.3,0.3,1.0); // clear color is gray //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); // uncomment this function if you only want to draw wireframe model } void display(void) { // put your OpenGL display commands here glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); // reset OpenGL transformation matrix glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // reset transformation matrix to identity // setup look at transformation so that // eye is at : (0,0,3) // look at center is at : (0,0,0) // up direction is +y axis gluLookAt(0.f,0.f,3.f,0.f,0.f,0.f,0.f,1.f,0.f); glRotatef(fRotateAngle,0.f,1.f,0.f); // Test drawing a solid teapot glColor3f(1.0,0.0,0.0); // set current color to Red glutSolidTeapot(1.f); // call glut utility to draw a solid teapot //glFlush(); glutSwapBuffers(); // swap front/back framebuffer to avoid flickering } void reshape (int w, int h) { // reset viewport ( drawing screen ) size glViewport(0, 0, w, h); float fAspect = ((float)w)/h; // reset OpenGL projection matrix glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(70.f,fAspect,0.001f,30.f); } void keyboard(unsigned char key, int x, int y) { // put your keyboard control here if (key == 27) { // ESC hit, so quit printf("demonstration finished.\n"); exit(0); } } void mouse(int button, int state, int x, int y) { // process your mouse control here if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) printf("push left mouse button.\n"); } void timer(int v) { fRotateAngle += 1.f; // change rotation angles glutPostRedisplay(); // trigger display function by sending redraw into message queue glutTimerFunc(1000/nFPS,timer,v); // restart timer again } int main(int argc, char* argv[]) { glutInit(&argc, (char**)argv); // set up for double-buffering & RGB color buffer & depth test glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow ((const char*)"Hello Triangle"); init(); // setting up user data & OpenGL environment // set up the call-back functions glutDisplayFunc(display); // called when drawing glutReshapeFunc(reshape); // called when change window size glutKeyboardFunc(keyboard); // called when received keyboard interaction glutMouseFunc(mouse); // called when received mouse interaction glutTimerFunc(100,timer,nFPS); // a periodic timer. Usually used for updating animation glutMainLoop(); // start the main message-callback loop return 0; }