Game !



오픈지엘로 여러개 도형을 그리는 방법을 알아보자






///////////////////////////////////

기본

//////////////////////////////////


★ 도형 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(00.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.10.1);
        glVertex2f(-0.10.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)); 를 사용







이외에는 여기서 응용