// cc -Wall triangle.c -o traingle -lGL -lGLU -lglut -lm -lX11 -L /usr/X11R6/lib; ./traingle #include #include #include #define TRUE 1 #define FALSE 0 #define drawOneLine(x1, y1, x2, y2) glBegin(GL_LINES); \ glVertex2f((x1), (y1)); glVertex2f((x2), (y2)); glEnd( ); GLint j; bool row[100] = []; bool next_row[100] = []; void display( ); bool rule(bool left, bool top, bool right) { if(left & right) { return FALSE; } else if (left & top & right) { return FALSE; } else if (left & top) { return FALSE; } else if (!top & !left & !right) { return FALSE; } return TRUE; } void display(void) { int i,k; glClear(GL_COLOR_BUFFER_BIT); glColor3f(0.0f, 0.0f, 0.0f); glPointSize(2.0); glBegin(GL_POINTS); for(i = 0; i < 100; i++) { for(k=0; k < j; k++) { if(row[i]) glVertex3f(1-i*0.025, 5-k*0.025, 0.0); } } glEnd( ); for(i = 0; i < 100; i++) { if(i == 0) { next_row[i] = rule(FALSE, row[i], row[i+1]); } else if(i == 100) { next_row[i] = rule(row[i-1], row[i], FALSE); } else { next_row[i] = rule(row[i-1], row[i], row[i+1]); } } for(i = 0; i < 100; i++) { row[i] = next_row[i]; } /* glBegin(GL_TRIANGLES);*/ /* glVertex3f(0.5, 0.5, 0.0);*/ /* glVertex3f(0.5, 0.0, 0.0);*/ /* glVertex3f(0.0, 0.5, 0.0);*/ /* glEnd( );*/ /* glTranslatef(t, -t, t);*/ /* glBegin(GL_POLYGON);*/ /* glColor3f(1.0f, 0.0f, 1.0f);*/ /* glVertex3f(0.0f, 0.0f, 0.0f);*/ /* glColor3f(0.0f, 1.0f, 1.0f);*/ /* glVertex3f(1.0f, 0.0f, 0.0f);*/ /* glColor3f(1.0f, 1.0f, 0.0f);*/ /* glVertex3f(1.0f, 1.0f, 0.0f);*/ /* glColor3f(0.0f, 0.0f, 0.0f);*/ /* glVertex3f(0.0f, 1.0f, 0.0f);*/ /* glEnd( );*/ glutSwapBuffers( ); glutPostRedisplay( ); j++; /* printf("%f\n", t);*/ } void init(void) { int i; glClearColor(1.0, 1.0, 1.0, 0.0); glMatrixMode(GL_PROJECTION); glOrtho(0.0, 125.0, 0.0, 125.0, 0.0, 125.0); glLoadIdentity( ); j = 0; for(i=0; i<100; i++) { row[i] = FALSE; next_row[i] = FALSE; } row[50] = TRUE; } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(250,250); glutInitWindowPosition(100, 100); glutCreateWindow("Hello"); init( ); glutDisplayFunc(display); /* glutIdleFunc(display);*/ glutMainLoop( ); return 0; }