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);

 

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

 

 

다음은 전체 코드이다

 

 

 

2014. 1. 6. 21:14

기본 코드를 확인해보자

SetupRC() 함수는 초기에 한 번 호출 된다 ( Init() 함수와 같다고 보면 된다 )

 

SetupRC() 함수 안에 Region 1 안에 glClearColor(0.0f, 0.0f, 1.0f, 0.0f); 를 입력한다

이 함수는 지우는 색을 지정하는 함수이다

일단은 처음에 한 번만 지정한다

 

Region2에 다음 코드를 입력한다

glClear(GL_COLOR_BUFFER_BIT);

Color Buffer(색상 버퍼, 픽셀 버퍼)를 지우는 함수이다

GL_COLOR_BUFFER_BIT로 플래그로 설정한다

 

색상 버퍼 이외에도 버퍼 종류로는 깊이 버퍼, 스텐실 버퍼 등이 있다

이 버퍼들은 이후에 자세히 다룬다

 

glutSwapBuffers() 함수를 추가한다

이 함수는 더블 버퍼일 때 Front Buffer와 Back Buffer를 교체한다

코드의 추가 내용은 다음과 같다

 

 

 

 

결과 내용은 다음과 같다

 

 

 

우리가 원하는 대로 창을 지정한 색으로 다 지우고 그 색으로 채웠다

다음 과정은 이 위에 원하는 그림을 그리자

 

아래의 코드는 전체 코드이다

 

 

* 프로그래밍 연습

1. 배경 화면을 빨간색으로 채워보자

2. 배경 화면을 녹색으로 채워보자

3. 배경 화면을 노란색으로 채워보자

 

2014. 1. 6. 20:21

앞으로 사용될 기본 코드이다

Visual Studio 2010을 사용했다

Console Application을 사용했고

Empty Project이고 Unicode에서 구현한다

 

 

다음 소스는 기본 틀이다

맨 위의 주석 두 줄은 GPL License의 기본 틀이다

OpenGL 기본 세팅은 생략한다 다른 사이트를 참고하기 바란다

크게 다른 프로그램을 만들지 않는 한 Region 으로 구분, 코드를 추가한다

 

 

다음은 실행 결과이다

코드와 일치시켜서 알 수 있는 것은

4-3과 4-4의 코드가 적용 되었다는 것을 확인

4-3 윈도우 사이즈가 800 x 600 이다

4-4 윈도우 타이틀 제목이 "OpenGL Basic Code Window~~!!" 이다

4-8 은 GLUT 프레임 워크를 실행하는 기능이다

4-5는 화면의 사이즈가 변할 때 호출되는 콜백함수(ChangeSize)를 등록한다

4-6은 화면이 그려질 때 호출되는 콜백 함수를 등록한다

다음에 할 일은 창에 나타난 부분이 배경화면인데

이 부분을 지우는 부분을 구현하도록 한다

즉 창 바탕 화면을 원하는 색으로 칠해보도록 하자

 

* 프로그래밍 연습

1. 윈도우 사이즈를 400 x 200으로 수정해보자

2. 윈도우 타이틀 제목을 "Hello, World"로 바꾸어 보자

 

2014. 1. 6. 17:38

 


 

Classic+Radiosity.zip



VS2012 버전이고 OpenGL 기반이다

VS2012가 없으면 각 버전의 Visual Studio에 헤더와 소스를 추가시키고 OpenGL 링크하면 빌드가 된다

이 소스를 기반으로 대한민국 렌더링에 많은 발전이 있었으면 좋겠어요 ^^

2014. 1. 6. 17:25

자료는 모두 오픈입니다

각 항목에 대해서 PPT 자료를 따로 만들어 놓았으니

필요하신 분은 문의 바랍니다

기본적으로는 PDF 파일을 보내드리고

정말로 자기가 수정해서 잘 사용하고 싶다 하시는 분은

따로 문의 해주시면 PPT 파일 보내드립니다

소스 코드는 GPL 라이센스를 따릅니다

BSD 라이센스로 이용하고 싶은 사람은

lividious@naver.com 으로 문의 바랍니다