lines.c |
| // up to page 59 #include <GL/glut.h> #include <stdlib.h> #define drawOneLine(x1, y1, x2, y2) glBegin(GL_LINES); \ glVertex2f((x1),(y1)); glVertex2f((x2),(y2)); glEnd(); void init(void){ glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT); } void display(void){ int i; glClear(GL_COLOR_BUFFER_BIT); /* Select white for all lines */ glColor3f(1.0, 1.0, 1.0); /* in first row, 3 lines, each with a different stipple */ glEnable(GL_LINE_STIPPLE); glLineStipple(1, 0x0101); // dotted drawOneLine(50.0, 125.0, 150, 125); glLineStipple(1, 0x00FF); // dashed drawOneLine(150.0, 125.0, 250, 125); glLineStipple(1, 0x1C47); // dash/dot/dash drawOneLine(250.0, 125.0, 350, 125); /* in 2nd row, 3 wide lines, each with a different stipple */ glLineWidth(5); glLineStipple(1, 0x0101); // dotted drawOneLine(50.0, 100.0, 150, 100); glLineStipple(1, 0x00FF); // dashed drawOneLine(150.0, 100.0, 250, 100); glLineStipple(1, 0x1C47); // dash/dot/dash drawOneLine(250.0, 100.0, 350, 100); glLineWidth(1); /* in 3rd row, 6 lines, with dash/dot/dash stipple as part of a single connected line strip glLineStipple(1, 0x1C47); // dash/dot/dash */ glBegin(GL_LINE_STRIP); for(i=0; i<7; i++) glVertex2f(50.0 + ((GLfloat) i * 50.0), 75.0); glEnd(); /* in 5th row, 6 independent lines with the same stipple */ for(i=0; i<6; i++){ drawOneLine(50.0 + ((GLfloat) i * 50.0), 50.0, 50.0 + ((GLfloat) (i+1) * 50.0), 50.0); } /* in 5th row, 1 line, with dash/dot/dash stipple and a stipple repeat factor of 5 glLineStipple(5, 0x1C47); // dash/dot/dash */ drawOneLine(50.0, 25.0, 350, 50); glDisable(GL_LINE_STIPPLE); /* Select color for polygons */ glColor3f(0.5, 1.0, 0.5); /* Enable cull on front face */ glEnable(GL_CULL_FACE); glCullFace(GL_FRONT); /* apply cull thing */ glFrontFace(GL_CW); glPolygonMode(GL_FRONT, GL_LINE); glPolygonMode(GL_BACK, GL_FILL); /* Adding a polygon or two */ glBegin(GL_POLYGON); glVertex2f(50, 50); glVertex2f(75, 50); glVertex2f(87.5, 62.5); glVertex2f(75, 75); glVertex2f(50, 75); glVertex2f(37.5, 62.5); glEnd(); /* Select color for polygons */ glColor3f(1.0, 0.5, 0.5); /* apply cull thing */ glFrontFace(GL_CW); glPolygonMode(GL_FRONT, GL_LINE); glPolygonMode(GL_BACK, GL_FILL); glBegin(GL_POLYGON); glVertex2f(150, 50); glVertex2f(150, 75); glVertex2f(162.5, 87.5); glVertex2f(175, 75); glVertex2f(175, 50); glVertex2f(162.5, 37.5); glEnd(); glDisable(GL_CULL_FACE); glFlush(); } void reshape(int w, int h){ glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h); } int main(int argc, char **argv){ strcpy(argv[0], "James Box"); glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(400, 150); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); return EXIT_SUCCESS; } |
James Little |