일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- tortoise SVN
- NextJs
- Spring
- PostgreSQL
- Spring Cloud
- Windows 10
- graph database
- springboot
- NestJS
- Can't load AMD 64-bit .dll on a IA 32-bit platform
- HTML Code
- Maven Project
- STS
- tomcat
- maven
- exit code = -805306369
- BRIN
- Java
- JSP
- orioledb
- HTML Special Entity
- Spring Boot
- typeorm
- OGM
- Next.js
- Eclipse
- PG-Strom
- 서브라임 텍스트
- MariaDB
- loadcomplete
- Today
- Total
Undergoing
삼각형 분할하기 + 사면체 분할하기 본문
------------------------------------------------------------------------------------------------------------------
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. 사면체 분할하기
'~2012.05.01 Legacy' 카테고리의 다른 글
Agile Process Model (0) | 2010.03.31 |
---|---|
입력 n이 주어질 때 원주상에 균일하게 자리잡은 n 개의 점들을 서로 연결한 그림을 출력하는 OpenGL 프로그램을 작성하시오. (1) | 2010.03.19 |
가스켓 프로그램 (0) | 2010.03.14 |
[LINUX/UNIX] 왜 리눅스를 배워야 하는가 (0) | 2009.10.04 |
ISE와 ModelSim을 이용한 전가산기 만들기 (0) | 2009.05.25 |