/*************************************************** * Author: Ting-jen Yen * * Purpose: Simple illustration of stroke fonts * Uses the Sierpinski's Gasket example from * Angel's book, modified to display the words * "Test". * * Compile with options * -lglut -lGL -lGLU -lXmu -lX11 -lm ***************************************************/ #include /*************************************************** * myinit ***************************************************/ void myinit(void) { /* color attributes */ glClearColor(1.0, 1.0, 1.0, 1.0); /* white background */ glColor3f(1.0, 0.0, 0.0); /* draw in red */ /* set up 500 x 500 window with origin lower left */ glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, 500.0, 0.0, 500.0); glMatrixMode(GL_MODELVIEW); }//myinit /*************************************************** * Point data type ***************************************************/ typedef GLfloat point2[2]; point2 vertices[3]={ {0.0,0.0},{250.0,500.0},{500.0,0.0}}; /* A triangle */ /*************************************************** * display ***************************************************/ void display( void ) { int i, j, k; long random(); /* standard random number generator */ point2 p ={75.0,50.0}; /* An srbitrary initial point */ glClear(GL_COLOR_BUFFER_BIT); /*clear the window */ /* computes and plots 5000 new points */ for( k=0; k<5000; k++) { j=random()%3; /* pick a vertex at random */ /* Compute point halfway between vertex and old point */ 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(); }//for /* Begin of the changed part */ glColor3f(0.0, .5,.5); /* change the color */ glPushMatrix(); /* Store the original transformation matrix */ glTranslatef(200, 200, 0); /* Translate the coordinate to where we put the characters */ glRotatef(45., 0., 0., 1.); /* Rotate it a little bit */ glScalef(0.5, 1.5, 1); /* make some scaling. */ glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN, 'T'); glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN, 'e'); glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN, 's'); glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN, 't'); glPopMatrix(); /* restore the transformation matrix */ /* End of the change code */ glFlush(); /* clear buffers */ }//display 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 */ }//main /**************** THE END ***********************************/