http://icomn.net/~dak/images/sierpinskigasket.png void myinit() { glClearColor(1.0, 1.0, 1.0, 1.0); /* white background */ glColor3f(1.0, 0.0, 0.0); /* draw in red */ /* set up viewing */ /* 500 x 500 window with origin lower left */ glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, 500.0, 0.0, 500.0); glMatrixMode(GL_MODELVIEW); } void display() { /* define a point data type */ typedef GLfloat point2[2]; point2 vertices[3]={{0.0, 0.0},{250.0, 500.0}, {500.0, 0.0}}; /* A triangle */ int i, j, k; int rand(); /* standard random number generator */ point2 p ={75.0, 50.0}; /* An arbitray initial point inside triangle */ glClear(GL_COLOR_BUFFER_BIT); /* clear the window */ /* compute and plot 5000 new points */ for( k=0; k<5000; k++){ j=rand()%3; p[0] = (p[0]+vertices[j][0])/2.0; p[1] = (p[1]+vertices[j][1])/2.0; /* plot new point */ glBegin(GL_POINTS); glVertex2fv(p); glEnd(); } glFlush(); /* clear Buffers */ } int main(int argc, char** argv) { /* Standard GLUT initialization */ glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); /* default, not needed */ glutInitWindowSize(500,500); /* 500 x 500 pixel window */ glutInitWindowPosition(0,0); /* place window top left on display */ glutCreateWindow("Sierpinski Gasket"); /* window title */ glutDisplayFunc(display); /* display callback invoked when window opened */ myinit(); /* set attributes */ glutMainLoop(); /* enter event loop */ } [OpenGL]