#include
GLfloat v[3][2]={{-1.0, -0.58}, {1.0, -0.58}, {0.0, 1.15}};
int n=5;
void triangle(GLfloat *a, GLfloat *b, GLfloat *c)
{
glBegin(GL_TRIANGLES);
glVertex2fv(a);
glVertex2fv(b);
glVertex2fv(c);
glEnd();
}
void divide_triangle(GLfloat *a, GLfloat *b, GLfloat *c, int k)
{
GLfloat ab[2], ac[2], bc[2];
int j;
if(k>0)
{
/* 변의중점계산*/
for(j=0; j<2; j++) ab[j]=(a[j]+b[j])/2;
for(j=0; j<2; j++) ac[j]=(a[j]+c[j])/2;
for(j=0; j<2; j++) bc[j]=(b[j]+c[j])/2;
/* 내부를제외한3개의삼각형분할*/
divide_triangle(a, ab, ac, k-1);
divide_triangle(c, ac, bc, k-1);
divide_triangle(b, bc, ab, k-1);
}
else(triangle(a,b,c)); /*재귀가끝나면삼각형그림*/
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
divide_triangle(v[0], v[1], v[2], n);
glEnd();
glFlush();
}
void main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(700, 700);
glutInitWindowPosition(0, 0);
glutCreateWindow("simple OpenGL example");
glutDisplayFunc(display);
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluOrtho2D( -1.5, 1.5, -1.5, 1.5 );
glMatrixMode( GL_MODELVIEW );
glutMainLoop();
}