다음과 같은 코드를 통해 그리기(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);
위의 두 줄의 코드는 무슨 차이인가?
다음은 전체 코드이다
기본 코드를 확인해보자
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. 배경 화면을 노란색으로 채워보자
앞으로 사용될 기본 코드이다
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"로 바꾸어 보자
VS2012 버전이고 OpenGL 기반이다
VS2012가 없으면 각 버전의 Visual Studio에 헤더와 소스를 추가시키고 OpenGL 링크하면 빌드가 된다
이 소스를 기반으로 대한민국 렌더링에 많은 발전이 있었으면 좋겠어요 ^^
자료는 모두 오픈입니다
각 항목에 대해서 PPT 자료를 따로 만들어 놓았으니
필요하신 분은 문의 바랍니다
기본적으로는 PDF 파일을 보내드리고
정말로 자기가 수정해서 잘 사용하고 싶다 하시는 분은
따로 문의 해주시면 PPT 파일 보내드립니다
소스 코드는 GPL 라이센스를 따릅니다
BSD 라이센스로 이용하고 싶은 사람은
lividious@naver.com 으로 문의 바랍니다