#include <GL/glut.h>
#include <stdlib.h>

GLfloat ctrlpoints[4][3] = {
        {-4.0, -4.0, 0.0}, {-2.0, 4.0, 0.0}, 
        { 2.0, -4.0, 0.0}, { 4.0, 4.0, 0.0}};

void init(void)
{
   glClearColor(0.0, 0.0, 0.0, 0.0);
   glShadeModel(GL_FLAT);
   glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]);
   glEnable(GL_MAP1_VERTEX_3);
   glMatrixMode(GL_PROJECTION); 
   glLoadIdentity();
   glOrtho(-8.0, 8.0, -6.0, 6.0, -5.0, 5.0);
   glMatrixMode(GL_MODELVIEW); 
   glLoadIdentity();
}

void display(void)
{
   int i;
   glClear(GL_COLOR_BUFFER_BIT);
   glColor3f(1.0, 1.0, 1.0);
   glBegin(GL_LINE_STRIP);
      for (i=0; i<=30; i++) glEvalCoord1f((GLfloat) i/30.0);  
   glEnd();
   glPointSize(5.0);
   glColor3f(1.0, 1.0, 0.0);
   glBegin(GL_POINTS);
      for (i=0; i<4; i++) glVertex3fv(&ctrlpoints[i][0]);
   glEnd();
   glFlush();
}

int main(int argc, char** argv)
{
   glutInit(&argc, argv);
   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
   glutInitWindowSize (800, 600);
   glutInitWindowPosition (0,0);
   glutCreateWindow ("bezier-curve");
   init ();
   glutDisplayFunc(display);
   glutMainLoop();
   return 0;
}