13.016 Introduction to Geometric Modeling and Computation


OpenGL Graphics Library Utility Toolkit (GLUT)
(Continued)

Here is the remainder of the example program:

#include <GL/gl.h>                   /* OpenGL library */
#include <GL/glu.h>                  /* OpenGL utility library */
#include "glut.h"                    /* GLUT library */

#define DEG_TO_RAD 0.017453293       /* convert from degrees to radians */
                                     /* DEG_TO_RAD = PI/180 */
void main(int argc, char **argv)
{
  ...
}

void reshapeCB(int width, int height)
{
  glViewport(0, 0, width, height);    /* set viewport to fill window */
}

/***************************************************************
 *  This callback function is automatically called whenever
 *  the window needs to be redrawn.
 **************************************************************/

void displayCB(void)
{
  float deg = 18.0, scale, width, xy[5][2];
  int i;

  for (i=0; i<5; i++) {               /* find the coordinates of vertices */
    xy[i][0] = cos(deg*DEG_TO_RAD);   /* the cos and sin functions require */
    xy[i][1] = sin(deg*DEG_TO_RAD);   /* the angle argument in radians */
    deg += 72.0;
  }

  glClearColor(0.0, 0.0, 0.0, 0.0);   /* set the clear color to black */
  glClear(GL_COLOR_BUFFER_BIT);       /* erase the window to black */

  gluOrtho2D(-1.0, 1.0, -1.0, 1.0);   /* define a 2D orthographic projection */

  for (i=0; i<4; i++) {               /* draw the star 4 times */
    switch (i) {
    case 0:
      glColor3f(1.0, 1.0, 1.0);       /* first star is white */
      break;
    case 1:
      glColor3f(1.0, 0.0, 0.0);       /* second star is red */
      break;
    case 2:
      glColor3f(0.0, 1.0, 0.0);       /* third star is green */
      break;
    case 3:
      glColor3f(0.0, 0.0, 1.0);       /* fourth star is blue */
      break;
    }
    width = 2.0*(4-i);                /* set the line width */
    glLineWidth(width);               /* i = 0, width = 8 */
                                      /*     1,         6 */
                                      /*     2,         4 */
                                      /*     3,         2 */

    scale = 1.0 - i*0.2;              /* scale factor */
                                      /* i = 0, scale = 1.0 */
                                      /*     1          0.8 */
                                      /*     2          0.6 */
                                      /*     3          0.4 */

    glBegin(GL_LINE_LOOP);            /* start a GL_LINE_LOOP */
    glVertex2f(xy[0][0]*scale, xy[0][1]*scale);   /* add the first vertex */
    glVertex2f(xy[2][0]*scale, xy[2][1]*scale);   /* add second vertex ... */
    glVertex2f(xy[4][0]*scale, xy[4][1]*scale);
    glVertex2f(xy[1][0]*scale, xy[1][1]*scale);
    glVertex2f(xy[3][0]*scale, xy[3][1]*scale);   /* we don't need to add */
    glEnd();                                      /* the first vertex again */
  }

  glFlush();                          /* actually draw on screen */
}

On to making the programs...
Back to GLUT...
Back to the overview...