프로그래밍/OpenGL

2차원 직사각형 그리기

이재만박사 2014. 1. 8. 00:27

다음과 같은 코드를 통해 그리기(Drawing)이 이루어진다

 

 

 

2-2 는 사각형을 칠할 색상이다

2-3dms 사각형을 그린다.

glRectf(x1, y1, x2, y2);

(x1, y1)은 좌측 하단 좌표, (x2, y2)는 우측 상단 좌표이다

핵심은 z = 0 인 평면에 사각형을 그린다

 

다음 코드는 화면에 그리는 코드이다

 

 

 

 

3-1 은 화면 사이즈에 맞게 끔 늘려주는 함수이다

뷰 포트라고 하고 처음 두 좌표가 시작점이고 마지막 두 점이 끝 점이다

보통 화면에 다 이미지를 채우고 싶으면 위와 같이 작성한다

 

3-2 는 Projection Matrix를 사용하겠다는 의미이다

Projection 종류는 두 가지가 있다

Orthographic Projection 과 Perspective Projection 이 있다

여기서는  Orthographic Projection에 대해 자세히 다룬다

 

glOrtho() 함수가 핵심인데 6개의 인자는 다음과 같다

left, right, bottom, top, near, far 이다

left, right - x 축 최소 최대

bottom, top - y 축 최소 최대

near, far - z 축 최소 최대

z 축의 경우는 값이 작아질수록 관측자로부터 물어진다

 

near, far 의 값은 Z = 0을 사이에 두고 값이 있으면 된다

즉 -1 ~ 1 이어도 상관 없고 -5~5 이어도 상관 없다

만약 near, far 값이 3 ~ 5 이면 클리핑 영역이

직사각형 앞 쪽에 있으므로 빨간 사각형이 화면에 보이지 않는다

마찬가지로 -7 ~ -9로 두면 클리핑 직육면체가 사각형 뒤 쪽에 있으므로

보이지 않는다

 

값을 넣어서 테스트 해보기 바란다

 

glOrtho()의 인자 값을 바꾸어서 테스트 해서 감을 잡아봐라 많은 도움이 될 것이다

 

해상도 600 x 600 화면에 오른쪽 위의 1/4을 채운 빨간 사각형을 그리고 싶으면

다음과 같은 값을 주면 된다

glViewport(0, 0, 600, 600);

glRectf(0.0f, 0.0f, 10.0f, 10.0f);

glOrtho(-10.0f, 10.0f, -10.0f, 10.0f, 1.0f, -1.0f);

 

다음과 같은 코드도 가능하다

glViewport(0, 0, 600, 600);

glRectf(0.0f, 0.0f, 2.0f, 2.0f);

glOrtho(-2.0f, 2.0f, -2.0f, 2.0f, 0.001f, -0.005f);

 

기본은 끝났다 다음은 기본 도형들을 그려보자

 

프로그래밍 연습

1. 사각형을 다음과 같은 비율과 위치로 나오게 해보라

가로 5 세로 2 위치 왼쪽 아래 꼭지점이 화면 가운데 나오게 하기

결과는 다음과 같을 것이다

 

 

 

2. near, far 가 -1 ~ 1 과 1 ~ -1 이 무슨 차이인지 조사해 보라

glOrtho(-10.0f, 10.0f, -10.0f, 10.0f, 1.0f, -1.0f);

glOrtho(-10.0f, 10.0f, -10.0f, 10.0f, -1.0f, 1.0f);

 

위의 두 줄의 코드는 무슨 차이인가?

 

 

다음은 전체 코드이다