#ifdef _WIN32 #include #endif #include // glut.h already includes GL/gl.h and GL/glu.h #include #include /* you may need to locate glut.h on your computer and change the path accordingly. * It is most likely in ~/include or ~include/GL. */ /* the viewport is 500x500 with the origin at (0,0) */ int Vx_min=0, Vx_max=500, Vy_min=0, Vy_max=500, Vz_min=0, Vz_max=0; int frame_width, frame_height; void init(void) { glClearColor (0.0, 0.0, 0.0, 0.0); } void display(void) { glClear (GL_COLOR_BUFFER_BIT); /* green */ glColor3f(0.0,1.0,0.0); /* params are floats in range [0.0,1.0] */ /* draws one or more lines */ glBegin(GL_LINES); /* params are floats */ glVertex2f(-150.0, -150.0); /* 2d floats (z=0) */ glVertex2f( 150.0, -150.0); /* params are integers */ glVertex2i(150, -150); glVertex2i(150, 150); /* params are doubles */ glVertex2d(150.0, 150.0); glVertex2d(-150.0, 150.0); /* params are floats */ glVertex2f(-150.0, 150.0); glVertex2f(-150.0, -150.0); glEnd(); /* blue */ glColor3ub(0,0,255); /* params are unsigned bytes in range [0,255] */ /* draws one polygon */ glBegin(GL_POLYGON); glVertex2i(-125, -125); glVertex2i(125, -125); glVertex2i(125, 125); glVertex2i(-125, 125); glEnd(); /* black */ glColor3f(0.0,0.0,0.0); /* params are floats in range [0.0,1.0] */ /* draws one or more triangles */ glBegin(GL_TRIANGLES); glVertex2i(-100, -100); glVertex2i(100, -100); glVertex2i(0, 100); glEnd(); glColor3f(1.0,0.0,0.0); glBegin(GL_TRIANGLES); glVertex2i(-100, -100); glVertex2i(-100, 100); glVertex2i(100, 0); glEnd(); glFlush (); } void reshape (int w, int h) { frame_width = w; frame_height = h; glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); // gluOrtho2D(Vx_min, Vx_max, Vy_min, Vy_max); // 2d glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 500.0); // 3d glMatrixMode (GL_MODELVIEW); glLoadIdentity(); // 3d gluLookAt (0.0, 0.0, 375.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); // 3d } void mouse(int button, int state, int x, int y) { switch (button) { case GLUT_LEFT_BUTTON: if (state == GLUT_DOWN) { printf("left mouse click\n"); glutPostRedisplay(); } break; default: break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (Vx_max-Vx_min, Vy_max-Vy_min); glutInitWindowPosition (100, 100); glutCreateWindow (argv[0]); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMouseFunc(mouse); glutMainLoop(); return EXIT_SUCCESS; }