본문 바로가기
  • fishing...
  • eating...
MISCELLANEOUSNESS

2차원 가스킷

by 회색뿔 2010. 3. 17.


#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();
}




'MISCELLANEOUSNESS' 카테고리의 다른 글

3차원 가스킷  (2) 2010.03.17
가스킷 그리기  (0) 2010.03.11
D3D] MFC - DirectX  (0) 2010.02.28