Undergoing

삼각형 분할하기 + 사면체 분할하기 본문

~2012.05.01 Legacy

삼각형 분할하기 + 사면체 분할하기

Halkrine 2010. 3. 17. 11:39

------------------------------------------------------------------------------------------------------------------
1. 삼각형 분할하기

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<GL/glut.h>

GLfloat v[3][2]={{-1.0, -0.58}, {1.0, -0.58}, {0.0, 1.15}};
int n=5; //5회 분할을 선언

void triangle(GLfloat *a, GLfloat *b, GLfloat *c) //삼각형의 점 설정, x축과 y축, z축
{
    glBegin(GL_TRIANGLES);
      glVertex2fv(a);
      glVertex2fv(b); 
      glVertex2fv(c);
    glEnd();
}
void divide_triangle(GLfloat *a, GLfloat *b, GLfloat *c, int k) //k는 반복 제어 함수 k값은 display함수에서 가져 옴
{
   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();  //finish보다 종료 속도가 더 빠름
}

 void myinit(void)
 {
 /* 속성들 */

  glClearColor(1.0, 1.0, 1.0, 1.0); /* 흰 배경 */
  glColor3f(1.0, 0.0, 0.0); /* 적색으로 그림 */

 /* 관측의 설정 */

  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluOrtho2D(-2.0, 2.0, -2.0, 2.0); //관측공간의 너비와 높이 설정
  glMatrixMode(GL_MODELVIEW);
 }


void main(int argc, char **argv)
{
 glutInit(&argc, argv);
 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //윈도우의 속성을 요청. 프레임버퍼 1개만, RGB컬러 사용
 glutInitWindowSize(500, 500); //500*500 픽셀단위로 설정
 glutInitWindowPosition(0, 0); //화면 좌상단의 위치 지정
 glutCreateWindow("triangle");
 glutDisplayFunc(display); //디스플레이 답신 지정
 myinit();
 glutMainLoop(); //무한 이벤트 루프로 돌아감
}

결과

------------------------------------------------------------------------------------------------------------------

2. 사면체 분할하기