#include //#include //comment this out for .net #include #include #define PI 3.14 void reshape (int w, int h) { glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); glOrtho (0.0, (GLdouble) w, 0.0, (GLdouble) h, -500.0, 500.0); glMatrixMode (GL_MODELVIEW); } /* input event - keyboard */ void keyboard(unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; } } void myinit(void) { /* attributes */ glClearColor(0.0, 0.3, 0.50, 0.0); /* blue background */ glDepthFunc(GL_LEQUAL); glEnable(GL_DEPTH_TEST); /* set up viewing */ /* 500 x 500 x 500 window with origin lower left */ glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, 500.0, 0.0, 500.0, -500.0, 000.0); glMatrixMode(GL_MODELVIEW); } void display( void ) { GLubyte stripe[] = { 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x7f, 0xff, 0x08, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x3f, 0xff, 0xc0, 0x00, 0x3f, 0xff, 0xe0, 0x00, 0x1f, 0xff, 0xe0, 0x00, 0x1f, 0xff, 0xf0, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x0f, 0xff, 0xf8, 0x00, 0x07, 0xff, 0xf8, 0x00, 0x07, 0xff, 0xfc, 0x00, 0x03, 0xff, 0xfc, 0x00, 0x03, 0xff, 0xfe, 0x00, 0x01, 0xff, 0xfe, 0x00, 0x01, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x3f, 0xff, 0xc0, 0x00, 0x3f, 0xff, 0xe0, 0x00, 0x1f, 0xfe, 0xe0, 0x00, 0x1f, 0xff, 0xf0, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x0f, 0xff, 0xf8, 0x00, 0x07, 0xff, 0xf8, 0x00, 0x07, 0xff, 0xfc, 0x00, 0x03, 0xff, 0xfc, 0x00, 0x03, 0xff, 0xfe, 0x00, 0x01, 0xff, 0xfe, 0x00, 0x01}; glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); /*clear the window */ glColor3f(0.0, 1.0, 0.0); glBegin(GL_TRIANGLE_STRIP); /* hull */ glVertex3f(100.0,150.0,250.0); glVertex3f(150.0,150.0,350.0); glVertex3f(150.0,100.0,250.0); glVertex3f(350.0,150.0,350.0); glVertex3f(350.0,100.0,250.0); glVertex3f(400.0,150.0,250.0); glEnd(); glBegin(GL_TRIANGLE_STRIP); /* hull */ glVertex3f(400.0,150.0,250.0); glVertex3f(350.0,150.0,150.0); glVertex3f(350.0,100.0,250.0); glVertex3f(150.0,150.0,150.0); glVertex3f(150.0,100.0,250.0); glVertex3f(100.0,150.0,250.0); glEnd(); glColor3f(.8, .8, .8); /* mast */ glBegin(GL_QUAD_STRIP); glVertex3f(175.0,125.0, 260.0); glVertex3f(175.0,450.0, 260.0); glVertex3f(190.0,125.0, 260.0); glVertex3f(190.0,450.0, 260.0); glVertex3f(190.0,125.0, 240.0); glVertex3f(190.0,450.0, 240.0); glVertex3f(175.0,125.0, 240.0); glVertex3f(175.0,450.0, 240.0); glVertex3f(175.0,125.0, 260.0); glVertex3f(175.0,450.0, 260.0); glEnd(); glColor3f(1.0, 1.0, 1.0); /* sail*/ glBegin(GL_TRIANGLE_FAN); glVertex3f(100.0,200.0, 280.0); glVertex3f(210.0,470.0, 300.0); glVertex3f(270.0,350.0, 400.0); glVertex3f(300.0,275.0, 430.0); glVertex3f(360.0,200.0, 450.0); glEnd(); glEnable(GL_POLYGON_STIPPLE); glPolygonStipple(stripe); glColor3f(0.5, .5, 0.8); /* sail*/ glBegin(GL_TRIANGLE_FAN); glVertex3f(100.0, 200.0, 280.0); glVertex3f(210.0, 470.0, 300.0); glVertex3f(270.0, 350.0, 400.0); glVertex3f(300.0, 275.0, 430.0); glVertex3f(360.0, 200.0, 450.0); glEnd(); glDisable(GL_POLYGON_STIPPLE); glColor3f(1.0, 1.0, 0.0); /* rudder */ glBegin(GL_QUADS); glVertex3i(325,165,250); glVertex3i(425,165,250); glVertex3i(425,155,250); glVertex3i(325,155,250); glEnd(); glBegin(GL_POLYGON); glVertex3i(425,165,250); glVertex3i(430,100,250); glVertex3i(440, 80,250); glVertex3i(425, 75,250); glVertex3i(410, 75,250); glVertex3i(410,155,250); glEnd(); glFlush(); /* clear buffers */ } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (500, 500); glutInitWindowPosition (0, 0); glutCreateWindow ("Susan's Picture"); /* window title */ myinit (); /* set attributes */ glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; }