[OpenGL] 기본 도형 그리기2015. 11. 26. 21:23
오픈지엘로 여러개 도형을 그리는 방법을 알아보자
///////////////////////////////////
기본
//////////////////////////////////
★ 도형 1개 그리기
ㄱ. 삼각형
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <Windows.h> #include <gl/glut.h> #include <stdio.h> #include <conio.h> void DoDisplay(); void main() { glutCreateWindow("OpenGL"); glutDisplayFunc(DoDisplay); // glutMainLoop(); // } void DoDisplay() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex2f(0, 0.1); glVertex2f(-0.1, -0.1); glVertex2f(0.1, -0.1); glEnd(); glFlush(); } | cs |
glutDisplayFunc 함수로 실제 도형을 출력하는 함수(DoDisplay)를 등록합니다.
glutMainLoop 함수는 말 그대로 메인 루프(=무한반복)
GL_TRIANGLES : 말 그대로 삼각형을 그린다는 것 (세 개씩 연결한다)
glVertex2f(0, 0.1);
glVertex2f(-0.1, -0.1);
glVertex2f(0.1, -0.1);
이 부분은 원점을 피벗으로 하여, 크기가 0.1 인 삼각형을 그린 것이다.
2. 사각형
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 | #include <Windows.h> #include <gl/glut.h> #include <stdio.h> #include <conio.h> void DoDisplay(); void main() { glutCreateWindow("OpenGL"); glutDisplayFunc(DoDisplay); // glutMainLoop(); // } void DoDisplay() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON); glVertex2f(0.1, 0.1); glVertex2f(-0.1, 0.1); glVertex2f(-0.1, -0.1); glVertex2f(0.1, -0.1); glEnd(); glFlush(); } | cs |
GL_POLYGON : 연결된 다각형을 그린다는 의미
glVertex2f(0.1, 0.1);
glVertex2f(-0.1, 0.1);
glVertex2f(-0.1, -0.1);
glVertex2f(0.1, -0.1);
이 부분은 원점을 피벗으로 하여, 크기가 0.1 인 사각형을 그린 것이다.
3. 원
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 32 | #include <Windows.h> #include <gl/glut.h> #include <stdio.h> #include <conio.h> void DoDisplay(); void main() { glutCreateWindow("OpenGL"); glutDisplayFunc(DoDisplay); // glutMainLoop(); // } void DoDisplay() { glClear(GL_COLOR_BUFFER_BIT); float radius = 0.1; float angle = 3.141592 / 180 // 라디안 = 파이(==180), 파이 / 180 = 1도 int max_angle = 360; glBegin(GL_POLYGON); for (int i = 0; i < max_angle; i++) { float angle = i*angle1; glVertex2f((cos(angle)*radius), (sin(angle)* radius)); } glEnd(); glFlush(); } | cs |
원점을 기준으로
반지름은 0.1
각은 1도 : PI 는 라디안이다. 1라디안은 180도다.(PI=180), PI/180 = 1 => 1˚
가장 큰 각도의 값은 360
1도씩 증가시키면서 원을 그리는데
glVertex2f((cos(angle)*radius), (sin(angle)* radius));
이 부분은 삼각함수 항등식 개념을 사용한 것이다.
단위원을 생각해볼때
cosΘ = x / 1
1은 생략 가능하므로, cosΘ = x 를 의미
sinΘ = y / 1
1은 생략 가능하므로, sinΘ = y 를 의미
여기에
반지름 r
원점 O
임의의 점 P
라고 할 때,
cosΘ = x / r
sinΘ = y / r
이 식을 x 와 y 로 정리하면
x = cosΘ * r
y = sinΘ * r
그래서 glVertex2f((cos(angle)*radius), (sin(angle)* radius)); 를 사용
이외에는 여기서 응용
'(구) 자니..?' 카테고리의 다른 글
[퍼온 자료] Lua와 C 바인딩 (0) | 2018.10.25 |
---|---|
[Lua] 기초 : if 문법 / end expected near eof (0) | 2016.09.09 |
[OpenGL] 윈도우 좌표를 OpenGL 좌표로 변환하기 (1) | 2015.11.19 |
[OpenGL] 초기 설정 및 셋팅 (1) | 2015.10.24 |